diff --git a/qgcresources.qrc b/qgcresources.qrc index c50d5ac950b60ff1531f0f1d325060d8d29f77d7..5cf8cb3e5d6c8e19268a7a5f4de1707c40a0033b 100644 --- a/qgcresources.qrc +++ b/qgcresources.qrc @@ -123,6 +123,7 @@ src/FlightMap/Images/ZoomPlus.svg src/FlightMap/Images/ZoomMinus.svg src/FlightMap/Images/Help.svg + src/FlightMap/Images/Home.svg src/FlightMap/Images/HelpBlack.svg src/FlightMap/Images/MapAddMission.svg src/FlightMap/Images/MapAddMissionBlack.svg @@ -175,6 +176,7 @@ src/Airmap/images/advisory-icon.svg + src/Airmap/images/expand.svg src/Airmap/images/pencil.svg diff --git a/src/Airmap/AirspaceControl.qml b/src/Airmap/AirspaceControl.qml index 62e1b52a329df8178ac40b5e8f64b65cee3b82dd..5cbd6516c7e59790bdebd133ad4b15e520e94522 100644 --- a/src/Airmap/AirspaceControl.qml +++ b/src/Airmap/AirspaceControl.qml @@ -63,6 +63,16 @@ Item { anchors.verticalCenter: parent.verticalCenter } } + QGCColoredImage { + width: height + height: ScreenTools.defaultFontPixelWidth * 2.5 + sourceSize.height: height + source: "qrc:/airmap/expand.svg" + color: _colorWhite + anchors.right: parent.right + anchors.rightMargin: ScreenTools.defaultFontPixelWidth + anchors.verticalCenter: parent.verticalCenter + } MouseArea { anchors.fill: parent onClicked: colapsed = false @@ -115,11 +125,6 @@ Item { } } } - MouseArea { - anchors.fill: parent - enabled: !colapsed - onClicked: colapsed = true - } } //-- Contents (Brown Box) Rectangle { @@ -189,7 +194,7 @@ Item { } Rectangle { id: regButton - height: regLabel.height + ScreenTools.defaultFontPixelHeight + height: regLabel.height + ScreenTools.defaultFontPixelHeight * 0.5 radius: 2 color: _colorMidBrown Layout.fillWidth: true diff --git a/src/FlightMap/Images/HomeBlack.svg b/src/FlightMap/Images/HomeBlack.svg deleted file mode 100644 index ae78ea2b4c2445f74e23b4027c5be4fd3bd9fd2e..0000000000000000000000000000000000000000 --- a/src/FlightMap/Images/HomeBlack.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - diff --git a/src/PlanView/GeoFenceEditor.qml b/src/PlanView/GeoFenceEditor.qml index dd592b5fe6ef150d52a78da19cbf77468424d466..094e4183eade8ffd151d1fb3daec3d3ded5687e4 100644 --- a/src/PlanView/GeoFenceEditor.qml +++ b/src/PlanView/GeoFenceEditor.qml @@ -42,7 +42,7 @@ QGCFlickable { anchors.left: parent.left anchors.top: parent.top text: qsTr("GeoFence") - color: "black" + anchors.leftMargin: ScreenTools.defaultFontPixelWidth } Rectangle { diff --git a/src/PlanView/MissionItemEditor.qml b/src/PlanView/MissionItemEditor.qml index dd643588f178fbdf9122e36d73082e24af2d6b52..2eb46f0facc0f2b827577f3fbf7779b4b59e73de 100644 --- a/src/PlanView/MissionItemEditor.qml +++ b/src/PlanView/MissionItemEditor.qml @@ -15,7 +15,7 @@ import QGroundControl.Palette 1.0 /// Mission item edit control Rectangle { id: _root - height: editorLoader.y + (editorLoader.visible ? editorLoader.height : 0) + (_margin * 2) + height: header.height + (editorLoader.visible ? (editorLoader.height + (_margin * 3)) : 0) color: _currentItem ? qgcPal.missionItemEditor : qgcPal.windowShade radius: _radius @@ -33,15 +33,14 @@ Rectangle { property var _masterController: masterController property var _missionController: _masterController.missionController property bool _currentItem: missionItem.isCurrentItem - property color _outerTextColor: _currentItem ? qgcPal.primaryButtonText : qgcPal.text property bool _noMissionItemsAdded: ListView.view.model.count === 1 property real _sectionSpacer: ScreenTools.defaultFontPixelWidth / 2 // spacing between section headings property bool _singleComplexItem: _missionController.complexMissionItemNames.length === 1 readonly property real _editFieldWidth: Math.min(width - _margin * 2, ScreenTools.defaultFontPixelWidth * 12) - readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2 - readonly property real _radius: ScreenTools.defaultFontPixelWidth / 2 - readonly property real _hamburgerSize: commandPicker.height * 0.75 + readonly property real _margin: ScreenTools.defaultFontPixelWidth * 0.5 + readonly property real _radius: ScreenTools.defaultFontPixelWidth * 0.5 + readonly property real _hamburgerSize: header.height * 0.75 readonly property bool _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly QGCPalette { @@ -52,7 +51,6 @@ Rectangle { FocusScope { id: currentItemScope anchors.fill: parent - MouseArea { anchors.fill: parent onClicked: { @@ -62,38 +60,76 @@ Rectangle { } } + //-- Dialog Component { id: editPositionDialog - EditPositionDialog { coordinate: missionItem.coordinate onCoordinateChanged: missionItem.coordinate = coordinate } } - - QGCLabel { - id: label - anchors.verticalCenter: commandPicker.verticalCenter - anchors.leftMargin: _margin + //-- Header + Row { + id: header + spacing: ScreenTools.defaultFontPixelWidth + height: ScreenTools.defaultFontPixelHeight * 3 + anchors.verticalCenter: editorLoader.visible ? undefined : parent.verticalCenter anchors.left: parent.left - text: missionItem.homePosition ? "H" : missionItem.sequenceNumber - color: _outerTextColor + anchors.leftMargin: ScreenTools.defaultFontPixelWidth + Item { + width: ScreenTools.defaultFontPixelWidth * 3 + height: parent.height + QGCColoredImage { + width: ScreenTools.defaultFontPixelHeight + height: width + sourceSize.height: width + source: "qrc:/qmlimages/Home.svg" + visible: missionItem.homePosition + color: qgcPal.text + anchors.centerIn: parent + } + QGCLabel { + text: missionItem.sequenceNumber + color: qgcPal.text + visible: !missionItem.homePosition + anchors.centerIn: parent + } + } + QGCLabel { + id: label + visible: !missionItem.isCurrentItem || !missionItem.isSimpleItem || _waypointsOnlyMode + text: missionItem.commandName + color: qgcPal.text + anchors.verticalCenter: parent.verticalCenter + } + QGCButton { + id: commandPicker + visible: !label.visible + text: missionItem.commandName + anchors.verticalCenter: parent.verticalCenter + Component { + id: commandDialog + MissionCommandDialog { + missionItem: _root.missionItem + } + } + onClicked: qgcView.showDialog(commandDialog, qsTr("Select Mission Command"), qgcView.showDialogDefaultWidth, StandardButton.Cancel) + } } - + //-- Hamburger button at the right of header QGCColoredImage { id: hamburger anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.right: parent.right - anchors.verticalCenter: commandPicker.verticalCenter + anchors.verticalCenter: header.verticalCenter width: _hamburgerSize height: _hamburgerSize sourceSize.height: _hamburgerSize source: "qrc:/qmlimages/Hamburger.svg" - visible: missionItem.isCurrentItem && missionItem.sequenceNumber != 0 - color: qgcPal.windowShade - + visible: missionItem.isCurrentItem && missionItem.sequenceNumber !== 0 + color: qgcPal.text } - + //-- Hamburger Menu QGCMouseArea { fillItem: hamburger visible: hamburger.visible @@ -101,67 +137,54 @@ Rectangle { currentItemScope.focus = true hamburgerMenu.popup() } - Menu { id: hamburgerMenu - MenuItem { text: qsTr("Insert waypoint") onTriggered: insertWaypoint() } - Menu { id: patternMenu title: qsTr("Insert pattern") visible: !_singleComplexItem - Instantiator { model: _missionController.complexMissionItemNames - onObjectAdded: patternMenu.insertItem(index, object) onObjectRemoved: patternMenu.removeItem(object) - MenuItem { text: modelData onTriggered: insertComplexItem(modelData) } } } - MenuItem { text: qsTr("Insert ") + _missionController.complexMissionItemNames[0] visible: _singleComplexItem onTriggered: insertComplexItem(_missionController.complexMissionItemNames[0]) } - MenuItem { text: qsTr("Delete") onTriggered: remove() } - MenuItem { text: qsTr("Change command...") onTriggered: commandPicker.clicked() visible: !_waypointsOnlyMode } - MenuItem { text: qsTr("Edit position...") visible: missionItem.specifiesCoordinate onTriggered: qgcView.showDialog(editPositionDialog, qsTr("Edit Position"), qgcView.showDialogDefaultWidth, StandardButton.Cancel) } - MenuSeparator { visible: missionItem.isSimpleItem && !_waypointsOnlyMode } - MenuItem { - text: qsTr("Show all values") - checkable: true - checked: missionItem.isSimpleItem ? missionItem.rawEdit : false - visible: missionItem.isSimpleItem && !_waypointsOnlyMode - - onTriggered: { + text: qsTr("Show all values") + checkable: true + checked: missionItem.isSimpleItem ? missionItem.rawEdit : false + visible: missionItem.isSimpleItem && !_waypointsOnlyMode + onTriggered: { if (missionItem.rawEdit) { if (missionItem.friendlyEditAllowed) { missionItem.rawEdit = false @@ -176,48 +199,16 @@ Rectangle { } } } - - QGCButton { - id: commandPicker - anchors.topMargin: _margin / 2 - anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2 - anchors.rightMargin: ScreenTools.defaultFontPixelWidth - anchors.left: label.right - anchors.top: parent.top - visible: !commandLabel.visible - text: missionItem.commandName - - Component { - id: commandDialog - - MissionCommandDialog { - missionItem: _root.missionItem - } - } - - onClicked: qgcView.showDialog(commandDialog, qsTr("Select Mission Command"), qgcView.showDialogDefaultWidth, StandardButton.Cancel) - } - - QGCLabel { - id: commandLabel - anchors.fill: commandPicker - visible: !missionItem.isCurrentItem || !missionItem.isSimpleItem || _waypointsOnlyMode - verticalAlignment: Text.AlignVCenter - text: missionItem.commandName - color: _outerTextColor - } - + //-- Editor Content Loader { id: editorLoader anchors.leftMargin: _margin - anchors.topMargin: _margin anchors.left: parent.left - anchors.top: commandPicker.bottom + anchors.top: header.bottom source: missionItem.editorQml visible: _currentItem - property var masterController: _masterController property real availableWidth: _root.width - (_margin * 2) ///< How wide the editor should be property var editorRoot: _root } -} // Rectangle +} diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml index ef8c4a14ff99a629ec16a056593e638b5c6a9f0a..da6cbec3b80b46a54a45d6366b9024aa098165b5 100644 --- a/src/PlanView/PlanView.qml +++ b/src/PlanView/PlanView.qml @@ -34,6 +34,8 @@ QGCView { viewPanel: panel z: QGroundControl.zOrderTopMost + property bool planControlColapsed: false + readonly property int _decimalPlaces: 8 readonly property real _horizontalMargin: ScreenTools.defaultFontPixelWidth * 0.5 readonly property real _margin: ScreenTools.defaultFontPixelHeight * 0.5 @@ -495,11 +497,13 @@ QGCView { anchors.right: parent.right anchors.rightMargin: ScreenTools.defaultFontPixelWidth } + //------------------------------------------------------- + // Right Panel Controls Item { anchors.fill: rightPanel Column { id: rightControls - spacing: ScreenTools.defaultFontPixelHeight * 0.25 + spacing: ScreenTools.defaultFontPixelHeight * 0.5 anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top @@ -507,16 +511,23 @@ QGCView { //------------------------------------------------------- // Airmap Airspace Control AirspaceControl { + id: airspaceControl width: parent.width + onColapsedChanged: { + if(!airspaceControl.colasped) { + planControlColapsed = true + } + } } //------------------------------------------------------- // Mission Controls (Colapsed) Rectangle { id: planColapsed width: parent.width - height: colapsedRow.height + ScreenTools.defaultFontPixelHeight + height: planControlColapsed ? colapsedRow.height + ScreenTools.defaultFontPixelHeight : 0 color: qgcPal.missionItemEditor radius: _radius + visible: planControlColapsed Row { id: colapsedRow spacing: ScreenTools.defaultFontPixelWidth @@ -532,13 +543,186 @@ QGCView { anchors.verticalCenter: parent.verticalCenter } QGCLabel { - id: colapsedPlanLabel text: qsTr("Plan") color: qgcPal.text anchors.verticalCenter: parent.verticalCenter } } + QGCColoredImage { + width: height + height: ScreenTools.defaultFontPixelWidth * 2.5 + sourceSize.height: height + source: "qrc:/airmap/expand.svg" + color: _colorWhite + anchors.right: parent.right + anchors.rightMargin: ScreenTools.defaultFontPixelWidth + anchors.verticalCenter: parent.verticalCenter + } + MouseArea { + anchors.fill: parent + onClicked: { + airspaceControl.colapsed = true + planControlColapsed = false + } + } } + //------------------------------------------------------- + // Mission Controls (Expanded) + Rectangle { + id: planExpanded + width: parent.width + height: !planControlColapsed ? expandedCol.height + ScreenTools.defaultFontPixelHeight : 0 + color: qgcPal.missionItemEditor + radius: _radius + visible: !planControlColapsed + Item { + height: expandedCol.height + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + Column { + id: expandedCol + spacing: ScreenTools.defaultFontPixelHeight * 0.5 + anchors.left: parent.left + anchors.right: parent.right + //-- Header + Row { + id: expandedRow + spacing: ScreenTools.defaultFontPixelWidth + anchors.left: parent.left + anchors.leftMargin: ScreenTools.defaultFontPixelWidth + readonly property real _buttonRadius: ScreenTools.defaultFontPixelHeight * 0.75 + QGCColoredImage { + width: height + height: ScreenTools.defaultFontPixelWidth * 2.5 + sourceSize.height: height + source: "qrc:/res/waypoint.svg" + color: qgcPal.text + anchors.verticalCenter: parent.verticalCenter + } + QGCLabel { + text: qsTr("Plan") + color: qgcPal.text + visible: !QGroundControl.corePlugin.options.enablePlanViewSelector + anchors.verticalCenter: parent.verticalCenter + } + ExclusiveGroup { + id: planElementSelectorGroup + onCurrentChanged: { + switch (current) { + case planElementMission: + _editingLayer = _layerMission + break + case planElementGeoFence: + _editingLayer = _layerGeoFence + break + case planElementRallyPoints: + _editingLayer = _layerRallyPoints + break + } + } + } + QGCRadioButton { + id: planElementMission + exclusiveGroup: planElementSelectorGroup + text: qsTr("Mission") + checked: true + visible: QGroundControl.corePlugin.options.enablePlanViewSelector + anchors.verticalCenter: parent.verticalCenter + } + QGCRadioButton { + id: planElementGeoFence + exclusiveGroup: planElementSelectorGroup + text: qsTr("Fence") + visible: QGroundControl.corePlugin.options.enablePlanViewSelector + anchors.verticalCenter: parent.verticalCenter + } + QGCRadioButton { + id: planElementRallyPoints + exclusiveGroup: planElementSelectorGroup + text: qsTr("Rally") + visible: QGroundControl.corePlugin.options.enablePlanViewSelector + anchors.verticalCenter: parent.verticalCenter + } + } + } + } + } + } + //------------------------------------------------------- + // Mission Item Editor + Item { + id: missionItemEditor + anchors.left: parent.left + anchors.right: parent.right + anchors.top: rightControls.bottom + anchors.topMargin: ScreenTools.defaultFontPixelHeight * 0.5 + anchors.bottom: parent.bottom + anchors.bottomMargin: ScreenTools.defaultFontPixelHeight * 0.25 + visible: _editingLayer == _layerMission && !planControlColapsed + QGCListView { + id: missionItemEditorListView + anchors.fill: parent + spacing: ScreenTools.defaultFontPixelHeight * 0.5 + orientation: ListView.Vertical + model: _missionController.visualItems + cacheBuffer: Math.max(height * 2, 0) + clip: true + currentIndex: _missionController.currentPlanViewIndex + highlightMoveDuration: 250 + visible: _editingLayer == _layerMission && !planControlColapsed + //-- List Elements + delegate: MissionItemEditor { + map: editorMap + masterController: _planMasterController + missionItem: object + width: parent.width + readOnly: false + rootQgcView: _qgcView + onClicked: _missionController.setCurrentPlanViewIndex(object.sequenceNumber, false) + onRemove: { + var removeIndex = index + _missionController.removeMissionItem(removeIndex) + if (removeIndex >= _missionController.visualItems.count) { + removeIndex-- + } + _missionController.setCurrentPlanViewIndex(removeIndex, true) + } + onInsertWaypoint: insertSimpleMissionItem(editorMap.center, index) + onInsertComplexItem: insertComplexMissionItem(complexItemName, editorMap.center, index) + } + } + } + // GeoFence Editor + GeoFenceEditor { + anchors.top: rightControls.bottom + anchors.topMargin: ScreenTools.defaultFontPixelHeight * 0.5 + anchors.left: parent.left + anchors.right: parent.right + availableHeight: ScreenTools.availableHeight + myGeoFenceController: _geoFenceController + flightMap: editorMap + visible: _editingLayer == _layerGeoFence + } + // Rally Point Editor + RallyPointEditorHeader { + id: rallyPointHeader + anchors.top: rightControls.bottom + anchors.topMargin: ScreenTools.defaultFontPixelHeight * 0.5 + anchors.left: parent.left + anchors.right: parent.right + visible: _editingLayer == _layerRallyPoints + controller: _rallyPointController + } + RallyPointItemEditor { + id: rallyPointEditor + anchors.top: rallyPointHeader.bottom + anchors.topMargin: ScreenTools.defaultFontPixelHeight * 0.5 + anchors.left: parent.left + anchors.right: parent.right + visible: _editingLayer == _layerRallyPoints && _rallyPointController.points.count + rallyPoint: _rallyPointController.currentRallyPoint + controller: _rallyPointController } } @@ -561,7 +745,7 @@ QGCView { missionItems: _missionController.visualItems visible: _editingLayer === _layerMission && (ScreenTools.isMobile ? height < Screen.height * 0.25 : true) } - } // QGCViewPanel + } Component { id: syncLoadFromVehicleOverwrite diff --git a/src/PlanView/RallyPointEditorHeader.qml b/src/PlanView/RallyPointEditorHeader.qml index ff0a86277f00775ef7c4f7b44bcc446648543bf2..0c5d677c82581e94852b25b1a348e0cf1291ca69 100644 --- a/src/PlanView/RallyPointEditorHeader.qml +++ b/src/PlanView/RallyPointEditorHeader.qml @@ -28,7 +28,6 @@ QGCFlickable { anchors.left: parent.left anchors.top: parent.top text: qsTr("Rally Points") - color: "black" } Rectangle { diff --git a/src/PlanView/RallyPointItemEditor.qml b/src/PlanView/RallyPointItemEditor.qml index 775f322a65e46c8cefbabb1cc142ddc7caa8c488..91513017bf5c076812d4ad4394a17a1d2bbf28da 100644 --- a/src/PlanView/RallyPointItemEditor.qml +++ b/src/PlanView/RallyPointItemEditor.qml @@ -17,8 +17,7 @@ Rectangle { property var rallyPoint ///< RallyPoint object associated with editor property var controller ///< RallyPointController - property bool _currentItem: rallyPoint ? rallyPoint == controller.currentRallyPoint : false - property color _outerTextColor: _currentItem ? "black" : qgcPal.text + property bool _currentItem: rallyPoint ? rallyPoint === controller.currentRallyPoint : false readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2 readonly property real _radius: ScreenTools.defaultFontPixelWidth / 2 @@ -47,10 +46,9 @@ Rectangle { anchors.left: indicator.right anchors.verticalCenter: parent.verticalCenter text: qsTr("Rally Point") - color: _outerTextColor } - Image { + QGCColoredImage { id: hamburger anchors.rightMargin: _margin anchors.right: parent.right @@ -59,14 +57,12 @@ Rectangle { height: width sourceSize.height: height source: "qrc:/qmlimages/Hamburger.svg" - + color: qgcPal.text MouseArea { anchors.fill: parent onClicked: hamburgerMenu.popup() - Menu { id: hamburgerMenu - MenuItem { text: qsTr("Delete") onTriggered: controller.removePoint(rallyPoint) @@ -74,7 +70,7 @@ Rectangle { } } } - } // Item - titleBar + } Rectangle { id: valuesRect diff --git a/src/QGCPalette.cc b/src/QGCPalette.cc index ec5ac8fa79e1a44e2e2f4aace3f5d8e01a3840a3..5af46e337e881cca41fbd5f67d2bf27b54cd00c2 100644 --- a/src/QGCPalette.cc +++ b/src/QGCPalette.cc @@ -73,13 +73,13 @@ void QGCPalette::_buildMap(void) DECLARE_QGC_COLOR(alertBackground, "#eecc44", "#eecc44", "#eecc44", "#eecc44") DECLARE_QGC_COLOR(alertBorder, "#808080", "#808080", "#808080", "#808080") DECLARE_QGC_COLOR(alertText, "#000000", "#000000", "#000000", "#000000") - DECLARE_QGC_COLOR(missionItemEditor, "#585858", "#8cb3be", "#585858", "#8cb3be") + DECLARE_QGC_COLOR(missionItemEditor, "#585858", "#a39fd3", "#585858", "#4e4480") // Colors are not affecting by theming DECLARE_QGC_COLOR(mapWidgetBorderLight, "#ffffff", "#ffffff", "#ffffff", "#ffffff") DECLARE_QGC_COLOR(mapWidgetBorderDark, "#000000", "#000000", "#000000", "#000000") DECLARE_QGC_COLOR(brandingPurple, "#4A2C6D", "#4A2C6D", "#4A2C6D", "#4A2C6D") - DECLARE_QGC_COLOR(brandingBlue, "#48D6FF", "#48D6FF", "#48D6FF", "#48D6FF") + DECLARE_QGC_COLOR(brandingBlue, "#48D6FF", "#6045c5", "#48D6FF", "#6045c5") } void QGCPalette::setColorGroupEnabled(bool enabled) diff --git a/src/QmlControls/QmlTest.qml b/src/QmlControls/QmlTest.qml index 92193f776be0b0f52361f5bcc2252a0b721dbbc6..7ff8acb5fc339aaf5ef0870a4da84c62f31ae90b 100644 --- a/src/QmlControls/QmlTest.qml +++ b/src/QmlControls/QmlTest.qml @@ -841,6 +841,38 @@ Rectangle { text: palette.alertText } + // missionItemEditor + Loader { + sourceComponent: rowHeader + property var text: "missionItemEditor" + } + ClickableColor { + property var palette: QGCPalette { colorGroupEnabled: false } + color: palette.missionItemEditor + onColorSelected: palette.missionItemEditor = color + } + ClickableColor { + property var palette: QGCPalette { colorGroupEnabled: true } + color: palette.missionItemEditor + onColorSelected: palette.missionItemEditor = color + } + Text { + width: 80 + height: 20 + color: "black" + horizontalAlignment: Text.AlignHCenter + property var palette: QGCPalette { colorGroupEnabled: false } + text: palette.missionItemEditor + } + Text { + width: 80 + height: 20 + color: "black" + horizontalAlignment: Text.AlignHCenter + property var palette: QGCPalette { colorGroupEnabled: true } + text: palette.missionItemEditor + } + } Column {