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 <QThread>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|
||||||
namespace osgQtQuick {
|
|
||||||
/*
|
/*
|
||||||
Debugging tips
|
Debugging tips
|
||||||
- export OSG_NOTIFY_LEVEL=DEBUG
|
- export OSG_NOTIFY_LEVEL=DEBUG
|
||||||
@ -79,18 +78,44 @@ namespace osgQtQuick {
|
|||||||
|
|
||||||
TODO : add OSGView to handle multiple views for a given OSGViewport
|
TODO : add OSGView to handle multiple views for a given OSGViewport
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
namespace osgQtQuick {
|
||||||
|
class ViewportRenderer;
|
||||||
|
|
||||||
struct OSGViewport::Hidden : public QObject {
|
struct OSGViewport::Hidden : public QObject {
|
||||||
Q_OBJECT
|
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:
|
public:
|
||||||
|
|
||||||
Hidden(OSGViewport *viewport) : QObject(viewport),
|
Hidden(OSGViewport *viewport) : QObject(viewport),
|
||||||
self(viewport),
|
self(viewport),
|
||||||
window(NULL),
|
window(NULL),
|
||||||
|
frameTimer(-1),
|
||||||
sceneData(NULL),
|
sceneData(NULL),
|
||||||
camera(NULL),
|
camera(NULL),
|
||||||
updateMode(UpdateMode::Discrete),
|
updateMode(UpdateMode::Discrete),
|
||||||
frameTimer(-1)
|
busy(false)
|
||||||
{
|
{
|
||||||
OsgEarth::initialize();
|
OsgEarth::initialize();
|
||||||
|
|
||||||
@ -274,22 +299,7 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
OSGViewport *self;
|
private:
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
void createViewer()
|
void createViewer()
|
||||||
{
|
{
|
||||||
if (viewer.valid()) {
|
if (viewer.valid()) {
|
||||||
@ -511,10 +521,15 @@ public:
|
|||||||
h->view->getCamera()->getGraphicsContext()->resized(0, 0, item->width() * dpr, item->height() * dpr);
|
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) {
|
if (!needToDoFrame) {
|
||||||
needToDoFrame = h->viewer->checkNeedToDoFrame();
|
needToDoFrame = h->viewer->checkNeedToDoFrame();
|
||||||
}
|
}
|
||||||
if (!needToDoFrame) {
|
if (!needToDoFrame) {
|
||||||
|
// calling checkNeedToDoFrame is not enough...
|
||||||
needToDoFrame = !h->view->getEventQueue()->empty();
|
needToDoFrame = !h->view->getEventQueue()->empty();
|
||||||
}
|
}
|
||||||
if (needToDoFrame) {
|
if (needToDoFrame) {
|
||||||
@ -592,35 +607,6 @@ OSGViewport::~OSGViewport()
|
|||||||
delete h;
|
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()
|
OSGNode *OSGViewport::sceneData()
|
||||||
{
|
{
|
||||||
return h->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
|
QQuickFramebufferObject::Renderer *OSGViewport::createRenderer() const
|
||||||
{
|
{
|
||||||
qDebug() << "OSGViewport::createRenderer";
|
qDebug() << "OSGViewport::createRenderer";
|
||||||
|
@ -49,10 +49,11 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class OSGQTQUICK_EXPORT OSGViewport : public QQuickFramebufferObject {
|
class OSGQTQUICK_EXPORT OSGViewport : public QQuickFramebufferObject {
|
||||||
Q_OBJECT Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
|
Q_OBJECT Q_PROPERTY(osgQtQuick::OSGNode *sceneData READ sceneData WRITE setSceneData NOTIFY sceneDataChanged)
|
||||||
Q_PROPERTY(osgQtQuick::UpdateMode::Enum updateMode READ updateMode WRITE setUpdateMode NOTIFY updateModeChanged)
|
|
||||||
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::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:
|
public:
|
||||||
friend class ViewportRenderer;
|
friend class ViewportRenderer;
|
||||||
@ -60,26 +61,30 @@ public:
|
|||||||
explicit OSGViewport(QQuickItem *parent = 0);
|
explicit OSGViewport(QQuickItem *parent = 0);
|
||||||
virtual ~OSGViewport();
|
virtual ~OSGViewport();
|
||||||
|
|
||||||
UpdateMode::Enum updateMode() const;
|
|
||||||
void setUpdateMode(UpdateMode::Enum mode);
|
|
||||||
|
|
||||||
QColor color() const;
|
|
||||||
void setColor(const QColor &color);
|
|
||||||
|
|
||||||
OSGNode *sceneData();
|
OSGNode *sceneData();
|
||||||
void setSceneData(OSGNode *node);
|
void setSceneData(OSGNode *node);
|
||||||
|
|
||||||
OSGCamera *camera();
|
OSGCamera *camera();
|
||||||
void setCamera(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;
|
Renderer *createRenderer() const;
|
||||||
void releaseResources();
|
void releaseResources();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void updateModeChanged(UpdateMode::Enum mode);
|
|
||||||
void colorChanged(const QColor &color);
|
|
||||||
void sceneDataChanged(OSGNode *node);
|
void sceneDataChanged(OSGNode *node);
|
||||||
void cameraChanged(OSGCamera *camera);
|
void cameraChanged(OSGCamera *camera);
|
||||||
|
void updateModeChanged(UpdateMode::Enum mode);
|
||||||
|
void busyChanged(bool busy);
|
||||||
|
void colorChanged(const QColor &color);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent *event);
|
void mousePressEvent(QMouseEvent *event);
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
* along with LibrePilot GCS. If not, see <http://www.gnu.org/licenses/>.
|
* along with LibrePilot GCS. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import QtQuick 2.4
|
import QtQuick 2.4
|
||||||
|
import QtQuick.Controls 1.4
|
||||||
|
|
||||||
import Pfd 1.0
|
import Pfd 1.0
|
||||||
import OsgQtQuick 1.0
|
import OsgQtQuick 1.0
|
||||||
@ -26,6 +27,7 @@ import "common.js" as Utils
|
|||||||
|
|
||||||
Item {
|
Item {
|
||||||
OSGViewport {
|
OSGViewport {
|
||||||
|
id: osgViewport
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
focus: true
|
focus: true
|
||||||
sceneData: skyNode
|
sceneData: skyNode
|
||||||
@ -50,5 +52,23 @@ Item {
|
|||||||
manipulatorMode: ManipulatorMode.Earth
|
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/>.
|
* along with LibrePilot GCS. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import QtQuick 2.4
|
import QtQuick 2.4
|
||||||
|
import QtQuick.Controls 1.4
|
||||||
|
|
||||||
import Pfd 1.0
|
import Pfd 1.0
|
||||||
import OsgQtQuick 1.0
|
import OsgQtQuick 1.0
|
||||||
@ -26,6 +27,7 @@ import "../common.js" as Utils
|
|||||||
import "../uav.js" as UAV
|
import "../uav.js" as UAV
|
||||||
|
|
||||||
OSGViewport {
|
OSGViewport {
|
||||||
|
id: osgViewport
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
focus: true
|
focus: true
|
||||||
sceneData: skyNode
|
sceneData: skyNode
|
||||||
@ -97,4 +99,15 @@ OSGViewport {
|
|||||||
Keys.onDownPressed: {
|
Keys.onDownPressed: {
|
||||||
pfdContext.previousModel();
|
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