From a8e6f4991b54089c0fa56d93ff2f1aa0a8862bf8 Mon Sep 17 00:00:00 2001 From: Dmytro Poplavskiy Date: Fri, 14 Sep 2012 08:50:02 +1000 Subject: [PATCH] Added "use OpenGL" option to qml based PFD --- .../src/plugins/pfdqml/pfdqmlgadget.cpp | 1 + .../pfdqml/pfdqmlgadgetconfiguration.cpp | 6 +- .../pfdqml/pfdqmlgadgetconfiguration.h | 3 + .../pfdqml/pfdqmlgadgetoptionspage.cpp | 7 +++ .../plugins/pfdqml/pfdqmlgadgetoptionspage.ui | 62 ++++++++++++------- .../src/plugins/pfdqml/pfdqmlgadgetwidget.cpp | 29 +++++++-- .../src/plugins/pfdqml/pfdqmlgadgetwidget.h | 4 +- 7 files changed, 85 insertions(+), 27 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadget.cpp b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadget.cpp index 89d0b852d..7fa9be6a5 100644 --- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadget.cpp +++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadget.cpp @@ -38,6 +38,7 @@ PfdQmlGadget::~PfdQmlGadget() void PfdQmlGadget::loadConfiguration(IUAVGadgetConfiguration* config) { PfdQmlGadgetConfiguration *m = qobject_cast(config); + m_widget->setOpenGLEnabled(m->openGLEnabled()); m_widget->setQmlFile(m->qmlFile()); m_widget->setEarthFile(m->earthFile()); m_widget->setTerrainEnabled(m->terrainEnabled()); diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.cpp b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.cpp index 8a21da857..8991107fd 100644 --- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.cpp +++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.cpp @@ -25,7 +25,8 @@ PfdQmlGadgetConfiguration::PfdQmlGadgetConfiguration(QString classId, QSettings IUAVGadgetConfiguration(classId, parent), m_qmlFile("Unknown"), m_earthFile("Unknown"), - m_terrainEnabled(true), + m_openGLEnabled(true), + m_terrainEnabled(false), m_actualPositionUsed(false), m_latitude(0), m_longitude(0), @@ -40,6 +41,7 @@ PfdQmlGadgetConfiguration::PfdQmlGadgetConfiguration(QString classId, QSettings m_earthFile = qSettings->value("earthFile").toString(); m_earthFile=Utils::PathUtils().InsertDataPath(m_earthFile); + m_openGLEnabled = qSettings->value("openGLEnabled", true).toBool(); m_terrainEnabled = qSettings->value("terrainEnabled").toBool(); m_actualPositionUsed = qSettings->value("actualPositionUsed").toBool(); m_latitude = qSettings->value("latitude").toDouble(); @@ -57,6 +59,7 @@ IUAVGadgetConfiguration *PfdQmlGadgetConfiguration::clone() { PfdQmlGadgetConfiguration *m = new PfdQmlGadgetConfiguration(this->classId()); m->m_qmlFile = m_qmlFile; + m->m_openGLEnabled = m_openGLEnabled; m->m_earthFile = m_earthFile; m->m_terrainEnabled = m_terrainEnabled; m->m_actualPositionUsed = m_actualPositionUsed; @@ -78,6 +81,7 @@ void PfdQmlGadgetConfiguration::saveConfig(QSettings* qSettings) const { QString earthFile = Utils::PathUtils().RemoveDataPath(m_earthFile); qSettings->setValue("earthFile", earthFile); + qSettings->setValue("openGLEnabled", m_openGLEnabled); qSettings->setValue("terrainEnabled", m_terrainEnabled); qSettings->setValue("actualPositionUsed", m_actualPositionUsed); qSettings->setValue("latitude", m_latitude); diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.h b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.h index 69205375c..b13f6ea0a 100644 --- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.h +++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.h @@ -29,6 +29,7 @@ public: void setQmlFile(const QString &fileName) { m_qmlFile=fileName; } void setEarthFile(const QString &fileName) { m_earthFile=fileName; } + void setOpenGLEnabled(bool flag) { m_openGLEnabled = flag; } void setTerrainEnabled(bool flag) { m_terrainEnabled = flag; } void setActualPositionUsed(bool flag) { m_actualPositionUsed = flag; } void setLatitude(double value) { m_latitude = value; } @@ -38,6 +39,7 @@ public: QString qmlFile() const { return m_qmlFile; } QString earthFile() const { return m_earthFile; } + bool openGLEnabled() const { return m_openGLEnabled; } bool terrainEnabled() const { return m_terrainEnabled; } bool actualPositionUsed() const { return m_actualPositionUsed; } double latitude() const { return m_latitude; } @@ -51,6 +53,7 @@ public: private: QString m_qmlFile; // The name of the dial's SVG source file QString m_earthFile; // The name of osgearth terrain file + bool m_openGLEnabled; bool m_terrainEnabled; bool m_actualPositionUsed; double m_latitude; diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.cpp b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.cpp index 929dce289..bd4d21649 100644 --- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.cpp +++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.cpp @@ -53,6 +53,7 @@ QWidget *PfdQmlGadgetOptionsPage::createPage(QWidget *parent) options_page->earthFile->setPromptDialogTitle(tr("Choose OsgEarth terrain file")); options_page->earthFile->setPath(m_config->earthFile()); + options_page->useOpenGL->setChecked(m_config->openGLEnabled()); options_page->showTerrain->setChecked(m_config->terrainEnabled()); options_page->useActualLocation->setChecked(m_config->actualPositionUsed()); @@ -80,7 +81,13 @@ void PfdQmlGadgetOptionsPage::apply() { m_config->setQmlFile(options_page->qmlSourceFile->path()); m_config->setEarthFile(options_page->earthFile->path()); + m_config->setOpenGLEnabled(options_page->useOpenGL->isChecked()); + +#ifdef USE_OSG m_config->setTerrainEnabled(options_page->showTerrain->isChecked()); +#else + m_config->setTerrainEnabled(false); +#endif m_config->setActualPositionUsed(options_page->useActualLocation->isChecked()); m_config->setLatitude(options_page->latitude->text().toDouble()); diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.ui b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.ui index 3f244043b..92e87fbb3 100644 --- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.ui +++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.ui @@ -20,12 +20,6 @@ Form - - 0 - - - 0 - @@ -42,8 +36,8 @@ 0 0 - 457 - 436 + 439 + 418 @@ -78,6 +72,16 @@ + + + Use OpenGL + + + true + + + + Show Terrain: @@ -213,7 +217,7 @@ - + Qt::Vertical @@ -249,12 +253,12 @@ setEnabled(bool) - 150 - 138 + 167 + 188 - 142 - 172 + 260 + 222 @@ -265,12 +269,12 @@ setEnabled(bool) - 164 - 141 + 181 + 188 - 164 - 202 + 282 + 255 @@ -281,12 +285,28 @@ setEnabled(bool) - 190 - 141 + 207 + 188 - 190 - 237 + 308 + 288 + + + + + useOpenGL + toggled(bool) + showTerrain + setEnabled(bool) + + + 99 + 57 + + + 99 + 89 diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.cpp b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.cpp index d6e43e70e..0c0ff6e36 100644 --- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.cpp @@ -34,6 +34,7 @@ PfdQmlGadgetWidget::PfdQmlGadgetWidget(QWidget *parent) : QDeclarativeView(parent), + m_openGLEnabled(false), m_terrainEnabled(false), m_actualPositionUsed(false), m_latitude(46.671478), @@ -44,12 +45,15 @@ PfdQmlGadgetWidget::PfdQmlGadgetWidget(QWidget *parent) : setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); setResizeMode(SizeRootObjectToView); - setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); + //setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); QStringList objectsToExport; objectsToExport << "VelocityActual" << "PositionActual" << "AttitudeActual" << + "VelocityDesired" << + "PositionDesired" << + "AttitudeHoldDesired" << "GPSPosition" << "GCSTelemetryStats" << "FlightBatteryState"; @@ -106,9 +110,26 @@ void PfdQmlGadgetWidget::setEarthFile(QString arg) void PfdQmlGadgetWidget::setTerrainEnabled(bool arg) { - if (m_terrainEnabled != arg) { - m_terrainEnabled = arg; - emit terrainEnabledChanged(arg); + bool wasEnabled = terrainEnabled(); + m_terrainEnabled = arg; + + if (wasEnabled != terrainEnabled()) + emit terrainEnabledChanged(terrainEnabled()); +} + +void PfdQmlGadgetWidget::setOpenGLEnabled(bool arg) +{ + if (m_openGLEnabled != arg) { + m_openGLEnabled = arg; + + qDebug() << Q_FUNC_INFO << "Set OPENGL" << m_openGLEnabled; + if (m_openGLEnabled) + setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); + else + setViewport(new QWidget); + + //update terrainEnabled status with opengl status chaged + setTerrainEnabled(m_terrainEnabled); } } diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.h b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.h index ba89f282c..2e8bb3f8e 100644 --- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.h +++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.h @@ -39,7 +39,7 @@ public: void setQmlFile(QString fn); QString earthFile() const { return m_earthFile; } - bool terrainEnabled() const { return m_terrainEnabled; } + bool terrainEnabled() const { return m_terrainEnabled && m_openGLEnabled; } bool actualPositionUsed() const { return m_actualPositionUsed; } double latitude() const { return m_latitude; } @@ -49,6 +49,7 @@ public: public slots: void setEarthFile(QString arg); void setTerrainEnabled(bool arg); + void setOpenGLEnabled(bool arg); void setLatitude(double arg); void setLongitude(double arg); @@ -68,6 +69,7 @@ signals: private: QString m_qmlFileName; QString m_earthFile; + bool m_openGLEnabled; bool m_terrainEnabled; bool m_actualPositionUsed;