diff --git a/custom-example/res/MainToolbar/CustomMainToolBar.qml b/custom-example/res/MainToolbar/CustomMainToolBar.qml index 7eb58e48c40fbeea112172041a3b2c58504159fc..5072b0c8245f67c7bb32aae0341e83d3a66c924e 100644 --- a/custom-example/res/MainToolbar/CustomMainToolBar.qml +++ b/custom-example/res/MainToolbar/CustomMainToolBar.qml @@ -45,8 +45,6 @@ Item { Component.onCompleted: { flyButton.checked = true sectionTitle = flyButton.text - //-- Show full screen - mainWindow.showFullScreen() } //------------------------------------------------------------------------- //-- Fly/Plan state toggle diff --git a/src/AnalyzeView/MAVLinkInspectorController.cc b/src/AnalyzeView/MAVLinkInspectorController.cc index d6f55e69c40a7faa1732bc78114551074fb56780..f064a478493efd8a88d930d148cafefaed7c3547 100644 --- a/src/AnalyzeView/MAVLinkInspectorController.cc +++ b/src/AnalyzeView/MAVLinkInspectorController.cc @@ -404,7 +404,7 @@ MAVLinkInspectorController::_vehicleAdded(Vehicle* vehicle) { QGCMAVLinkVehicle* v = _findVehicle(static_cast(vehicle->id())); if(v) { - v->messages()->deleteListAndContents(); + v->messages()->clearAndDeleteContents(); emit v->messagesChanged(); } else { v = new QGCMAVLinkVehicle(this, static_cast(vehicle->id())); diff --git a/src/Joystick/Joystick.cc b/src/Joystick/Joystick.cc index 27cc1336ed8b9d6fd5d7797ab6c9110e8c578f80..4bf624587df7034f5a271b1ec37f37e0bebc14da 100644 --- a/src/Joystick/Joystick.cc +++ b/src/Joystick/Joystick.cc @@ -108,40 +108,7 @@ Joystick::Joystick(const QString& name, int axisCount, int buttonCount, int hatC _rgButtonValues[i] = BUTTON_UP; _buttonActionArray.append(nullptr); } - //-- Available Actions - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionNone)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionArm)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionDisarm)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionToggleArm)); - if (_activeVehicle) { - QStringList list = _activeVehicle->flightModes(); - foreach(auto mode, list) { - _assignableButtonActions.append(new AssignableButtonAction(this, mode)); - } - } - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionVTOLFixedWing)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionVTOLMultiRotor)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionContinuousZoomIn, true)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionContinuousZoomOut, true)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionStepZoomIn, true)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionStepZoomOut, true)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionNextStream)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionPreviousStream)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionNextCamera)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionPreviousCamera)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionTriggerCamera)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionStartVideoRecord)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionStopVideoRecord)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionToggleVideoRecord)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalDown, true)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalUp, true)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalLeft, true)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalRight, true)); - _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalCenter)); - for(int i = 0; i < _assignableButtonActions.count(); i++) { - AssignableButtonAction* p = qobject_cast(_assignableButtonActions[i]); - _availableActionTitles << p->action(); - } + _buildActionList(_multiVehicleManager->activeVehicle()); _updateTXModeSettingsKey(_multiVehicleManager->activeVehicle()); _loadSettings(); connect(_multiVehicleManager, &MultiVehicleManager::activeVehicleChanged, this, &Joystick::_activeVehicleChanged); @@ -155,7 +122,7 @@ Joystick::~Joystick() delete[] _rgAxisValues; delete[] _rgCalibration; delete[] _rgButtonValues; - _assignableButtonActions.deleteListAndContents(); + _assignableButtonActions.clearAndDeleteContents(); for (int button = 0; button < _totalButtonCount; button++) { if(_buttonActionArray[button]) { _buttonActionArray[button]->deleteLater(); @@ -690,6 +657,8 @@ void Joystick::startPolling(Vehicle* vehicle) } // Update qml in case of joystick transition emit calibratedChanged(_calibrated); + // Build action list + _buildActionList(vehicle); // Only connect the new vehicle if it wants joystick data if (vehicle->joystickEnabled()) { _pollingStartedForCalibration = false; @@ -1066,3 +1035,44 @@ int Joystick::_findAssignableButtonAction(const QString& action) return -1; } +void Joystick::_buildActionList(Vehicle* activeVehicle) +{ + if(_assignableButtonActions.count()) + _assignableButtonActions.clearAndDeleteContents(); + _availableActionTitles.clear(); + //-- Available Actions + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionNone)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionArm)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionDisarm)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionToggleArm)); + if (activeVehicle) { + QStringList list = activeVehicle->flightModes(); + foreach(auto mode, list) { + _assignableButtonActions.append(new AssignableButtonAction(this, mode)); + } + } + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionVTOLFixedWing)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionVTOLMultiRotor)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionContinuousZoomIn, true)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionContinuousZoomOut, true)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionStepZoomIn, true)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionStepZoomOut, true)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionNextStream)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionPreviousStream)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionNextCamera)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionPreviousCamera)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionTriggerCamera)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionStartVideoRecord)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionStopVideoRecord)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionToggleVideoRecord)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalDown, true)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalUp, true)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalLeft, true)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalRight, true)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalCenter)); + for(int i = 0; i < _assignableButtonActions.count(); i++) { + AssignableButtonAction* p = qobject_cast(_assignableButtonActions[i]); + _availableActionTitles << p->action(); + } + emit assignableActionsChanged(); +} diff --git a/src/Joystick/Joystick.h b/src/Joystick/Joystick.h index 17a5d95603cd5c2ab22bf745345cae6870c1118e..52baa95befe027f9b415bfd891c824d3b532f403 100644 --- a/src/Joystick/Joystick.h +++ b/src/Joystick/Joystick.h @@ -93,8 +93,8 @@ public: Q_PROPERTY(QStringList buttonActions READ buttonActions NOTIFY buttonActionsChanged) //-- Actions that can be assigned to buttons - Q_PROPERTY(QmlObjectListModel* assignableActions READ assignableActions CONSTANT) - Q_PROPERTY(QStringList assignableActionTitles READ assignableActionTitles CONSTANT) + Q_PROPERTY(QmlObjectListModel* assignableActions READ assignableActions NOTIFY assignableActionsChanged) + Q_PROPERTY(QStringList assignableActionTitles READ assignableActionTitles NOTIFY assignableActionsChanged) Q_PROPERTY(QString disabledActionName READ disabledActionName CONSTANT) Q_PROPERTY(bool gimbalEnabled READ gimbalEnabled WRITE setGimbalEnabled NOTIFY gimbalEnabledChanged) @@ -180,6 +180,7 @@ signals: void rawButtonPressedChanged (int index, int pressed); void calibratedChanged (bool calibrated); void buttonActionsChanged (); + void assignableActionsChanged (); void throttleModeChanged (int mode); void negativeThrustChanged (bool allowNegative); void exponentialChanged (float exponential); @@ -230,6 +231,7 @@ protected: bool _validButton (int button); void _handleAxis (); void _handleButtons (); + void _buildActionList (Vehicle* activeVehicle); void _pitchStep (int direction); void _yawStep (int direction); diff --git a/src/ui/MainRootWindow.qml b/src/ui/MainRootWindow.qml index 7c25295eb914ced081d73c80c0ea3cb0816121d6..747a38bcba90e7b3f8673d7eb358151583ecc40c 100644 --- a/src/ui/MainRootWindow.qml +++ b/src/ui/MainRootWindow.qml @@ -29,7 +29,8 @@ ApplicationWindow { visible: true Component.onCompleted: { - if(ScreenTools.isMobile) { + //-- Full screen on mobile or tiny screens + if(ScreenTools.isMobile || Screen.height / ScreenTools.realPixelDensity < 120) { mainWindow.showFullScreen() } else { width = ScreenTools.isMobile ? Screen.width : Math.min(250 * Screen.pixelDensity, Screen.width) diff --git a/src/ui/preferences/MockLink.qml b/src/ui/preferences/MockLink.qml index 753336e038bcb7f21cb120ef099f8df55331c88f..9185cbfb06c4d1c66cf2cd7b1e01265458b47d47 100644 --- a/src/ui/preferences/MockLink.qml +++ b/src/ui/preferences/MockLink.qml @@ -8,7 +8,9 @@ ****************************************************************************/ -import QtQuick 2.3 +import QtQuick 2.11 +import QtQuick.Controls 2.4 +import QtQuick.Layouts 1.11 import QGroundControl 1.0 import QGroundControl.Controls 1.0 @@ -25,48 +27,59 @@ Rectangle { QGCFlickable { anchors.fill: parent - contentWidth: column.width + (_margins * 2) + contentWidth: column.width + (_margins * 2) contentHeight: column.height + (_margins * 2) clip: true - Column { + ColumnLayout { id: column anchors.margins: _margins anchors.left: parent.left anchors.top: parent.top spacing: ScreenTools.defaultFontPixelHeight - QGCButton { - text: qsTr("PX4 Vehicle") - onClicked: QGroundControl.startPX4MockLink(sendStatusText.checked) + QGCCheckBox { + id: sendStatusText + text: qsTr("Send status text + voice") } QGCButton { - text: qsTr("APM ArduCopter Vehicle") - onClicked: QGroundControl.startAPMArduCopterMockLink(sendStatusText.checked) + text: qsTr("PX4 Vehicle") + Layout.fillWidth: true + onClicked: QGroundControl.startPX4MockLink(sendStatusText.checked) } QGCButton { - text: qsTr("APM ArduPlane Vehicle") - onClicked: QGroundControl.startAPMArduPlaneMockLink(sendStatusText.checked) + text: qsTr("APM ArduCopter Vehicle") + visible: QGroundControl.hasAPMSupport + Layout.fillWidth: true + onClicked: QGroundControl.startAPMArduCopterMockLink(sendStatusText.checked) } QGCButton { - text: qsTr("APM ArduSub Vehicle") - onClicked: QGroundControl.startAPMArduSubMockLink(sendStatusText.checked) + text: qsTr("APM ArduPlane Vehicle") + visible: QGroundControl.hasAPMSupport + Layout.fillWidth: true + onClicked: QGroundControl.startAPMArduPlaneMockLink(sendStatusText.checked) } QGCButton { - text: qsTr("APM ArduRover Vehicle") - onClicked: QGroundControl.startAPMArduRoverMockLink(sendStatusText.checked) + text: qsTr("APM ArduSub Vehicle") + visible: QGroundControl.hasAPMSupport + Layout.fillWidth: true + onClicked: QGroundControl.startAPMArduSubMockLink(sendStatusText.checked) } QGCButton { - text: qsTr("Generic Vehicle") - onClicked: QGroundControl.startGenericMockLink(sendStatusText.checked) + text: qsTr("APM ArduRover Vehicle") + visible: QGroundControl.hasAPMSupport + Layout.fillWidth: true + onClicked: QGroundControl.startAPMArduRoverMockLink(sendStatusText.checked) } - QGCCheckBox { - id: sendStatusText - text: qsTr("Send status text + voice") + QGCButton { + text: qsTr("Generic Vehicle") + Layout.fillWidth: true + onClicked: QGroundControl.startGenericMockLink(sendStatusText.checked) } QGCButton { - text: qsTr("Stop One MockLink") - onClicked: QGroundControl.stopOneMockLink() + text: qsTr("Stop One MockLink") + Layout.fillWidth: true + onClicked: QGroundControl.stopOneMockLink() } } }