From 1b9ab2a4a2d7b7d16066a91036ea6c6a4924a65c Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sat, 12 Nov 2011 14:26:08 +0100 Subject: [PATCH] Re-enabled automatic gauges, now again user-configurable --- src/ui/HDDisplay.cc | 69 +++++++++++++++++++++++++++++++++++++++----- src/ui/HDDisplay.h | 8 +++++ src/ui/MainWindow.cc | 10 +++++-- 3 files changed, 76 insertions(+), 11 deletions(-) diff --git a/src/ui/HDDisplay.cc b/src/ui/HDDisplay.cc index c786af608..110407582 100644 --- a/src/ui/HDDisplay.cc +++ b/src/ui/HDDisplay.cc @@ -271,16 +271,23 @@ void HDDisplay::addGauge() QStringList items; for (int i = 0; i < values.count(); ++i) { QString key = values.keys().at(i); + QString label = key; + QStringList keySplit = key.split("."); + if (keySplit.size() > 1) + { + keySplit.removeFirst(); + label = keySplit.join("."); + } QString unit = units.value(key); if (unit.contains("deg") || unit.contains("rad")) { - items.append(QString("%1,%2,%3,%4,s").arg("-180").arg(key).arg(unit).arg("+180")); + items.append(QString("%1,%2,%3,%4,%5,s").arg("-180").arg(key).arg(unit).arg("+180").arg(label)); } else { - items.append(QString("%1,%2,%3,%4").arg("0").arg(key).arg(unit).arg("+100")); + items.append(QString("%1,%2,%3,%4,%5").arg("0").arg(key).arg(unit).arg("+100").arg(label)); } } bool ok; QString item = QInputDialog::getItem(this, tr("Add Gauge Instrument"), - tr("Format: min, curve name, unit, max[,s]"), items, 0, true, &ok); + tr("Format: min, data name, unit, max, label [,s]"), items, 0, true, &ok); if (ok && !item.isEmpty()) { addGauge(item); } @@ -307,9 +314,19 @@ void HDDisplay::addGauge(const QString& gauge) val = parts.at(3).toDouble(&ok); success &= ok; if (ok) maxValues.insert(key, val); + // Convert name + if (parts.length() >= 5) + { + if (parts.at(4).length() > 0) + { + customNames.insert(key, parts.at(4)); + } + } // Convert symmetric flag - if (parts.length() >= 5) { - if (parts.at(4).contains("s")) { + if (parts.length() >= 6) + { + if (parts.at(5).contains("s")) + { symmetric.insert(key, true); } } @@ -425,12 +442,15 @@ void HDDisplay::renderOverlay() float topSpacing = leftSpacing; float yCoord = topSpacing + gaugeWidth/2.0f; - for (int i = 0; i < acceptList->size(); ++i) { + for (int i = 0; i < acceptList->size(); ++i) + { QString value = acceptList->at(i); - drawGauge(xCoord, yCoord, gaugeWidth/2.0f, minValues.value(value, -1.0f), maxValues.value(value, 1.0f), value, values.value(value, minValues.value(value, 0.0f)), gaugeColor, &painter, symmetric.value(value, false), goodRanges.value(value, qMakePair(0.0f, 0.5f)), critRanges.value(value, qMakePair(0.7f, 1.0f)), true); + QString label = customNames.value(value); + drawGauge(xCoord, yCoord, gaugeWidth/2.0f, minValues.value(value, -1.0f), maxValues.value(value, 1.0f), label, values.value(value, minValues.value(value, 0.0f)), gaugeColor, &painter, symmetric.value(value, false), goodRanges.value(value, qMakePair(0.0f, 0.5f)), critRanges.value(value, qMakePair(0.7f, 1.0f)), true); xCoord += gaugeWidth + leftSpacing; // Move one row down if necessary - if (xCoord + gaugeWidth*0.9f > vwidth) { + if (xCoord + gaugeWidth*0.9f > vwidth) + { yCoord += topSpacing + gaugeWidth; xCoord = leftSpacing + gaugeWidth/2.0f; } @@ -807,12 +827,45 @@ float HDDisplay::refLineWidthToPen(float line) return line * 2.50f; } +void HDDisplay::addSource(QObject* obj) +{ + //genericSources.append(obj); + // FIXME XXX HACK +// if (plots.size() > 0) +// { + // Connect generic source + connect(obj, SIGNAL(valueChanged(int,QString,QString,int,quint64)), this, SLOT(updateValue(int,QString,QString,int,quint64))); + connect(obj, SIGNAL(valueChanged(int,QString,QString,unsigned int,quint64)), this, SLOT(updateValue(int,QString,QString,unsigned int,quint64))); + connect(obj, SIGNAL(valueChanged(int,QString,QString,quint64,quint64)), this, SLOT(updateValue(int,QString,QString,quint64,quint64))); + connect(obj, SIGNAL(valueChanged(int,QString,QString,qint64,quint64)), this, SLOT(updateValue(int,QString,QString,qint64,quint64))); + connect(obj, SIGNAL(valueChanged(int,QString,QString,double,quint64)), this, SLOT(updateValue(int,QString,QString,double,quint64))); +// } +} + void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const int value, const quint64 msec) { if (!intValues.contains(name)) intValues.insert(name, true); updateValue(uasId, name, unit, (double)value, msec); } +void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const unsigned int value, const quint64 msec) +{ + if (!intValues.contains(name)) intValues.insert(name, true); + updateValue(uasId, name, unit, (double)value, msec); +} + +void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec) +{ + if (!intValues.contains(name)) intValues.insert(name, true); + updateValue(uasId, name, unit, (double)value, msec); +} + +void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec) +{ + if (!intValues.contains(name)) intValues.insert(name, true); + updateValue(uasId, name, unit, (double)value, msec); +} + void HDDisplay::updateValue(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec) { Q_UNUSED(uasId); diff --git a/src/ui/HDDisplay.h b/src/ui/HDDisplay.h index 15a2240d1..cdec1cc74 100644 --- a/src/ui/HDDisplay.h +++ b/src/ui/HDDisplay.h @@ -68,7 +68,14 @@ public slots: void updateValue(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec); /** @brief Update a HDD integer value */ void updateValue(const int uasId, const QString& name, const QString& unit, const int value, const quint64 msec); + /** @brief Update a HDD integer value */ + void updateValue(const int uasId, const QString& name, const QString& unit, const unsigned int value, const quint64 msec); + /** @brief Update a HDD integer value */ + void updateValue(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec); + /** @brief Update a HDD integer value */ + void updateValue(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec); virtual void setActiveUAS(UASInterface* uas); + void addSource(QObject* obj); /** @brief Removes a plot item by the action data */ void removeItemByAction(); @@ -149,6 +156,7 @@ protected: QMap maxValues; ///< The maximum value this variable is assumed to have QMap symmetric; ///< Draw the gauge / dial symmetric bool = yes QMap intValues; ///< Is the gauge value an integer? + QMap customNames; ///< Custom names for the data names QMap > goodRanges; ///< The range of good values QMap > critRanges; ///< The range of critical values double scalingFactor; ///< Factor used to scale all absolute values to screen coordinates diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index b60ed045d..51858292d 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -91,8 +91,8 @@ MainWindow::MainWindow(QWidget *parent): currentStyle(QGC_MAINWINDOW_STYLE_INDOOR), aboutToCloseFlag(false), changingViewsFlag(false), - styleFileName(QCoreApplication::applicationDirPath() + "/style-indoor.css"), centerStackActionGroup(this), + styleFileName(QCoreApplication::applicationDirPath() + "/style-indoor.css"), autoReconnect(false), lowPowerMode(false) { @@ -427,14 +427,18 @@ void MainWindow::buildCommonWidgets() if (!headDown1DockWidget) { headDown1DockWidget = new QDockWidget(tr("Flight Display"), this); - headDown1DockWidget->setWidget( new HDDisplay(acceptList, "Flight Display", this) ); + HDDisplay* hdDisplay = new HDDisplay(acceptList, "Flight Display", this); + hdDisplay->addSource(mavlinkDecoder); + headDown1DockWidget->setWidget(hdDisplay); headDown1DockWidget->setObjectName("HEAD_DOWN_DISPLAY_1_DOCK_WIDGET"); addTool(headDown1DockWidget, tr("Flight Display"), Qt::RightDockWidgetArea); } if (!headDown2DockWidget) { headDown2DockWidget = new QDockWidget(tr("Actuator Status"), this); - headDown2DockWidget->setWidget( new HDDisplay(acceptList2, "Actuator Status", this) ); + HDDisplay* hdDisplay = new HDDisplay(acceptList2, "Actuator Status", this); + hdDisplay->addSource(mavlinkDecoder); + headDown2DockWidget->setWidget(hdDisplay); headDown2DockWidget->setObjectName("HEAD_DOWN_DISPLAY_2_DOCK_WIDGET"); addTool(headDown2DockWidget, tr("Actuator Status"), Qt::RightDockWidgetArea); } -- 2.22.0