mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-03-15 07:29:15 +01:00
LP-29 add OSGViewport busy indicator
spins when database pager requests are in progress
This commit is contained in:
parent
2c7333935d
commit
2e0f10d982
@ -58,7 +58,6 @@
|
||||
#include <QThread>
|
||||
#include <QApplication>
|
||||
|
||||
namespace osgQtQuick {
|
||||
/*
|
||||
Debugging tips
|
||||
- export OSG_NOTIFY_LEVEL=DEBUG
|
||||
@ -79,18 +78,44 @@ namespace osgQtQuick {
|
||||
|
||||
TODO : add OSGView to handle multiple views for a given OSGViewport
|
||||
*/
|
||||
|
||||
namespace osgQtQuick {
|
||||
class ViewportRenderer;
|
||||
|
||||
struct OSGViewport::Hidden : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
friend ViewportRenderer;
|
||||
|
||||
OSGViewport *self;
|
||||
|
||||
QQuickWindow *window;
|
||||
|
||||
int frameTimer;
|
||||
|
||||
public:
|
||||
OSGNode *sceneData;
|
||||
OSGCamera *camera;
|
||||
|
||||
osg::ref_ptr<osgViewer::CompositeViewer> viewer;
|
||||
osg::ref_ptr<osgViewer::View> view;
|
||||
|
||||
UpdateMode::Enum updateMode;
|
||||
|
||||
bool busy;
|
||||
|
||||
static QtKeyboardMap keyMap;
|
||||
|
||||
public:
|
||||
|
||||
Hidden(OSGViewport *viewport) : QObject(viewport),
|
||||
self(viewport),
|
||||
window(NULL),
|
||||
frameTimer(-1),
|
||||
sceneData(NULL),
|
||||
camera(NULL),
|
||||
updateMode(UpdateMode::Discrete),
|
||||
frameTimer(-1)
|
||||
busy(false)
|
||||
{
|
||||
OsgEarth::initialize();
|
||||
|
||||
@ -274,22 +299,7 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
OSGViewport *self;
|
||||
|
||||
QQuickWindow *window;
|
||||
|
||||
OSGNode *sceneData;
|
||||
OSGCamera *camera;
|
||||
|
||||
UpdateMode::Enum updateMode;
|
||||
|
||||
int frameTimer;
|
||||
|
||||
osg::ref_ptr<osgViewer::CompositeViewer> viewer;
|
||||
osg::ref_ptr<osgViewer::View> view;
|
||||
|
||||
static QtKeyboardMap keyMap;
|
||||
|
||||
private:
|
||||
void createViewer()
|
||||
{
|
||||
if (viewer.valid()) {
|
||||
@ -511,10 +521,15 @@ public:
|
||||
h->view->getCamera()->getGraphicsContext()->resized(0, 0, item->width() * dpr, item->height() * dpr);
|
||||
}
|
||||
|
||||
h->self->setBusy(h->view->getDatabasePager()->getRequestsInProgress());
|
||||
// TODO also expose request list size to Qml
|
||||
// qDebug() << h->view->getDatabasePager()->getFileRequestListSize();
|
||||
|
||||
if (!needToDoFrame) {
|
||||
needToDoFrame = h->viewer->checkNeedToDoFrame();
|
||||
}
|
||||
if (!needToDoFrame) {
|
||||
// calling checkNeedToDoFrame is not enough...
|
||||
needToDoFrame = !h->view->getEventQueue()->empty();
|
||||
}
|
||||
if (needToDoFrame) {
|
||||
@ -592,35 +607,6 @@ OSGViewport::~OSGViewport()
|
||||
delete h;
|
||||
}
|
||||
|
||||
UpdateMode::Enum OSGViewport::updateMode() const
|
||||
{
|
||||
return h->updateMode;
|
||||
}
|
||||
|
||||
void OSGViewport::setUpdateMode(UpdateMode::Enum mode)
|
||||
{
|
||||
if (h->acceptUpdateMode(mode)) {
|
||||
emit updateModeChanged(updateMode());
|
||||
}
|
||||
}
|
||||
|
||||
QColor OSGViewport::color() const
|
||||
{
|
||||
const osg::Vec4 osgColor = h->view->getCamera()->getClearColor();
|
||||
|
||||
return QColor::fromRgbF(osgColor.r(), osgColor.g(), osgColor.b(), osgColor.a());
|
||||
}
|
||||
|
||||
void OSGViewport::setColor(const QColor &color)
|
||||
{
|
||||
osg::Vec4 osgColor(color.redF(), color.greenF(), color.blueF(), color.alphaF());
|
||||
|
||||
if (h->view->getCamera()->getClearColor() != osgColor) {
|
||||
h->view->getCamera()->setClearColor(osgColor);
|
||||
emit colorChanged(color);
|
||||
}
|
||||
}
|
||||
|
||||
OSGNode *OSGViewport::sceneData()
|
||||
{
|
||||
return h->sceneData;
|
||||
@ -645,6 +631,48 @@ void OSGViewport::setCamera(OSGCamera *camera)
|
||||
}
|
||||
}
|
||||
|
||||
UpdateMode::Enum OSGViewport::updateMode() const
|
||||
{
|
||||
return h->updateMode;
|
||||
}
|
||||
|
||||
void OSGViewport::setUpdateMode(UpdateMode::Enum mode)
|
||||
{
|
||||
if (h->acceptUpdateMode(mode)) {
|
||||
emit updateModeChanged(updateMode());
|
||||
}
|
||||
}
|
||||
|
||||
bool OSGViewport::busy() const
|
||||
{
|
||||
return h->busy;
|
||||
}
|
||||
|
||||
void OSGViewport::setBusy(const bool busy)
|
||||
{
|
||||
if (h->busy != busy) {
|
||||
h->busy = busy;
|
||||
emit busyChanged(busy);
|
||||
}
|
||||
}
|
||||
|
||||
QColor OSGViewport::color() const
|
||||
{
|
||||
const osg::Vec4 osgColor = h->view->getCamera()->getClearColor();
|
||||
|
||||
return QColor::fromRgbF(osgColor.r(), osgColor.g(), osgColor.b(), osgColor.a());
|
||||
}
|
||||
|
||||
void OSGViewport::setColor(const QColor &color)
|
||||
{
|
||||
osg::Vec4 osgColor(color.redF(), color.greenF(), color.blueF(), color.alphaF());
|
||||
|
||||
if (h->view->getCamera()->getClearColor() != osgColor) {
|
||||
h->view->getCamera()->setClearColor(osgColor);
|
||||
emit colorChanged(color);
|
||||
}
|
||||
}
|
||||
|
||||
QQuickFramebufferObject::Renderer *OSGViewport::createRenderer() const
|
||||
{
|
||||
qDebug() << "OSGViewport::createRenderer";
|
||||
|
@ -49,10 +49,11 @@ public:
|
||||
};
|
||||
|
||||
class OSGQTQUICK_EXPORT OSGViewport : public QQuickFramebufferObject {
|
||||
Q_OBJECT Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
|
||||
Q_PROPERTY(osgQtQuick::UpdateMode::Enum updateMode READ updateMode WRITE setUpdateMode NOTIFY updateModeChanged)
|
||||
Q_PROPERTY(osgQtQuick::OSGNode * sceneData READ sceneData WRITE setSceneData NOTIFY sceneDataChanged)
|
||||
Q_OBJECT Q_PROPERTY(osgQtQuick::OSGNode *sceneData READ sceneData WRITE setSceneData NOTIFY sceneDataChanged)
|
||||
Q_PROPERTY(osgQtQuick::OSGCamera * camera READ camera WRITE setCamera NOTIFY cameraChanged)
|
||||
Q_PROPERTY(osgQtQuick::UpdateMode::Enum updateMode READ updateMode WRITE setUpdateMode NOTIFY updateModeChanged)
|
||||
Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
|
||||
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
|
||||
|
||||
public:
|
||||
friend class ViewportRenderer;
|
||||
@ -60,26 +61,30 @@ public:
|
||||
explicit OSGViewport(QQuickItem *parent = 0);
|
||||
virtual ~OSGViewport();
|
||||
|
||||
UpdateMode::Enum updateMode() const;
|
||||
void setUpdateMode(UpdateMode::Enum mode);
|
||||
|
||||
QColor color() const;
|
||||
void setColor(const QColor &color);
|
||||
|
||||
OSGNode *sceneData();
|
||||
void setSceneData(OSGNode *node);
|
||||
|
||||
OSGCamera *camera();
|
||||
void setCamera(OSGCamera *camera);
|
||||
|
||||
UpdateMode::Enum updateMode() const;
|
||||
void setUpdateMode(UpdateMode::Enum mode);
|
||||
|
||||
bool busy() const;
|
||||
void setBusy(const bool busy);
|
||||
|
||||
QColor color() const;
|
||||
void setColor(const QColor &color);
|
||||
|
||||
Renderer *createRenderer() const;
|
||||
void releaseResources();
|
||||
|
||||
signals:
|
||||
void updateModeChanged(UpdateMode::Enum mode);
|
||||
void colorChanged(const QColor &color);
|
||||
void sceneDataChanged(OSGNode *node);
|
||||
void cameraChanged(OSGCamera *camera);
|
||||
void updateModeChanged(UpdateMode::Enum mode);
|
||||
void busyChanged(bool busy);
|
||||
void colorChanged(const QColor &color);
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
|
@ -18,6 +18,7 @@
|
||||
* along with LibrePilot GCS. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.4
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
import Pfd 1.0
|
||||
import OsgQtQuick 1.0
|
||||
@ -26,6 +27,7 @@ import "common.js" as Utils
|
||||
|
||||
Item {
|
||||
OSGViewport {
|
||||
id: osgViewport
|
||||
anchors.fill: parent
|
||||
focus: true
|
||||
sceneData: skyNode
|
||||
@ -50,5 +52,23 @@ Item {
|
||||
manipulatorMode: ManipulatorMode.Earth
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
width: 24
|
||||
height: 24
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
anchors.margins: 4
|
||||
|
||||
running: osgViewport.busy
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
width: 24
|
||||
height: 24
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
anchors.margins: 4
|
||||
|
||||
running: osgViewport.busy
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
* along with LibrePilot GCS. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.4
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
import Pfd 1.0
|
||||
import OsgQtQuick 1.0
|
||||
@ -26,6 +27,7 @@ import "../common.js" as Utils
|
||||
import "../uav.js" as UAV
|
||||
|
||||
OSGViewport {
|
||||
id: osgViewport
|
||||
anchors.fill: parent
|
||||
focus: true
|
||||
sceneData: skyNode
|
||||
@ -97,4 +99,15 @@ OSGViewport {
|
||||
Keys.onDownPressed: {
|
||||
pfdContext.previousModel();
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
width: 24
|
||||
height: 24
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
anchors.margins: 4
|
||||
|
||||
running: osgViewport.busy
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user