From 0ea45f386de8a4f4c2a2513cb77e423ec3e5e8dc Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Mon, 19 Sep 2016 19:10:11 -0700 Subject: [PATCH] Show help button on FactTextFields --- src/FactSystem/FactControls/FactTextField.qml | 16 +++- src/FactSystem/FactMetaData.cc | 4 +- src/FactSystem/FactMetaData.h | 3 +- src/QmlControls/ParameterEditorDialog.qml | 10 ++- src/QmlControls/QGCTextField.qml | 90 +++++++++++++------ 5 files changed, 87 insertions(+), 36 deletions(-) diff --git a/src/FactSystem/FactControls/FactTextField.qml b/src/FactSystem/FactControls/FactTextField.qml index 66b0532a3..bf0b4f956 100644 --- a/src/FactSystem/FactControls/FactTextField.qml +++ b/src/FactSystem/FactControls/FactTextField.qml @@ -14,6 +14,7 @@ QGCTextField { text: fact ? fact.valueString : "" unitsLabel: fact ? fact.units : "" showUnits: true + showHelp: true property Fact fact: null property string _validateString @@ -31,7 +32,7 @@ QGCTextField { fact.value = text } else { _validateString = text - qgcView.showDialog(editorDialogComponent, qsTr("Invalid Parameter Value"), qgcView.showDialogDefaultWidth, StandardButton.Save) + qgcView.showDialog(validationErrorDialogComponent, qsTr("Invalid Value"), qgcView.showDialogDefaultWidth, StandardButton.Save) } } else { fact.value = text @@ -39,8 +40,11 @@ QGCTextField { } } + onHelpClicked: qgcView.showDialog(helpDialogComponent, qsTr("Value Details"), qgcView.showDialogDefaultWidth, StandardButton.Save) + + Component { - id: editorDialogComponent + id: validationErrorDialogComponent ParameterEditorDialog { validate: true @@ -48,4 +52,12 @@ QGCTextField { fact: _textField.fact } } + + Component { + id: helpDialogComponent + + ParameterEditorDialog { + fact: _textField.fact + } + } } diff --git a/src/FactSystem/FactMetaData.cc b/src/FactSystem/FactMetaData.cc index 855caa34b..51fe0d09f 100644 --- a/src/FactSystem/FactMetaData.cc +++ b/src/FactSystem/FactMetaData.cc @@ -750,7 +750,7 @@ int FactMetaData::decimalPlaces(void) const return actualDecimalPlaces; } -FactMetaData* FactMetaData::_createFromJsonObject(const QJsonObject& json, QObject* metaDataParent) +FactMetaData* FactMetaData::createFromJsonObject(const QJsonObject& json, QObject* metaDataParent) { QString errorString; @@ -855,7 +855,7 @@ QMap FactMetaData::createMapFromJsonFile(const QString& continue; } QJsonObject jsonObject = jsonValue.toObject(); - FactMetaData* metaData = _createFromJsonObject(jsonObject, metaDataParent); + FactMetaData* metaData = createFromJsonObject(jsonObject, metaDataParent); if (metaDataMap.contains(metaData->name())) { qWarning() << QStringLiteral("Duplicate fact name:") << metaData->name(); diff --git a/src/FactSystem/FactMetaData.h b/src/FactSystem/FactMetaData.h index 2765f0c19..07d4b4d23 100644 --- a/src/FactSystem/FactMetaData.h +++ b/src/FactSystem/FactMetaData.h @@ -48,6 +48,8 @@ public: static QMap createMapFromJsonFile(const QString& jsonFilename, QObject* metaDataParent); + static FactMetaData* createFromJsonObject(const QJsonObject& json, QObject* metaDataParent); + const FactMetaData& operator=(const FactMetaData& other); /// Converts from meters to the user specified distance unit @@ -144,7 +146,6 @@ private: QVariant _minForType(void) const; QVariant _maxForType(void) const; void _setAppSettingsTranslators(void); - static FactMetaData* _createFromJsonObject(const QJsonObject& json, QObject* metaDataParent); // Built in translators static QVariant _defaultTranslator(const QVariant& from) { return from; } diff --git a/src/QmlControls/ParameterEditorDialog.qml b/src/QmlControls/ParameterEditorDialog.qml index 96ea9458c..d43190b06 100644 --- a/src/QmlControls/ParameterEditorDialog.qml +++ b/src/QmlControls/ParameterEditorDialog.qml @@ -85,7 +85,8 @@ QGCViewDialog { QGCLabel { width: parent.width wrapMode: Text.WordWrap - text: fact.shortDescription ? fact.shortDescription : qsTr("Parameter Description (not defined)") + visible: fact.shortDescription + text: fact.shortDescription } QGCLabel { @@ -156,7 +157,10 @@ QGCViewDialog { } } - QGCLabel { text: fact.name } + QGCLabel { + text: fact.name + visible: fact.componentId > 0 // > 0 means it's a parameter fact + } Column { spacing: defaultTextHeight / 2 @@ -202,7 +206,7 @@ QGCViewDialog { QGCLabel { width: parent.width wrapMode: Text.WordWrap - text: qsTr("Warning: Modifying parameters while vehicle is in flight can lead to vehicle instability and possible vehicle loss. ") + + text: qsTr("Warning: Modifying values while vehicle is in flight can lead to vehicle instability and possible vehicle loss. ") + qsTr("Make sure you know what you are doing and double-check your values before Save!") } diff --git a/src/QmlControls/QGCTextField.qml b/src/QmlControls/QGCTextField.qml index 5c422de4b..732bc3561 100644 --- a/src/QmlControls/QGCTextField.qml +++ b/src/QmlControls/QGCTextField.qml @@ -1,25 +1,31 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.2 -import QtQuick.Controls.Styles 1.2 +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.2 +import QtQuick.Layouts 1.2 -import QGroundControl.Palette 1.0 -import QGroundControl.ScreenTools 1.0 +import QGroundControl.Palette 1.0 +import QGroundControl.ScreenTools 1.0 TextField { id: root - property bool showUnits: false + property bool showUnits: false + property bool showHelp: false property string unitsLabel: "" + signal helpClicked + + property real _helpLayoutWidth: 0 + Component.onCompleted: { if (typeof qgcTextFieldforwardKeysTo !== 'undefined') { root.Keys.forwardTo = [qgcTextFieldforwardKeysTo] } } - property var __qgcPal: QGCPalette { colorGroupEnabled: enabled } + QGCPalette { id: qgcPal; colorGroupEnabled: enabled } - textColor: __qgcPal.textFieldText + textColor: qgcPal.textFieldText height: Math.round(Math.max(25, ScreenTools.defaultFontPixelHeight * (ScreenTools.isMobile ? 2.5 : 1.2))) QGCLabel { @@ -35,6 +41,8 @@ TextField { background: Item { id: backgroundItem + property bool showHelp: control.showHelp && control.activeFocus + Rectangle { anchors.fill: parent anchors.bottomMargin: -1 @@ -44,32 +52,58 @@ TextField { Rectangle { anchors.fill: parent border.color: control.activeFocus ? "#47b" : "#999" - color: __qgcPal.textField + color: qgcPal.textField } - Text { - id: unitsLabel - - anchors.top: parent.top - anchors.bottom: parent.bottom - - verticalAlignment: Text.AlignVCenter - horizontalAlignment:Text.AlignHCenter - - x: parent.width - width - width: unitsLabelWidthGenerator.width - - text: control.unitsLabel - font.pointSize: ScreenTools.defaultFontPointSize - font.family: ScreenTools.normalFontFamily - antialiasing: true + RowLayout { + id: unitsHelpLayout + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.rightMargin: backgroundItem.showHelp ? 0 : control.__contentHeight * 0.333 + anchors.right: parent.right + spacing: 4 + + Component.onCompleted: control._helpLayoutWidth = unitsHelpLayout.width + onWidthChanged: control._helpLayoutWidth = unitsHelpLayout.width + + Text { + anchors.verticalCenter: parent.verticalCenter + text: control.unitsLabel + font.pointSize: backgroundItem.showHelp ? ScreenTools.smallFontPointSize : ScreenTools.defaultFontPointSize + font.family: ScreenTools.normalFontFamily + antialiasing: true + color: control.textColor + visible: control.showUnits + } + + Rectangle { + anchors.margins: 2 + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.right: parent.right + width: height * 0.75 + color: control.textColor + radius: 2 + visible: backgroundItem.showHelp + + QGCLabel { + anchors.fill: parent + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + color: qgcPal.textField + text: "?" + } + } + } - color: control.textColor - visible: control.showUnits + MouseArea { + anchors.fill: unitsHelpLayout + enabled: control.activeFocus + onClicked: root.helpClicked() } } - padding.right: control.showUnits ? unitsLabelWidthGenerator.width : control.__contentHeight * 0.333 + padding.right: control._helpLayoutWidth //control.showUnits ? unitsLabelWidthGenerator.width : control.__contentHeight * 0.333 } onActiveFocusChanged: { -- 2.22.0