diff --git a/src/QmlControls/QGCMouseArea.qml b/src/QmlControls/QGCMouseArea.qml index ee0bcb5..4c601f1 100644 --- a/src/QmlControls/QGCMouseArea.qml +++ b/src/QmlControls/QGCMouseArea.qml @@ -25,7 +25,7 @@ MouseArea { Rectangle { anchors.fill: parent border.color: "red" - border.width: QGroundControl.showTouchAreas ? 1 : 0 + border.width: QGroundControl.corePlugin.showTouchAreas ? 1 : 0 color: "transparent" } } diff --git a/src/QmlControls/QGroundControlQmlGlobal.cc b/src/QmlControls/QGroundControlQmlGlobal.cc index 59a4579..af89377 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.cc +++ b/src/QmlControls/QGroundControlQmlGlobal.cc @@ -32,8 +32,6 @@ QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app) , _corePlugin(NULL) , _firmwarePluginManager(NULL) , _settingsManager(NULL) - , _showTouchAreas(false) - , _showAdvancedUI(false) { // We clear the parent on this object since we run into shutdown problems caused by hybrid qml app. Instead we let it leak on shutdown. setParent(NULL); diff --git a/src/QmlControls/QGroundControlQmlGlobal.h b/src/QmlControls/QGroundControlQmlGlobal.h index 24c0aa5..047e3f8 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.h +++ b/src/QmlControls/QGroundControlQmlGlobal.h @@ -73,9 +73,6 @@ public: Q_PROPERTY(QString qgcVersion READ qgcVersion CONSTANT) - Q_PROPERTY(bool showTouchAreas MEMBER _showTouchAreas NOTIFY showTouchAreasChanged) - Q_PROPERTY(bool showAdvancedUI MEMBER _showAdvancedUI NOTIFY showAdvancedUIChanged) - Q_INVOKABLE void saveGlobalSetting (const QString& key, const QString& value); Q_INVOKABLE QString loadGlobalSetting (const QString& key, const QString& defaultValue); Q_INVOKABLE void saveBoolGlobalSetting (const QString& key, bool value); @@ -156,9 +153,6 @@ public: QString qgcVersion(void) const { return qgcApp()->applicationVersion(); } - bool showTouchAreas(void) const { return _showTouchAreas; } ///< Show visible extents of touch areas - bool showAdvancedUI(void) const { return _showAdvancedUI; } ///< Show hidden advanced UI - // Overrides from QGCTool virtual void setToolbox(QGCToolbox* toolbox); @@ -168,8 +162,6 @@ signals: void mavlinkSystemIDChanged (int id); void flightMapPositionChanged (QGeoCoordinate flightMapPosition); void flightMapZoomChanged (double flightMapZoom); - void showTouchAreasChanged (bool showTouchAreas); - void showAdvancedUIChanged (bool showAdvancedUI); private: FlightMapSettings* _flightMapSettings; @@ -186,9 +178,6 @@ private: QGeoCoordinate _flightMapPosition; double _flightMapZoom; - - bool _showTouchAreas; - bool _showAdvancedUI; }; #endif diff --git a/src/QmlControls/SubMenuButton.qml b/src/QmlControls/SubMenuButton.qml index d7e3dbb..8d5a7dc 100644 --- a/src/QmlControls/SubMenuButton.qml +++ b/src/QmlControls/SubMenuButton.qml @@ -7,7 +7,7 @@ import QGroundControl.Palette 1.0 import QGroundControl.ScreenTools 1.0 Button { - id: _rootButton + id: _rootButton property bool setupComplete: true ///< true: setup complete indicator shows as completed property bool setupIndicator: true ///< true: show setup complete indicator property string imageResource: "/qmlimages/subMenuButtonImage.png" ///< Button image @@ -17,6 +17,7 @@ Button { checkable: true implicitHeight: ScreenTools.isTinyScreen ? ScreenTools.defaultFontPixelHeight * 3.5 : ScreenTools.defaultFontPixelHeight * 2.5 + implicitWidth: __panel.implicitWidth style: ButtonStyle { id: buttonStyle diff --git a/src/VehicleSetup/SetupView.qml b/src/VehicleSetup/SetupView.qml index ac11563..2680b45 100644 --- a/src/VehicleSetup/SetupView.qml +++ b/src/VehicleSetup/SetupView.qml @@ -7,13 +7,9 @@ * ****************************************************************************/ - -/// @file -/// @brief Setup View -/// @author Don Gagne - import QtQuick 2.3 import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.2 import QGroundControl 1.0 import QGroundControl.AutoPilotPlugin 1.0 @@ -217,36 +213,10 @@ Rectangle { flickableDirection: Flickable.VerticalFlick clip: true - Column { + ColumnLayout { id: buttonColumn - width: _maxButtonWidth spacing: _defaultTextHeight / 2 - property real _maxButtonWidth: 0 - - Component.onCompleted: reflowWidths() - - Connections { - target: componentRepeater - onModelChanged: buttonColumn.reflowWidths() - } - - // I don't know why this does not work - Connections { - target: QGroundControl.settingsManager.appSettings.appFontPointSize - onValueChanged: buttonColumn.reflowWidths() - } - - function reflowWidths() { - buttonColumn._maxButtonWidth = 0 - for (var i = 0; i < children.length; i++) { - buttonColumn._maxButtonWidth = Math.max(buttonColumn._maxButtonWidth, children[i].width) - } - for (var j = 0; j < children.length; j++) { - children[j].width = buttonColumn._maxButtonWidth - } - } - QGCLabel { anchors.left: parent.left anchors.right: parent.right @@ -257,56 +227,62 @@ Rectangle { } Repeater { - model: QGroundControl.corePlugin.settings + model: QGroundControl.corePlugin.settingsPages visible: QGroundControl.corePlugin.options.combineSettingsAndSetup SubMenuButton { - imageResource: modelData.icon - setupIndicator: false - exclusiveGroup: setupButtonGroup - text: modelData.title - visible: QGroundControl.corePlugin.options.combineSettingsAndSetup - onClicked: panelLoader.setSource(modelData.url) + imageResource: modelData.icon + setupIndicator: false + exclusiveGroup: setupButtonGroup + text: modelData.title + visible: QGroundControl.corePlugin.options.combineSettingsAndSetup + onClicked: panelLoader.setSource(modelData.url) + Layout.fillWidth: true } } SubMenuButton { - id: summaryButton - imageResource: "/qmlimages/VehicleSummaryIcon.png" - setupIndicator: false - checked: true - exclusiveGroup: setupButtonGroup - text: "Summary" + id: summaryButton + imageResource: "/qmlimages/VehicleSummaryIcon.png" + setupIndicator: false + checked: true + exclusiveGroup: setupButtonGroup + text: "Summary" + Layout.fillWidth: true onClicked: showSummaryPanel() } SubMenuButton { - id: firmwareButton - imageResource: "/qmlimages/FirmwareUpgradeIcon.png" - setupIndicator: false - exclusiveGroup: setupButtonGroup - visible: !ScreenTools.isMobile - text: "Firmware" + id: firmwareButton + imageResource: "/qmlimages/FirmwareUpgradeIcon.png" + setupIndicator: false + exclusiveGroup: setupButtonGroup + visible: !ScreenTools.isMobile + text: "Firmware" + Layout.fillWidth: true onClicked: showFirmwarePanel() } SubMenuButton { - id: px4FlowButton - exclusiveGroup: setupButtonGroup - visible: QGroundControl.multiVehicleManager.activeVehicle ? QGroundControl.multiVehicleManager.activeVehicle.genericFirmware : false - setupIndicator: false - text: "PX4Flow" + id: px4FlowButton + exclusiveGroup: setupButtonGroup + visible: QGroundControl.multiVehicleManager.activeVehicle ? QGroundControl.multiVehicleManager.activeVehicle.genericFirmware : false + setupIndicator: false + text: "PX4Flow" + Layout.fillWidth: true + onClicked: showPX4FlowPanel() } SubMenuButton { - id: joystickButton - setupIndicator: true - setupComplete: joystickManager.activeJoystick ? joystickManager.activeJoystick.calibrated : false - exclusiveGroup: setupButtonGroup - visible: _fullParameterVehicleAvailable && joystickManager.joysticks.length != 0 - text: "Joystick" + id: joystickButton + setupIndicator: true + setupComplete: joystickManager.activeJoystick ? joystickManager.activeJoystick.calibrated : false + exclusiveGroup: setupButtonGroup + visible: _fullParameterVehicleAvailable && joystickManager.joysticks.length != 0 + text: "Joystick" + Layout.fillWidth: true onClicked: showJoystickPanel() } @@ -316,22 +292,24 @@ Rectangle { model: _fullParameterVehicleAvailable ? QGroundControl.multiVehicleManager.activeVehicle.autopilot.vehicleComponents : 0 SubMenuButton { - imageResource: modelData.iconResource - setupIndicator: modelData.requiresSetup - setupComplete: modelData.setupComplete - exclusiveGroup: setupButtonGroup - text: modelData.name - visible: modelData.setupSource.toString() != "" + imageResource: modelData.iconResource + setupIndicator: modelData.requiresSetup + setupComplete: modelData.setupComplete + exclusiveGroup: setupButtonGroup + text: modelData.name + visible: modelData.setupSource.toString() != "" + Layout.fillWidth: true onClicked: showVehicleComponentPanel(modelData) } } SubMenuButton { - setupIndicator: false - exclusiveGroup: setupButtonGroup - visible: QGroundControl.multiVehicleManager.parameterReadyVehicleAvailable - text: "Parameters" + setupIndicator: false + exclusiveGroup: setupButtonGroup + visible: QGroundControl.multiVehicleManager.parameterReadyVehicleAvailable + text: "Parameters" + Layout.fillWidth: true onClicked: showParametersPanel() } diff --git a/src/api/QGCCorePlugin.cc b/src/api/QGCCorePlugin.cc index f547ede..0210034 100644 --- a/src/api/QGCCorePlugin.cc +++ b/src/api/QGCCorePlugin.cc @@ -36,6 +36,7 @@ public: , defaultOptions(NULL) { } + ~QGCCorePlugin_p() { if(pGeneral) @@ -57,6 +58,7 @@ public: if(defaultOptions) delete defaultOptions; } + QGCSettings* pGeneral; QGCSettings* pCommLinks; QGCSettings* pOfflineMaps; @@ -79,6 +81,8 @@ QGCCorePlugin::~QGCCorePlugin() QGCCorePlugin::QGCCorePlugin(QGCApplication *app) : QGCTool(app) + , _showTouchAreas(false) + , _showAdvancedUI(false) { _p = new QGCCorePlugin_p; } @@ -91,7 +95,7 @@ void QGCCorePlugin::setToolbox(QGCToolbox *toolbox) qmlRegisterUncreatableType("QGroundControl.QGCOptions", 1, 0, "QGCOptions", "Reference only"); } -QVariantList &QGCCorePlugin::settings() +QVariantList &QGCCorePlugin::settingsPages() { //-- If this hasn't been overridden, create default set of settings if(!_p->pGeneral) { diff --git a/src/api/QGCCorePlugin.h b/src/api/QGCCorePlugin.h index 2f5d392..b78ee06 100644 --- a/src/api/QGCCorePlugin.h +++ b/src/api/QGCCorePlugin.h @@ -33,13 +33,16 @@ public: QGCCorePlugin(QGCApplication* app); ~QGCCorePlugin(); - Q_PROPERTY(QVariantList settings READ settings CONSTANT) + Q_PROPERTY(QVariantList settingsPages READ settingsPages NOTIFY settingsPagesChanged) Q_PROPERTY(int defaultSettings READ defaultSettings CONSTANT) Q_PROPERTY(QGCOptions* options READ options CONSTANT) + Q_PROPERTY(bool showTouchAreas MEMBER _showTouchAreas NOTIFY showTouchAreasChanged) + Q_PROPERTY(bool showAdvancedUI MEMBER _showAdvancedUI NOTIFY showAdvancedUIChanged) + /// The list of settings under the Settings Menu /// @return A list of QGCSettings - virtual QVariantList& settings (); + virtual QVariantList& settingsPages (); /// The default settings panel to show /// @return The settings index @@ -61,6 +64,16 @@ public: // Override from QGCTool void setToolbox (QGCToolbox *toolbox); + +signals: + void settingsPagesChanged (void); + void showTouchAreasChanged (bool showTouchAreas); + void showAdvancedUIChanged (bool showAdvancedUI); + +protected: + bool _showTouchAreas; + bool _showAdvancedUI; + private: - QGCCorePlugin_p* _p; + QGCCorePlugin_p* _p; }; diff --git a/src/ui/AppSettings.qml b/src/ui/AppSettings.qml index 80bb69f..3b9d5a0 100644 --- a/src/ui/AppSettings.qml +++ b/src/ui/AppSettings.qml @@ -10,12 +10,11 @@ import QtQuick 2.3 import QtQuick.Controls 1.2 -import QtPositioning 5.3 +import QtQuick.Layouts 1.2 import QGroundControl 1.0 import QGroundControl.Palette 1.0 import QGroundControl.Controls 1.0 -import QGroundControl.FlightDisplay 1.0 import QGroundControl.ScreenTools 1.0 Rectangle { @@ -28,7 +27,6 @@ Rectangle { readonly property real _horizontalMargin: _defaultTextWidth / 2 readonly property real _verticalMargin: _defaultTextHeight / 2 readonly property real _buttonHeight: ScreenTools.isTinyScreen ? ScreenTools.defaultFontPixelHeight * 3 : ScreenTools.defaultFontPixelHeight * 2 - readonly property real _buttonWidth: ScreenTools.defaultFontPixelWidth * 10 property bool _first: true @@ -36,7 +34,7 @@ Rectangle { Component.onCompleted: { //-- Default Settings - __rightPanel.source = QGroundControl.corePlugin.settings[QGroundControl.corePlugin.defaultSettings].url + __rightPanel.source = QGroundControl.corePlugin.settingsPages[QGroundControl.corePlugin.defaultSettings].url } QGCFlickable { @@ -53,25 +51,12 @@ Rectangle { ExclusiveGroup { id: panelActionGroup } - Column { + ColumnLayout { id: buttonColumn - width: _maxButtonWidth spacing: _verticalMargin property real _maxButtonWidth: 0 - Component.onCompleted: reflowWidths() - - function reflowWidths() { - buttonColumn._maxButtonWidth = 0 - for (var i = 0; i < children.length; i++) { - buttonColumn._maxButtonWidth = Math.max(buttonColumn._maxButtonWidth, children[i].width) - } - for (var j = 0; j < children.length; j++) { - children[j].width = buttonColumn._maxButtonWidth - } - } - QGCLabel { anchors.left: parent.left anchors.right: parent.right @@ -82,17 +67,20 @@ Rectangle { } Repeater { - model: QGroundControl.corePlugin.settings + model: QGroundControl.corePlugin.settingsPages QGCButton { - height: _buttonHeight - text: modelData.title - exclusiveGroup: panelActionGroup + height: _buttonHeight + text: modelData.title + exclusiveGroup: panelActionGroup + Layout.fillWidth: true + onClicked: { if(__rightPanel.source !== modelData.url) { __rightPanel.source = modelData.url } checked = true } + Component.onCompleted: { if(_first) { _first = false diff --git a/src/ui/toolbar/MainToolBar.qml b/src/ui/toolbar/MainToolBar.qml index 610cb6e..47b1d41 100644 --- a/src/ui/toolbar/MainToolBar.qml +++ b/src/ui/toolbar/MainToolBar.qml @@ -74,9 +74,9 @@ Rectangle { console.log("easter egg click", ++_clickCount) eggTimer.restart() if (_clickCount == 5) { - QGroundControl.showAdvancedUI = true + QGroundControl.corePlugin.showAdvancedUI = true } else if (_clickCount == 7) { - QGroundControl.showTouchAreas = true + QGroundControl.corePlugin.showTouchAreas = true } }