Unverified Commit 5bbb313d authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #7794 from DonLakeFlyer/QGCOptionsComboBox

New QGCOptionsComboBox control
parents cb294031 8689f586
...@@ -123,6 +123,7 @@ ...@@ -123,6 +123,7 @@
<file alias="QGroundControl/Controls/QGCMenuSeparator.qml">src/QmlControls/QGCMenuSeparator.qml</file> <file alias="QGroundControl/Controls/QGCMenuSeparator.qml">src/QmlControls/QGCMenuSeparator.qml</file>
<file alias="QGroundControl/Controls/QGCMouseArea.qml">src/QmlControls/QGCMouseArea.qml</file> <file alias="QGroundControl/Controls/QGCMouseArea.qml">src/QmlControls/QGCMouseArea.qml</file>
<file alias="QGroundControl/Controls/QGCMovableItem.qml">src/QmlControls/QGCMovableItem.qml</file> <file alias="QGroundControl/Controls/QGCMovableItem.qml">src/QmlControls/QGCMovableItem.qml</file>
<file alias="QGroundControl/Controls/QGCOptionsComboBox.qml">src/QmlControls/QGCOptionsComboBox.qml</file>
<file alias="QGroundControl/Controls/QGCPipable.qml">src/QmlControls/QGCPipable.qml</file> <file alias="QGroundControl/Controls/QGCPipable.qml">src/QmlControls/QGCPipable.qml</file>
<file alias="QGroundControl/Controls/QGCRadioButton.qml">src/QmlControls/QGCRadioButton.qml</file> <file alias="QGroundControl/Controls/QGCRadioButton.qml">src/QmlControls/QGCRadioButton.qml</file>
<file alias="QGroundControl/Controls/QGCSlider.qml">src/QmlControls/QGCSlider.qml</file> <file alias="QGroundControl/Controls/QGCSlider.qml">src/QmlControls/QGCSlider.qml</file>
......
...@@ -7,14 +7,20 @@ import QGroundControl.Palette 1.0 ...@@ -7,14 +7,20 @@ import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0 import QGroundControl.Controls 1.0
QGCCheckBox { QGCCheckBox {
checkedState: isFactChecked()
property Fact fact: Fact { } property Fact fact: Fact { }
property variant checkedValue: 1 property variant checkedValue: 1
property variant uncheckedValue: 0 property variant uncheckedValue: 0
checkedState: fact ?
(fact.typeIsBool ? Binding on checkedState {
(fact.value === false ? Qt.Unchecked : Qt.Checked) : value: fact ?
(fact.value === 0 ? Qt.Unchecked : Qt.Checked)) : (fact.typeIsBool ?
Qt.Unchecked (fact.value === false ? Qt.Unchecked : Qt.Checked) :
(fact.value === 0 ? Qt.Unchecked : Qt.Checked)) :
Qt.Unchecked
}
onClicked: fact.value = (checked ? checkedValue : uncheckedValue) onClicked: fact.value = (checked ? checkedValue : uncheckedValue)
} }
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
{ {
"id": 22, "id": 22,
"comment": "MAV_CMD_NAV_TAKEOFF", "comment": "MAV_CMD_NAV_TAKEOFF",
"description": "Take off from the ground and ascend to specified altitude.",
"specifiesCoordinate": false, "specifiesCoordinate": false,
"specifiesAltitudeOnly": true "specifiesAltitudeOnly": true
}, },
......
...@@ -102,6 +102,8 @@ TransectStyleComplexItem::TransectStyleComplexItem(Vehicle* vehicle, bool flyVie ...@@ -102,6 +102,8 @@ TransectStyleComplexItem::TransectStyleComplexItem(Vehicle* vehicle, bool flyVie
connect(&_cameraCalc, &CameraCalc::distanceToSurfaceRelativeChanged, this, &TransectStyleComplexItem::coordinateHasRelativeAltitudeChanged); connect(&_cameraCalc, &CameraCalc::distanceToSurfaceRelativeChanged, this, &TransectStyleComplexItem::coordinateHasRelativeAltitudeChanged);
connect(&_cameraCalc, &CameraCalc::distanceToSurfaceRelativeChanged, this, &TransectStyleComplexItem::exitCoordinateHasRelativeAltitudeChanged); connect(&_cameraCalc, &CameraCalc::distanceToSurfaceRelativeChanged, this, &TransectStyleComplexItem::exitCoordinateHasRelativeAltitudeChanged);
connect(&_hoverAndCaptureFact, &Fact::rawValueChanged, this, &TransectStyleComplexItem::_handleHoverAndCaptureEnabled);
connect(this, &TransectStyleComplexItem::visualTransectPointsChanged, this, &TransectStyleComplexItem::complexDistanceChanged); connect(this, &TransectStyleComplexItem::visualTransectPointsChanged, this, &TransectStyleComplexItem::complexDistanceChanged);
connect(this, &TransectStyleComplexItem::visualTransectPointsChanged, this, &TransectStyleComplexItem::greatestDistanceToChanged); connect(this, &TransectStyleComplexItem::visualTransectPointsChanged, this, &TransectStyleComplexItem::greatestDistanceToChanged);
...@@ -769,3 +771,11 @@ void TransectStyleComplexItem::_followTerrainChanged(bool followTerrain) ...@@ -769,3 +771,11 @@ void TransectStyleComplexItem::_followTerrainChanged(bool followTerrain)
_hoverAndCaptureFact.setRawValue(false); _hoverAndCaptureFact.setRawValue(false);
} }
} }
void TransectStyleComplexItem::_handleHoverAndCaptureEnabled(QVariant enabled)
{
if (enabled.toBool() && _cameraTriggerInTurnAroundFact.rawValue().toBool()) {
qDebug() << "_handleHoverAndCaptureEnabled";
_cameraTriggerInTurnAroundFact.setRawValue(false);
}
}
...@@ -205,6 +205,7 @@ protected: ...@@ -205,6 +205,7 @@ protected:
private slots: private slots:
void _reallyQueryTransectsPathHeightInfo(void); void _reallyQueryTransectsPathHeightInfo(void);
void _followTerrainChanged (bool followTerrain); void _followTerrainChanged (bool followTerrain);
void _handleHoverAndCaptureEnabled (QVariant enabled);
private: private:
void _queryTransectsPathHeightInfo (void); void _queryTransectsPathHeightInfo (void);
......
...@@ -916,6 +916,7 @@ Item { ...@@ -916,6 +916,7 @@ Item {
} else { } else {
_planMasterController.removeAllFromVehicle() _planMasterController.removeAllFromVehicle()
} }
_missionController.setCurrentPlanViewIndex(0, true)
hideDialog() hideDialog()
} }
} }
...@@ -927,6 +928,7 @@ Item { ...@@ -927,6 +928,7 @@ Item {
message: qsTr("Are you sure you want to remove all mission items and clear the mission from the vehicle?") message: qsTr("Are you sure you want to remove all mission items and clear the mission from the vehicle?")
function accept() { function accept() {
_planMasterController.removeAllFromVehicle() _planMasterController.removeAllFromVehicle()
_missionController.setCurrentPlanViewIndex(0, true)
hideDialog() hideDialog()
} }
} }
......
...@@ -162,7 +162,9 @@ Rectangle { ...@@ -162,7 +162,9 @@ Rectangle {
cameraCalc: missionItem.cameraCalc cameraCalc: missionItem.cameraCalc
vehicleFlightIsFrontal: true vehicleFlightIsFrontal: true
distanceToSurfaceLabel: qsTr("Altitude") distanceToSurfaceLabel: qsTr("Altitude")
distanceToSurfaceAltitudeMode: missionItem.followTerrain ? QGroundControl.AltitudeModeAboveTerrain : QGroundControl.AltitudeModeRelative distanceToSurfaceAltitudeMode: missionItem.followTerrain ?
QGroundControl.AltitudeModeAboveTerrain :
missionItem.cameraCalc.distanceToSurfaceRelative
frontalDistanceLabel: qsTr("Trigger Dist") frontalDistanceLabel: qsTr("Trigger Dist")
sideDistanceLabel: qsTr("Spacing") sideDistanceLabel: qsTr("Spacing")
usingPreset: _usingPreset usingPreset: _usingPreset
...@@ -235,48 +237,47 @@ Rectangle { ...@@ -235,48 +237,47 @@ Rectangle {
} }
*/ */
FactCheckBox { QGCOptionsComboBox {
text: qsTr("Hover and capture image") Layout.fillWidth: true
fact: missionItem.hoverAndCapture
visible: missionItem.hoverAndCaptureAllowed model: [
enabled: !missionItem.followTerrain {
onClicked: { text: qsTr("Hover and capture image"),
if (checked) { fact: missionItem.hoverAndCapture,
missionItem.cameraTriggerInTurnAround.rawValue = false enabled: !missionItem.followTerrain,
visible: missionItem.hoverAndCaptureAllowed
},
{
text: qsTr("Refly at 90 deg offset"),
fact: missionItem.refly90Degrees,
enabled: !missionItem.followTerrain,
visible: true
},
{
text: qsTr("Images in turnarounds"),
fact: missionItem.cameraTriggerInTurnAround,
enabled: missionItem.hoverAndCaptureAllowed ? !missionItem.hoverAndCapture.rawValue : true,
visible: true
},
{
text: qsTr("Fly alternate transects"),
fact: missionItem.flyAlternateTransects,
enabled: true,
visible: _vehicle ? (_vehicle.fixedWing || _vehicle.vtol) : false
},
{
text: qsTr("Relative altitude"),
enabled: missionItem.cameraCalc.isManualCamera && !missionItem.followTerrain,
visible: QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || (!missionItem.cameraCalc.distanceToSurfaceRelative && !missionItem.followTerrain),
checked: missionItem.cameraCalc.distanceToSurfaceRelative
} }
} ]
}
FactCheckBox {
text: qsTr("Refly at 90 deg offset")
fact: missionItem.refly90Degrees
enabled: !missionItem.followTerrain
}
FactCheckBox {
text: qsTr("Images in turnarounds")
fact: missionItem.cameraTriggerInTurnAround
enabled: missionItem.hoverAndCaptureAllowed ? !missionItem.hoverAndCapture.rawValue : true
}
FactCheckBox { onItemClicked: {
text: qsTr("Fly alternate transects") if (index == 4) {
fact: missionItem.flyAlternateTransects missionItem.cameraCalc.distanceToSurfaceRelative = !missionItem.cameraCalc.distanceToSurfaceRelative
visible: _vehicle ? (_vehicle.fixedWing || _vehicle.vtol) : false console.log(missionItem.cameraCalc.distanceToSurfaceRelative)
} }
QGCCheckBox {
id: relAlt
Layout.alignment: Qt.AlignLeft
text: qsTr("Relative altitude")
checked: missionItem.cameraCalc.distanceToSurfaceRelative
enabled: missionItem.cameraCalc.isManualCamera && !missionItem.followTerrain
visible: QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || (!missionItem.cameraCalc.distanceToSurfaceRelative && !missionItem.followTerrain)
onClicked: missionItem.cameraCalc.distanceToSurfaceRelative = checked
Connections {
target: missionItem.cameraCalc
onDistanceToSurfaceRelativeChanged: relAlt.checked = missionItem.cameraCalc.distanceToSurfaceRelative
} }
} }
} }
......
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
* @file
* @author Gus Grubba <gus@auterion.com>
*/
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11
import QGroundControl.Controls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.ScreenTools 1.0
ComboBox {
id: control
padding: ScreenTools.comboBoxPadding
property string labelText: qsTr("Options")
signal itemClicked(int index)
property var _controlQGCPal: QGCPalette { colorGroupEnabled: enabled }
property bool _flashChecked
property string _flashText
property bool _showFlash: false
background: Rectangle {
implicitWidth: ScreenTools.implicitComboBoxWidth
implicitHeight: ScreenTools.implicitComboBoxHeight
color: _controlQGCPal.window
border.width: enabled ? 1 : 0
border.color: "#999"
}
/*! Adding the Combobox list item to the theme. */
delegate: ItemDelegate {
implicitHeight: modelData.visible ?
(Math.max(background ? background.implicitHeight : 0, Math.max(contentItem.implicitHeight, indicator ? indicator.implicitHeight : 0) + topPadding + bottomPadding)) :
0
width: control.width
checkable: true
enabled: modelData.enabled
text: modelData.text
property var _checkedValue: 1
property var _uncheckedValue: 0
property var _itemQGCPal: QGCPalette { colorGroupEnabled: enabled }
property var _control: control
Binding on checked { value: modelData.fact ?
(modelData.fact.typeIsBool ? (modelData.fact.value === false ? Qt.Unchecked : Qt.Checked) : (modelData.fact.value === 0 ? Qt.Unchecked : Qt.Checked)) :
modelData.checked }
contentItem: RowLayout {
spacing: ScreenTools.defaultFontPixelWidth
Rectangle {
height: ScreenTools.defaultFontPixelHeight
width: height
border.color: _itemQGCPal.buttonText
border.width: 1
color: _itemQGCPal.button
QGCColoredImage {
anchors.centerIn: parent
width: parent.width * 0.75
height: width
source: "/qmlimages/checkbox-check.svg"
color: _itemQGCPal.buttonText
mipmap: true
fillMode: Image.PreserveAspectFit
sourceSize.height: height
visible: checked
}
}
Text {
text: modelData.text
color: _itemQGCPal.buttonText
}
}
background: Rectangle {
color: _controlQGCPal.button
}
onClicked: {
if (modelData.fact) {
modelData.fact.value = (checked ? _checkedValue : _uncheckedValue)
} else {
itemClicked(index)
}
_control._flashChecked = checked
_control._flashText = text
_control._showFlash = true
_control.popup.close()
}
}
/*! This defines the label of the button. */
contentItem: Item {
implicitWidth: _showFlash ? flash.implicitWidth : text.implicitWidth
implicitHeight: _showFlash ? flash.implicitHeight : text.implicitHeight
QGCLabel {
id: text
anchors.verticalCenter: parent.verticalCenter
text: labelText
color: _controlQGCPal.text
visible: !_showFlash
}
RowLayout {
id: flash
anchors.verticalCenter: parent.verticalCenter
spacing: ScreenTools.defaultFontPixelWidth
visible: _showFlash
onVisibleChanged: {
if (visible) {
flashTimer.restart()
}
}
Timer {
id: flashTimer
interval: 1500
repeat: false
running: false
onTriggered: _showFlash = false
}
Rectangle {
height: ScreenTools.defaultFontPixelHeight
width: height
border.color: _controlQGCPal.buttonText
border.width: 1
color: _controlQGCPal.window
QGCColoredImage {
anchors.centerIn: parent
width: parent.width * 0.75
height: width
source: "/qmlimages/checkbox-check.svg"
color: _controlQGCPal.text
mipmap: true
fillMode: Image.PreserveAspectFit
sourceSize.height: height
visible: _flashChecked
}
}
Text {
text: _flashText
color: _controlQGCPal.buttonText
}
}
}
}
...@@ -58,6 +58,7 @@ QGCMenuItem 1.0 QGCMenuItem.qml ...@@ -58,6 +58,7 @@ QGCMenuItem 1.0 QGCMenuItem.qml
QGCMenuSeparator 1.0 QGCMenuSeparator.qml QGCMenuSeparator 1.0 QGCMenuSeparator.qml
QGCMouseArea 1.0 QGCMouseArea.qml QGCMouseArea 1.0 QGCMouseArea.qml
QGCMovableItem 1.0 QGCMovableItem.qml QGCMovableItem 1.0 QGCMovableItem.qml
QGCOptionsComboBox 1.0 QGCOptionsComboBox.qml
QGCPipable 1.0 QGCPipable.qml QGCPipable 1.0 QGCPipable.qml
QGCRadioButton 1.0 QGCRadioButton.qml QGCRadioButton 1.0 QGCRadioButton.qml
QGCSlider 1.0 QGCSlider.qml QGCSlider 1.0 QGCSlider.qml
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment