diff --git a/ground/openpilotgcs/share/openpilotgcs/pfd/default/AltitudeScale.qml b/ground/openpilotgcs/share/openpilotgcs/pfd/default/AltitudeScale.qml
index a8f4d66b2..4d0ef2c89 100644
--- a/ground/openpilotgcs/share/openpilotgcs/pfd/default/AltitudeScale.qml
+++ b/ground/openpilotgcs/share/openpilotgcs/pfd/default/AltitudeScale.qml
@@ -24,10 +24,10 @@ Item {
anchors.verticalCenter: parent.verticalCenter
// The altitude scale represents 30 meters,
// move it in 0..5m range
- anchors.verticalCenterOffset: -height/30 * (PositionActual.Down-Math.floor(PositionActual.Down/5)*5)
+ anchors.verticalCenterOffset: -height/30 * (PositionActual.Down-Math.floor(PositionActual.Down/5*qmlWidget.altitudeFactor)*5)
anchors.left: parent.left
- property int topNumber: 15-Math.floor(PositionActual.Down/5)*5
+ property int topNumber: 15-Math.floor(PositionActual.Down/5*qmlWidget.altitudeFactor)*5
// Altitude numbers
Column {
@@ -52,7 +52,6 @@ Item {
}
}
-
SvgElementImage {
id: altitude_window
clip: true
@@ -69,7 +68,7 @@ Item {
Text {
id: altitude_text
- text: Math.floor(-PositionActual.Down).toFixed()
+ text: Math.floor(-PositionActual.Down * qmlWidget.altitudeFactor).toFixed()
color: "white"
font {
family: "Arial"
@@ -78,4 +77,26 @@ Item {
anchors.centerIn: parent
}
}
+
+ SvgElementImage {
+ id: altitude_unit
+ elementName: "altitude-unit"
+ sceneSize: sceneItem.sceneSize
+ clip: true
+
+ x: Math.floor(scaledBounds.x * sceneItem.width)
+ y: Math.floor(scaledBounds.y * sceneItem.height)
+
+ Text {
+ id: altitude_unit_text
+ text: qmlWidget.altitudeUnit
+ color: "white"
+ font {
+ family: "Arial"
+ pixelSize: parent.height
+ }
+ anchors.right: parent.right
+ }
+ }
+
}
diff --git a/ground/openpilotgcs/share/openpilotgcs/pfd/default/PfdIndicators.qml b/ground/openpilotgcs/share/openpilotgcs/pfd/default/PfdIndicators.qml
index 8d821e7c3..6824d5a7c 100644
--- a/ground/openpilotgcs/share/openpilotgcs/pfd/default/PfdIndicators.qml
+++ b/ground/openpilotgcs/share/openpilotgcs/pfd/default/PfdIndicators.qml
@@ -31,7 +31,7 @@ Item {
Text {
id: gps_text
- text: "GPS: " + GPSPosition.Satellites + "\nPDP: " + GPSPosition.PDOP
+ text: "GPS: " + GPSPosition.Satellites + "\nPDP: " + Math.round(GPSPosition.PDOP*1000)/1000
color: "white"
font.family: "Arial"
font.pixelSize: telemetry_status.height * 0.75
diff --git a/ground/openpilotgcs/share/openpilotgcs/pfd/default/SpeedScale.qml b/ground/openpilotgcs/share/openpilotgcs/pfd/default/SpeedScale.qml
index 804319181..6d8643e66 100644
--- a/ground/openpilotgcs/share/openpilotgcs/pfd/default/SpeedScale.qml
+++ b/ground/openpilotgcs/share/openpilotgcs/pfd/default/SpeedScale.qml
@@ -3,7 +3,7 @@ import Qt 4.7
Item {
id: sceneItem
property variant sceneSize
- property real groundSpeed : Math.sqrt(Math.pow(VelocityActual.North,2)+
+ property real groundSpeed : qmlWidget.speedFactor * Math.sqrt(Math.pow(VelocityActual.North,2)+
Math.pow(VelocityActual.East,2))
SvgElementImage {
@@ -58,7 +58,6 @@ Item {
}
}
-
SvgElementImage {
id: speed_window
clip: true
@@ -82,4 +81,25 @@ Item {
anchors.centerIn: parent
}
}
+
+ SvgElementImage {
+ id: speed_unit
+ elementName: "speed-unit"
+ sceneSize: sceneItem.sceneSize
+ clip: true
+
+ x: Math.floor(scaledBounds.x * sceneItem.width)
+ y: Math.floor(scaledBounds.y * sceneItem.height)
+
+ Text {
+ id: speed_unit_text
+ text: qmlWidget.speedUnit
+ color: "white"
+ font {
+ family: "Arial"
+ pixelSize: parent.height
+ }
+ anchors.right: parent.right
+ }
+ }
}
diff --git a/ground/openpilotgcs/share/openpilotgcs/pfd/default/pfd.svg b/ground/openpilotgcs/share/openpilotgcs/pfd/default/pfd.svg
index abdc4f8c5..2b7ff19bd 100644
--- a/ground/openpilotgcs/share/openpilotgcs/pfd/default/pfd.svg
+++ b/ground/openpilotgcs/share/openpilotgcs/pfd/default/pfd.svg
@@ -14,8 +14,8 @@
height="707.56323"
id="svg2"
version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="pfd-11.svg"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="pfd.svg"
style="display:inline"
inkscape:export-filename="C:\Users\Nuno\Desktop\OpenPilot\PFD\PFD-4.png"
inkscape:export-xdpi="71.993568"
@@ -1616,15 +1616,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.1617336"
- inkscape:cx="415.72223"
- inkscape:cy="353.78162"
+ inkscape:cx="613.40088"
+ inkscape:cy="388.21292"
inkscape:document-units="px"
- inkscape:current-layer="svg2"
+ inkscape:current-layer="foreground"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1017"
- inkscape:window-x="-4"
- inkscape:window-y="-4"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
inkscape:window-maximized="1"
showguides="false"
inkscape:guide-bbox="true"
@@ -1953,8 +1953,7 @@
id="layer3"
inkscape:label="foreground"
style="display:inline"
- transform="translate(230.4171,-2.5493479)"
- sodipodi:insensitive="true">
+ transform="translate(230.4171,-2.5493479)">
@@ -1980,7 +1979,7 @@
+ transform="translate(19.192898,0)">
+ transform="translate(184.16754,0)">
+
+
+
-
ALT
- m/s
- m
+ inkscape:label="rect2816"
+ style="display:inline">
setLatitude(m->latitude());
m_widget->setLongitude(m->longitude());
m_widget->setAltitude(m->altitude());
+ m_widget->setSpeedFactor(m->speedFactor());
+ m_widget->setSpeedUnit(m->speedUnit());
+ m_widget->setAltitudeFactor(m->altitudeFactor());
+ m_widget->setAltitudeUnit(m->altitudeUnit());
// setting OSGEARTH_CACHE_ONLY seems to work the most reliably
// between osgEarth versions I tried
diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.cpp b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.cpp
index e00e52a1d..d3efb6a42 100644
--- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.cpp
+++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.cpp
@@ -31,8 +31,19 @@ PfdQmlGadgetConfiguration::PfdQmlGadgetConfiguration(QString classId, QSettings
m_latitude(0),
m_longitude(0),
m_altitude(0),
- m_cacheOnly(false)
+ m_cacheOnly(false),
+ m_speedFactor(1.0),
+ m_altitudeFactor(1.0)
{
+
+ m_speedMap[1.0] = "m/s";
+ m_speedMap[3.6] = "km/h";
+ m_speedMap[2.2369] = "mph";
+ m_speedMap[1.9438] = "knots";
+
+ m_altitudeMap[1.0] = "m";
+ m_altitudeMap[3.2808] = "ft";
+
// if a saved configuration exists load it
if (qSettings != 0) {
m_qmlFile = qSettings->value("qmlFile").toString();
@@ -48,6 +59,8 @@ PfdQmlGadgetConfiguration::PfdQmlGadgetConfiguration(QString classId, QSettings
m_longitude = qSettings->value("longitude").toDouble();
m_altitude = qSettings->value("altitude").toDouble();
m_cacheOnly = qSettings->value("cacheOnly").toBool();
+ m_speedFactor = qSettings->value("speedFactor").toDouble();
+ m_altitudeFactor = qSettings->value("altitudeFactor").toDouble();
}
}
@@ -68,6 +81,8 @@ IUAVGadgetConfiguration *PfdQmlGadgetConfiguration::clone()
m->m_longitude = m_longitude;
m->m_altitude = m_altitude;
m->m_cacheOnly = m_cacheOnly;
+ m->m_speedFactor = m_speedFactor;
+ m->m_altitudeFactor = m_altitudeFactor;
return m;
}
@@ -91,4 +106,6 @@ void PfdQmlGadgetConfiguration::saveConfig(QSettings *qSettings) const
qSettings->setValue("longitude", m_longitude);
qSettings->setValue("altitude", m_altitude);
qSettings->setValue("cacheOnly", m_cacheOnly);
+ qSettings->setValue("speedFactor", m_speedFactor);
+ qSettings->setValue("altitudeFactor", m_altitudeFactor);
}
diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.h b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.h
index f09e4a0ad..7171c3bd9 100644
--- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.h
+++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetconfiguration.h
@@ -18,6 +18,7 @@
#define PFDQMLGADGETCONFIGURATION_H
#include
+#include
using namespace Core;
@@ -62,6 +63,14 @@ public:
{
m_cacheOnly = flag;
}
+ void setSpeedFactor(double factor)
+ {
+ m_speedFactor = factor;
+ }
+ void setAltitudeFactor(double factor)
+ {
+ m_altitudeFactor = factor;
+ }
QString qmlFile() const
{
@@ -99,6 +108,34 @@ public:
{
return m_cacheOnly;
}
+ double speedFactor() const
+ {
+ return m_speedFactor;
+ }
+ double altitudeFactor() const
+ {
+ return m_altitudeFactor;
+ }
+
+ QString speedUnit() const
+ {
+ return m_speedMap[m_speedFactor];
+ }
+
+ QString altitudeUnit() const
+ {
+ return m_altitudeMap[m_altitudeFactor];
+ }
+
+ QMapIterator speedMapIterator()
+ {
+ return QMapIterator(m_speedMap);
+ }
+
+ QMapIterator altitudeMapIterator()
+ {
+ return QMapIterator(m_altitudeMap);
+ }
void saveConfig(QSettings *settings) const;
IUAVGadgetConfiguration *clone();
@@ -113,6 +150,10 @@ private:
double m_longitude;
double m_altitude;
bool m_cacheOnly;
+ double m_speedFactor;
+ double m_altitudeFactor;
+ QMap m_speedMap;
+ QMap m_altitudeMap;
};
#endif // PfdQmlGADGETCONFIGURATION_H
diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.cpp b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.cpp
index 0b20b8480..99fb40501 100644
--- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.cpp
+++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.cpp
@@ -62,6 +62,23 @@ QWidget *PfdQmlGadgetOptionsPage::createPage(QWidget *parent)
options_page->altitude->setText(QString::number(m_config->altitude()));
options_page->useOnlyCache->setChecked(m_config->cacheOnly());
+ //Setup units combos
+ QMapIterator iter = m_config->speedMapIterator();
+ while(iter.hasNext())
+ {
+ iter.next();
+ options_page->speedUnitCombo->addItem(iter.value(), iter.key());
+ }
+ options_page->speedUnitCombo->setCurrentIndex(options_page->speedUnitCombo->findData(m_config->speedFactor()));
+
+ iter = m_config->altitudeMapIterator();
+ while(iter.hasNext())
+ {
+ iter.next();
+ options_page->altUnitCombo->addItem(iter.value(), iter.key());
+ }
+ options_page->altUnitCombo->setCurrentIndex(options_page->altUnitCombo->findData(m_config->altitudeFactor()));
+
#ifndef USE_OSG
options_page->showTerrain->setChecked(false);
options_page->showTerrain->setVisible(false);
@@ -93,6 +110,9 @@ void PfdQmlGadgetOptionsPage::apply()
m_config->setLongitude(options_page->longitude->text().toDouble());
m_config->setAltitude(options_page->altitude->text().toDouble());
m_config->setCacheOnly(options_page->useOnlyCache->isChecked());
+
+ m_config->setSpeedFactor(options_page->speedUnitCombo->itemData(options_page->speedUnitCombo->currentIndex()).toDouble());
+ m_config->setAltitudeFactor(options_page->altUnitCombo->itemData(options_page->altUnitCombo->currentIndex()).toDouble());
}
void PfdQmlGadgetOptionsPage::finish()
diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.ui b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.ui
index 20d617e9b..bb136c6e1 100644
--- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.ui
+++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetoptionspage.ui
@@ -6,8 +6,8 @@
0
0
- 457
- 436
+ 636
+ 558
@@ -19,11 +19,11 @@
Form
-
+
0
- -
+
-
QFrame::NoFrame
@@ -39,15 +39,15 @@
0
0
- 457
- 436
+ 636
+ 558
-
+
0
-
-
+
-
10
@@ -77,7 +77,7 @@
- -
+
-
Use OpenGL
@@ -87,7 +87,45 @@
- -
+
-
+
+
-
+
+
+ Speed Unit:
+
+
+
+ -
+
+
+ Altitude Unit:
+
+
+
+ -
+
+
+
+ 150
+ 16777215
+
+
+
+
+ -
+
+
+
+ 150
+ 16777215
+
+
+
+
+
+
+ -
Show Terrain:
@@ -223,7 +261,7 @@
- -
+
-
Qt::Vertical
diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.cpp b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.cpp
index 60fe0539c..b28e1e418 100644
--- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.cpp
+++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.cpp
@@ -39,7 +39,11 @@ PfdQmlGadgetWidget::PfdQmlGadgetWidget(QWidget *parent) :
m_actualPositionUsed(false),
m_latitude(46.671478),
m_longitude(10.158932),
- m_altitude(2000)
+ m_altitude(2000),
+ m_speedUnit("m/s"),
+ m_speedFactor(1.0),
+ m_altitudeUnit("m"),
+ m_altitudeFactor(1.0)
{
setMinimumSize(64, 64);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
@@ -121,6 +125,38 @@ void PfdQmlGadgetWidget::setTerrainEnabled(bool arg)
}
}
+void PfdQmlGadgetWidget::setSpeedUnit(QString unit)
+{
+ if (m_speedUnit != unit) {
+ m_speedUnit = unit;
+ emit speedUnitChanged(unit);
+ }
+}
+
+void PfdQmlGadgetWidget::setSpeedFactor(double factor)
+{
+ if (m_speedFactor != factor) {
+ m_speedFactor = factor;
+ emit speedFactorChanged(factor);
+ }
+}
+
+void PfdQmlGadgetWidget::setAltitudeUnit(QString unit)
+{
+ if (m_altitudeUnit != unit) {
+ m_altitudeUnit = unit;
+ emit altitudeUnitChanged(unit);
+ }
+}
+
+void PfdQmlGadgetWidget::setAltitudeFactor(double factor)
+{
+ if (m_altitudeFactor != factor) {
+ m_altitudeFactor = factor;
+ emit altitudeFactorChanged(factor);
+ }
+}
+
void PfdQmlGadgetWidget::setOpenGLEnabled(bool arg)
{
if (m_openGLEnabled != arg) {
diff --git a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.h b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.h
index 77ab49f9d..46d540345 100644
--- a/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.h
+++ b/ground/openpilotgcs/src/plugins/pfdqml/pfdqmlgadgetwidget.h
@@ -26,6 +26,11 @@ class PfdQmlGadgetWidget : public QDeclarativeView {
Q_PROPERTY(bool actualPositionUsed READ actualPositionUsed WRITE setActualPositionUsed NOTIFY actualPositionUsedChanged)
+ Q_PROPERTY(QString speedUnit READ speedUnit WRITE setSpeedUnit NOTIFY speedUnitChanged)
+ Q_PROPERTY(double speedFactor READ speedFactor WRITE setSpeedFactor NOTIFY speedFactorChanged)
+ Q_PROPERTY(QString altitudeUnit READ altitudeUnit WRITE setAltitudeUnit NOTIFY altitudeUnitChanged)
+ Q_PROPERTY(double altitudeFactor READ altitudeFactor WRITE setAltitudeFactor NOTIFY altitudeFactorChanged)
+
// pre-defined fallback position
Q_PROPERTY(double latitude READ latitude WRITE setLatitude NOTIFY latitudeChanged)
Q_PROPERTY(double longitude READ longitude WRITE setLongitude NOTIFY longitudeChanged)
@@ -45,6 +50,23 @@ public:
return m_terrainEnabled && m_openGLEnabled;
}
+ QString speedUnit() const
+ {
+ return m_speedUnit;
+ }
+ double speedFactor() const
+ {
+ return m_speedFactor;
+ }
+ QString altitudeUnit() const
+ {
+ return m_altitudeUnit;
+ }
+ double altitudeFactor() const
+ {
+ return m_altitudeFactor;
+ }
+
bool actualPositionUsed() const
{
return m_actualPositionUsed;
@@ -65,6 +87,12 @@ public:
public slots:
void setEarthFile(QString arg);
void setTerrainEnabled(bool arg);
+
+ void setSpeedUnit(QString unit);
+ void setSpeedFactor(double factor);
+ void setAltitudeUnit(QString unit);
+ void setAltitudeFactor(double factor);
+
void setOpenGLEnabled(bool arg);
void setLatitude(double arg);
@@ -82,6 +110,11 @@ signals:
void longitudeChanged(double arg);
void altitudeChanged(double arg);
+ void speedUnitChanged(QString arg);
+ void speedFactorChanged(double arg);
+ void altitudeUnitChanged(QString arg);
+ void altitudeFactorChanged(double arg);
+
private:
QString m_qmlFileName;
QString m_earthFile;
@@ -92,6 +125,11 @@ private:
double m_latitude;
double m_longitude;
double m_altitude;
+
+ QString m_speedUnit;
+ double m_speedFactor;
+ QString m_altitudeUnit;
+ double m_altitudeFactor;
};
#endif /* PFDQMLGADGETWIDGET_H_ */