diff --git a/src/FlightDisplay/FlightDisplayViewMap.qml b/src/FlightDisplay/FlightDisplayViewMap.qml index c7a2258c4139ea002755ca9856811816fad70730..27bdeddd4b21123fce8ce2c10ec3b2d69ad5b385 100644 --- a/src/FlightDisplay/FlightDisplayViewMap.qml +++ b/src/FlightDisplay/FlightDisplayViewMap.qml @@ -71,151 +71,106 @@ FlightMap { Component.onCompleted: start(false /* editMode */) } - QGCMapLabel { - id: flyLabel - map: flightMap - text: qsTr("Fly") - visible: !ScreenTools.isShortScreen - anchors.topMargin: _toolButtonTopMargin - anchors.horizontalCenter: centerMapDropButton.horizontalCenter - anchors.top: parent.top - } - - //-- Vertical Tool Buttons - ExclusiveGroup { - id: dropButtonsExclusiveGroup + id: _mapTypeButtonsExclusiveGroup } - ExclusiveGroup { - id: mapTypeButtonsExclusiveGroup - } + ToolStrip { + id: toolStrip + anchors.leftMargin: ScreenTools.defaultFontPixelWidth + anchors.left: parent.left + anchors.topMargin: _toolButtonTopMargin + anchors.top: parent.top + color: qgcPal.window + title: qsTr("Fly") + z: QGroundControl.zOrderWidgets + buttonVisible: [ true, true, _showZoom, _showZoom ] + + property bool _showZoom: !ScreenTools.isShortScreen + + model: [ + { + name: "Center", + iconSource: "/qmlimages/MapCenter.svg", + dropPanelComponent: centerMapDropPanel + }, + { + name: "Map", + iconSource: "/qmlimages/MapType.svg", + dropPanelComponent: mapTypeDropPanel + }, + { + name: "In", + iconSource: "/qmlimages/ZoomPlus.svg" + }, + { + name: "Out", + iconSource: "/qmlimages/ZoomMinus.svg" + } + ] - //-- Dismiss Drop Down (if any) - MouseArea { - anchors.fill: parent - enabled: dropButtonsExclusiveGroup.current != null onClicked: { - if (dropButtonsExclusiveGroup.current) { - dropButtonsExclusiveGroup.current.checked = false + switch (index) { + case 2: + _flightMap.zoomLevel += 0.5 + break + case 3: + _flightMap.zoomLevel -= 0.5 + break } - dropButtonsExclusiveGroup.current = null } } - // IMPORTANT NOTE: Drop Buttons must be parented directly to the map. If they are placed in a Column for example the drop control positioning - // will not work correctly. - - //-- Map Center Control - CenterMapDropButton { - id: centerMapDropButton - anchors.topMargin: flyLabel.visible ? ScreenTools.defaultFontPixelHeight / 2 : _toolButtonTopMargin - anchors.leftMargin: ScreenTools.defaultFontPixelHeight - anchors.left: parent.left - anchors.top: flyLabel.visible ? flyLabel.bottom : parent.top - z: QGroundControl.zOrderWidgets - exclusiveGroup: dropButtonsExclusiveGroup - map: _flightMap - mapFitViewport: Qt.rect(leftToolWidth, _toolButtonTopMargin, flightMap.width - leftToolWidth - rightPanelWidth, flightMap.height - _toolButtonTopMargin) - usePlannedHomePosition: false - geoFenceController: geoFenceController - missionController: missionController - rallyPointController: rallyPointController - showFollowVehicle: true - followVehicle: _followVehicle - onFollowVehicleChanged: _followVehicle = followVehicle - - property real leftToolWidth: centerMapDropButton.x + centerMapDropButton.width - } + // Toolstrip drop panel compomnents - //-- Map Type Control - DropButton { - id: mapTypeButton - anchors.topMargin: ScreenTools.defaultFontPixelHeight - anchors.top: centerMapDropButton.bottom - anchors.left: centerMapDropButton.left - dropDirection: dropRight - buttonImage: "/qmlimages/MapType.svg" - viewportMargins: ScreenTools.defaultFontPixelWidth / 2 - exclusiveGroup: dropButtonsExclusiveGroup - z: QGroundControl.zOrderWidgets - lightBorders: isSatelliteMap + MapFitFunctions { + id: mapFitFunctions + map: _flightMap + mapFitViewport: Qt.rect(leftToolWidth, _toolButtonTopMargin, flightMap.width - leftToolWidth - rightPanelWidth, flightMap.height - _toolButtonTopMargin) + usePlannedHomePosition: false + mapMissionController: missionController + mapGeoFenceController: geoFenceController + mapRallyPointController: rallyPointController - dropDownComponent: Component { - Column { - spacing: ScreenTools.defaultFontPixelWidth + property real leftToolWidth: toolStrip.x + toolStrip.width + } - Row { - spacing: ScreenTools.defaultFontPixelWidth + Component { + id: centerMapDropPanel - Repeater { - model: QGroundControl.flightMapSettings.mapTypes + CenterMapDropPanel { + map: _flightMap + fitFunctions: mapFitFunctions + } + } - QGCButton { - checkable: true - checked: QGroundControl.flightMapSettings.mapType === text - text: modelData - width: clearButton.width - exclusiveGroup: mapTypeButtonsExclusiveGroup + Component { + id: mapTypeDropPanel - onClicked: { - QGroundControl.flightMapSettings.mapType = text - checked = true - dropButtonsExclusiveGroup.current = null - } - } - } - } + Column { + spacing: ScreenTools.defaultFontPixelHeight / 2 - QGCButton { - id: clearButton - text: qsTr("Clear Flight Trails") - enabled: QGroundControl.multiVehicleManager.activeVehicle - onClicked: { - QGroundControl.multiVehicleManager.activeVehicle.clearTrajectoryPoints() - dropButtonsExclusiveGroup.current = null + QGCLabel { text: qsTr("Map type:") } + Row { + spacing: ScreenTools.defaultFontPixelWidth + Repeater { + model: QGroundControl.flightMapSettings.mapTypes + + QGCButton { + checkable: true + checked: QGroundControl.flightMapSettings.mapType === text + text: modelData + exclusiveGroup: _mapTypeButtonsExclusiveGroup + onClicked: { + QGroundControl.flightMapSettings.mapType = text + dropPanel.hide() + } } } } } } - //-- Zoom Map In - RoundButton { - id: mapZoomPlus - anchors.topMargin: ScreenTools.defaultFontPixelHeight - anchors.top: mapTypeButton.bottom - anchors.left: mapTypeButton.left - visible: !ScreenTools.isTinyScreen && _mainIsMap - buttonImage: "/qmlimages/ZoomPlus.svg" - exclusiveGroup: dropButtonsExclusiveGroup - z: QGroundControl.zOrderWidgets - lightBorders: isSatelliteMap - onClicked: { - if(_flightMap) - _flightMap.zoomLevel += 0.5 - checked = false - } - } - - //-- Zoom Map Out - RoundButton { - id: mapZoomMinus - anchors.topMargin: ScreenTools.defaultFontPixelHeight - anchors.top: mapZoomPlus.bottom - anchors.left: mapZoomPlus.left - visible: !ScreenTools.isTinyScreen && _mainIsMap - buttonImage: "/qmlimages/ZoomMinus.svg" - exclusiveGroup: dropButtonsExclusiveGroup - z: QGroundControl.zOrderWidgets - lightBorders: isSatelliteMap - onClicked: { - if(_flightMap) - _flightMap.zoomLevel -= 0.5 - checked = false - } - } - // Add trajectory points to the map MapItemView { model: _mainIsMap ? _activeVehicle ? _activeVehicle.trajectoryPoints : 0 : 0 diff --git a/src/MissionEditor/MissionEditor.qml b/src/MissionEditor/MissionEditor.qml index a71ce19d61265d28eda225c878b7088146056547..19c53733fc9ae1de60f9fd870dfed7afefd62cd3 100644 --- a/src/MissionEditor/MissionEditor.qml +++ b/src/MissionEditor/MissionEditor.qml @@ -100,7 +100,7 @@ QGCView { property real toolbarHeight: qgcView.height - ScreenTools.availableHeight property real rightPanelWidth: _rightPanelWidth - property real leftToolWidth: mapFitFunctions.x + mapFitFunctions.width + property real leftToolWidth: toolStrip.x + toolStrip.width } MissionController { @@ -810,46 +810,8 @@ QGCView { } } - /* - - FIXME: Need to put these back into ToolStrip - - //-- Zoom Map In - RoundButton { - id: mapZoomPlus - anchors.topMargin: ScreenTools.defaultFontPixelHeight - anchors.top: mapTypeButton.bottom - anchors.left: mapTypeButton.left - visible: !ScreenTools.isTinyScreen && !ScreenTools.isShortScreen - buttonImage: "/qmlimages/ZoomPlus.svg" - lightBorders: _lightWidgetBorders - - onClicked: { - if(editorMap) - editorMap.zoomLevel += 0.5 - checked = false - } - } - - //-- Zoom Map Out - RoundButton { - id: mapZoomMinus - anchors.topMargin: ScreenTools.defaultFontPixelHeight - anchors.top: mapZoomPlus.bottom - anchors.left: mapZoomPlus.left - visible: !ScreenTools.isTinyScreen && !ScreenTools.isShortScreen - buttonImage: "/qmlimages/ZoomMinus.svg" - lightBorders: _lightWidgetBorders - onClicked: { - if(editorMap) - editorMap.zoomLevel -= 0.5 - checked = false - } - } - - */ - ToolStrip { + id: toolStrip anchors.leftMargin: ScreenTools.defaultFontPixelWidth anchors.left: parent.left anchors.topMargin: _toolButtonTopMargin @@ -857,9 +819,12 @@ QGCView { color: qgcPal.window title: qsTr("Plan") z: QGroundControl.zOrderWidgets - showAlternateIcon: [ false, false, _syncDropDownController.dirty, false, false ] - rotateImage: [ false, false, _syncDropDownController.syncInProgress, false, false ] - buttonEnabled: [ true, true, !_syncDropDownController.syncInProgress, true, true ] + showAlternateIcon: [ false, false, _syncDropDownController.dirty, false, false, false, false ] + rotateImage: [ false, false, _syncDropDownController.syncInProgress, false, false, false, false ] + buttonEnabled: [ true, true, !_syncDropDownController.syncInProgress, true, true, true, true ] + buttonVisible: [ true, true, true, true, true, _showZoom, _showZoom ] + + property bool _showZoom: !ScreenTools.isShortScreen model: [ { @@ -887,12 +852,34 @@ QGCView { name: "Map", iconSource: "/qmlimages/MapType.svg", dropPanelComponent: mapTypeDropPanel + }, + { + name: "In", + iconSource: "/qmlimages/ZoomPlus.svg" + }, + { + name: "Out", + iconSource: "/qmlimages/ZoomMinus.svg" } ] onClicked: { - if (index == 0) { + switch (index == 0) { + case 0: _addWaypointOnClick = checked + break + case 5: + editorMap.zoomLevel += 0.5 + break + case 6: + editorMap.zoomLevel -= 0.5 + break + case 5: + editorMap.zoomLevel += 0.5 + break + case 6: + editorMap.zoomLevel -= 0.5 + break } } } diff --git a/src/QmlControls/DropPanel.qml b/src/QmlControls/DropPanel.qml index 2dc61a3a0dc51e941e291949d2797b752b569440..a0f2ab1175b2afe1780587babcd0a088f2a07d8b 100644 --- a/src/QmlControls/DropPanel.qml +++ b/src/QmlControls/DropPanel.qml @@ -23,7 +23,6 @@ Item { signal clicked() property real radius: ScreenTools.isMobile ? ScreenTools.defaultFontPixelHeight * 1.75 : ScreenTools.defaultFontPixelHeight * 1.25 property real viewportMargins: 0 - property real topMargin: parent.height - ScreenTools.availableHeight property var toolStrip @@ -48,7 +47,7 @@ Item { property alias _dropDownComponent: dropDownLoader.sourceComponent property real _viewportMaxLeft: -x + viewportMargins property real _viewportMaxRight: parent.width - (viewportMargins * 2) - x - property real _viewportMaxTop: -y + viewportMargins + topMargin + property real _viewportMaxTop: -y + viewportMargins property real _viewportMaxBottom: parent.height - (viewportMargins * 2) - y function show(panelEdgeTopPoint, panelEdgeHeight, panelComponent) { @@ -104,19 +103,6 @@ Item { QGCPalette { id: qgcPal } - /* - MouseArea { - x: _viewportMaxLeft - y: _viewportMaxTop - width: _viewportMaxRight -_viewportMaxLeft - height: _viewportMaxBottom - _viewportMaxTop - visible: checked - onClicked: { - checked = false - _root.clicked() - } - }*/ - Item { id: dropDownItem diff --git a/src/QmlControls/ToolStrip.qml b/src/QmlControls/ToolStrip.qml index 9c2e7c3ec88de0951c123d50abe702d9bc70b8b7..337b1b40fd5883da38e1ce9ddca5da3c539a9686 100644 --- a/src/QmlControls/ToolStrip.qml +++ b/src/QmlControls/ToolStrip.qml @@ -25,16 +25,17 @@ Rectangle { property var showAlternateIcon property var rotateImage property var buttonEnabled + property var buttonVisible signal clicked(int index, bool checked) - readonly property real _radius: ScreenTools.defaultFontPixelWidth / 2 - readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2 - readonly property real _buttonSpacing: ScreenTools.defaultFontPixelWidth + readonly property real _radius: ScreenTools.defaultFontPixelWidth / 2 + readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2 + readonly property real _buttonSpacing: ScreenTools.defaultFontPixelWidth + readonly property bool _showOptionalElements: !ScreenTools.isShortScreen - ExclusiveGroup { - id: dropButtonsExclusiveGroup - } + QGCPalette { id: qgcPal } + ExclusiveGroup { id: dropButtonsExclusiveGroup } function uncheckAll() { dropButtonsExclusiveGroup.current = null @@ -65,31 +66,34 @@ Rectangle { QGCLabel { anchors.horizontalCenter: parent.horizontalCenter text: title + visible: _showOptionalElements } - Item { width: 1; height: _buttonSpacing } + Item { width: 1; height: _buttonSpacing; visible: _showOptionalElements } Rectangle { anchors.left: parent.left anchors.right: parent.right height: 1 color: qgcPal.text + visible: _showOptionalElements } Repeater { id: repeater delegate: Column { - id: buttonColumn - width: buttonStripColumn.width + id: buttonColumn + width: buttonStripColumn.width + visible: _root.buttonVisible ? _root.buttonVisible[index] : true property bool checked: false property ExclusiveGroup exclusiveGroup: dropButtonsExclusiveGroup - property var _iconSource: modelData.iconSource - property var _alternateIconSource: modelData.alternateIconSource - property var _source: _root.showAlternateIcon[index] ? _alternateIconSource : _iconSource - property bool rotateImage: _root.rotateImage[index] + property var _iconSource: modelData.iconSource + property var _alternateIconSource: modelData.alternateIconSource + property var _source: (_root.showAlternateIcon && _root.showAlternateIcon[index]) ? _alternateIconSource : _iconSource + property bool rotateImage: _root.rotateImage ? _root.rotateImage[index] : false onExclusiveGroupChanged: { if (exclusiveGroup) { @@ -106,7 +110,11 @@ Rectangle { } } - Item { width: 1; height: _buttonSpacing } + Item { + width: 1 + height: _buttonSpacing + visible: index == 0 ? _showOptionalElements : true + } Rectangle { anchors.left: parent.left @@ -139,8 +147,8 @@ Rectangle { anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top - height: parent.height + buttonLabel.height + buttonColumn.spacing - visible: _root.buttonEnabled[index] + height: parent.height + (_showOptionalElements? buttonLabel.height + buttonColumn.spacing : 0) + visible: _root.buttonEnabled ? _root.buttonEnabled[index] : true onClicked: { if (modelData.dropPanelComponent === undefined) { @@ -171,6 +179,7 @@ Rectangle { anchors.horizontalCenter: parent.horizontalCenter font.pointSize: ScreenTools.smallFontPointSize text: modelData.name + visible: _showOptionalElements } } }