diff --git a/qgcimages.qrc b/qgcimages.qrc
index ffb1b4cffdb0ea7a5bd91319823b67b6e423ee59..e0e6be14833fcebeb03ca4c7f8a2d0e5d12c004a 100644
--- a/qgcimages.qrc
+++ b/qgcimages.qrc
@@ -127,7 +127,7 @@
src/FlightMap/Images/pipHide.svg
src/FlightMap/Images/pipResize.svg
src/ui/toolbar/Images/Plan.svg
- src/MissionManager/CustomPlanCreator.png
+ src/MissionManager/BlankPlanCreator.png
src/MissionManager/CorridorScanPlanCreator.png
src/MissionManager/StructureScanPlanCreator.png
src/MissionManager/SurveyPlanCreator.png
diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro
index 536f6155be31199ef81d01b6efae9b574d77842c..74ff318dbdd9b4c5409b07bc5250c2c6e17557e1 100644
--- a/qgroundcontrol.pro
+++ b/qgroundcontrol.pro
@@ -592,7 +592,7 @@ HEADERS += \
src/MissionManager/ComplexMissionItem.h \
src/MissionManager/CorridorScanComplexItem.h \
src/MissionManager/CorridorScanPlanCreator.h \
- src/MissionManager/CustomPlanCreator.h \
+ src/MissionManager/BlankPlanCreator.h \
src/MissionManager/FixedWingLandingComplexItem.h \
src/MissionManager/GeoFenceController.h \
src/MissionManager/GeoFenceManager.h \
@@ -823,7 +823,7 @@ SOURCES += \
src/MissionManager/ComplexMissionItem.cc \
src/MissionManager/CorridorScanComplexItem.cc \
src/MissionManager/CorridorScanPlanCreator.cc \
- src/MissionManager/CustomPlanCreator.cc \
+ src/MissionManager/BlankPlanCreator.cc \
src/MissionManager/FixedWingLandingComplexItem.cc \
src/MissionManager/GeoFenceController.cc \
src/MissionManager/GeoFenceManager.cc \
diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index 99908ea6b068c45618a3bcfc558df8129086c1ee..fb2a636586da75ea2b0e38636b630e257f343181 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -102,7 +102,6 @@
src/QmlControls/ParameterEditorDialog.qml
src/QmlControls/PIDTuning.qml
src/PlanView/PlanEditToolbar.qml
- src/PlanView/PlanStartOverlay.qml
src/QmlControls/PreFlightCheckButton.qml
src/QmlControls/PreFlightCheckGroup.qml
src/QmlControls/PreFlightCheckModel.qml
diff --git a/src/MissionManager/BlankPlanCreator.cc b/src/MissionManager/BlankPlanCreator.cc
new file mode 100644
index 0000000000000000000000000000000000000000..209c31095cc944d3533a76b0859e6a0bd499365b
--- /dev/null
+++ b/src/MissionManager/BlankPlanCreator.cc
@@ -0,0 +1,24 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+#include "BlankPlanCreator.h"
+#include "PlanMasterController.h"
+#include "MissionSettingsItem.h"
+#include "FixedWingLandingComplexItem.h"
+
+BlankPlanCreator::BlankPlanCreator(PlanMasterController* planMasterController, QObject* parent)
+ : PlanCreator(planMasterController, tr("Blank"), QStringLiteral("/qmlimages/PlanCreator/BlankPlanCreator.png"), parent)
+{
+
+}
+
+void BlankPlanCreator::createPlan(const QGeoCoordinate& mapCenterCoord)
+{
+ _planMasterController->removeAll();
+}
diff --git a/src/MissionManager/CustomPlanCreator.h b/src/MissionManager/BlankPlanCreator.h
similarity index 78%
rename from src/MissionManager/CustomPlanCreator.h
rename to src/MissionManager/BlankPlanCreator.h
index 56b0900686cb24b36263f19ec74fa76b637590ea..b11c7190c67464e1599feb7117344304b821f90c 100644
--- a/src/MissionManager/CustomPlanCreator.h
+++ b/src/MissionManager/BlankPlanCreator.h
@@ -11,12 +11,12 @@
#include "PlanCreator.h"
-class CustomPlanCreator : public PlanCreator
+class BlankPlanCreator : public PlanCreator
{
Q_OBJECT
public:
- CustomPlanCreator(PlanMasterController* planMasterController, QObject* parent = nullptr);
+ BlankPlanCreator(PlanMasterController* planMasterController, QObject* parent = nullptr);
Q_INVOKABLE void createPlan(const QGeoCoordinate& mapCenterCoord) final;
};
diff --git a/src/MissionManager/BlankPlanCreator.png b/src/MissionManager/BlankPlanCreator.png
new file mode 100644
index 0000000000000000000000000000000000000000..7951383a98c6f7de98d1fb7812c4db69b6b748d1
Binary files /dev/null and b/src/MissionManager/BlankPlanCreator.png differ
diff --git a/src/MissionManager/CorridorScanPlanCreator.png b/src/MissionManager/CorridorScanPlanCreator.png
index d50b0a273749a2bde7b278f7662092cbd6e1125f..3889f6c89a2a1a043bf34dc03bc23d2fbb6f2b46 100644
Binary files a/src/MissionManager/CorridorScanPlanCreator.png and b/src/MissionManager/CorridorScanPlanCreator.png differ
diff --git a/src/MissionManager/CustomPlanCreator.cc b/src/MissionManager/CustomPlanCreator.cc
deleted file mode 100644
index 8900f86331d689530502bce4a7c78d9b11ea5dd0..0000000000000000000000000000000000000000
--- a/src/MissionManager/CustomPlanCreator.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-/****************************************************************************
- *
- * (c) 2009-2016 QGROUNDCONTROL PROJECT
- *
- * QGroundControl is licensed according to the terms in the file
- * COPYING.md in the root of the source code directory.
- *
- ****************************************************************************/
-
-#include "CustomPlanCreator.h"
-#include "PlanMasterController.h"
-#include "MissionSettingsItem.h"
-#include "FixedWingLandingComplexItem.h"
-
-CustomPlanCreator::CustomPlanCreator(PlanMasterController* planMasterController, QObject* parent)
- : PlanCreator(planMasterController, tr("Custom"), QStringLiteral("/qmlimages/PlanCreator/CustomPlanCreator.png"), parent)
-{
-
-}
-
-void CustomPlanCreator::createPlan(const QGeoCoordinate& mapCenterCoord)
-{
- _planMasterController->removeAll();
- VisualMissionItem* takeoffItem = _missionController->insertSimpleMissionItem(mapCenterCoord, -1);
- takeoffItem->setWizardMode(true);
- _missionController->insertSimpleMissionItem(mapCenterCoord.atDistanceAndAzimuth(50, 135), -1);
- _missionController->insertSimpleMissionItem(mapCenterCoord.atDistanceAndAzimuth(50, -135),-1);
- if (_planMasterController->managerVehicle()->fixedWing()) {
- FixedWingLandingComplexItem* landingItem = qobject_cast(_missionController->insertComplexMissionItem(MissionController::patternFWLandingName, mapCenterCoord, -1));
- landingItem->setWizardMode(true);
- landingItem->setLoiterDragAngleOnly(true);
- } else {
- MissionSettingsItem* settingsItem = _missionController->visualItems()->value(0);
- settingsItem->setMissionEndRTL(true);
- }
- _missionController->setCurrentPlanViewIndex(takeoffItem->sequenceNumber(), true);
-
-}
diff --git a/src/MissionManager/CustomPlanCreator.png b/src/MissionManager/CustomPlanCreator.png
deleted file mode 100644
index ca0eb9860c55af3bc53b93d04da0eff290598f88..0000000000000000000000000000000000000000
Binary files a/src/MissionManager/CustomPlanCreator.png and /dev/null differ
diff --git a/src/MissionManager/PlanMasterController.cc b/src/MissionManager/PlanMasterController.cc
index db2dd88f935592c6a8f27475a0ea27d789ae8ba9..de6d94f60cc830c2f4aee64d879821b315c7719e 100644
--- a/src/MissionManager/PlanMasterController.cc
+++ b/src/MissionManager/PlanMasterController.cc
@@ -19,7 +19,7 @@
#include "SurveyPlanCreator.h"
#include "StructureScanPlanCreator.h"
#include "CorridorScanPlanCreator.h"
-#include "CustomPlanCreator.h"
+#include "BlankPlanCreator.h"
#if defined(QGC_AIRMAP_ENABLED)
#include "AirspaceFlightPlanProvider.h"
#endif
@@ -601,19 +601,19 @@ void PlanMasterController::_updatePlanCreatorsList(void)
if (!_flyView) {
if (!_planCreators) {
_planCreators = new QmlObjectListModel(this);
+ _planCreators->append(new BlankPlanCreator(this, this));
_planCreators->append(new SurveyPlanCreator(this, this));
_planCreators->append(new CorridorScanPlanCreator(this, this));
- _planCreators->append(new CustomPlanCreator(this, this));
emit planCreatorsChanged(_planCreators);
}
if (_managerVehicle->fixedWing()) {
if (_planCreators->count() == 4) {
- _planCreators->removeAt(_planCreators->count() - 2);
+ _planCreators->removeAt(_planCreators->count() - 1);
}
} else {
if (_planCreators->count() != 4) {
- _planCreators->insert(_planCreators->count() - 1, new StructureScanPlanCreator(this, this));
+ _planCreators->append(new StructureScanPlanCreator(this, this));
}
}
}
diff --git a/src/MissionManager/StructureScanPlanCreator.png b/src/MissionManager/StructureScanPlanCreator.png
index ac9f1bf5c26dd091a0f6112c1a69da6381bdb944..e43c41600cd3d312d946145cdd6ffd195fe70929 100644
Binary files a/src/MissionManager/StructureScanPlanCreator.png and b/src/MissionManager/StructureScanPlanCreator.png differ
diff --git a/src/MissionManager/SurveyPlanCreator.png b/src/MissionManager/SurveyPlanCreator.png
index 5ca4e15b193bd42d7f2e0dfafeb2cab80a3f2069..e2163ea43243f52cde4296d242874dddf3f676f2 100644
Binary files a/src/MissionManager/SurveyPlanCreator.png and b/src/MissionManager/SurveyPlanCreator.png differ
diff --git a/src/PlanView/PlanStartOverlay.qml b/src/PlanView/PlanStartOverlay.qml
deleted file mode 100644
index 6475f5ad5370e87bf14021c159b1aedd8b22d898..0000000000000000000000000000000000000000
--- a/src/PlanView/PlanStartOverlay.qml
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
- *
- * (c) 2009-2016 QGROUNDCONTROL PROJECT
- *
- * QGroundControl is licensed according to the terms in the file
- * COPYING.md in the root of the source code directory.
- *
- ****************************************************************************/
-
-import QtQuick 2.3
-import QtQuick.Controls 2.4
-import QtQuick.Layouts 1.2
-
-import QGroundControl 1.0
-import QGroundControl.ScreenTools 1.0
-import QGroundControl.Controls 1.0
-import QGroundControl.Palette 1.0
-
-Item {
- id: _root
-
- property var planMasterController
- property var mapControl
-
- property real _radius: ScreenTools.defaultFontPixelWidth / 2
- property real _margins: ScreenTools.defaultFontPixelWidth
-
- function _mapCenter() {
- var centerPoint = Qt.point(mapControl.centerViewport.left + (mapControl.centerViewport.width / 2), mapControl.centerViewport.top + (mapControl.centerViewport.height / 2))
- return mapControl.toCoordinate(centerPoint, false /* clipToViewPort */)
- }
-
- QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
-
- Rectangle {
- anchors.fill: parent
- radius: _radius
- color: "white"
- opacity: 0.75
- }
-
- // Close Icon
- QGCColoredImage {
- anchors.margins: ScreenTools.defaultFontPixelWidth / 2
- anchors.top: parent.top
- anchors.right: parent.right
- width: ScreenTools.defaultFontPixelHeight
- height: width
- sourceSize.height: width
- source: "/res/XDelete.svg"
- fillMode: Image.PreserveAspectFit
- mipmap: true
- smooth: true
- color: "black"
- QGCMouseArea {
- fillItem: parent
- onClicked: _root.visible = false
- }
- }
-
- QGCLabel {
- id: title
- anchors.left: parent.left
- anchors.right: parent.right
- horizontalAlignment: Text.AlignHCenter
- text: qsTr("Create Plan")
- color: "black"
- }
-
- QGCFlickable {
- id: flickable
- anchors.margins: _margins
- anchors.top: title.bottom
- anchors.bottom: parent.bottom
- anchors.left: parent.left
- anchors.right: parent.right
- contentHeight: creatorFlow.height
- contentWidth: creatorFlow.width
-
- Flow {
- id: creatorFlow
- width: flickable.width
- spacing: _margins
-
- Repeater {
- model: _planMasterController.planCreators
-
- Rectangle {
- id: button
- width: ScreenTools.defaultFontPixelHeight * 10
- height: width
- color: button.pressed || button.highlighted ? qgcPal.buttonHighlight : qgcPal.button
-
- property bool highlighted: mouseArea.containsMouse
- property bool pressed: mouseArea.pressed
-
- Image {
- anchors.margins: _margins
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- source: object.imageResource
- fillMode: Image.PreserveAspectFit
- mipmap: true
- }
-
- QGCLabel {
- anchors.margins: _margins
- anchors.bottom: parent.bottom
- anchors.left: parent.left
- anchors.right: parent.right
- horizontalAlignment: Text.AlignHCenter
- text: object.name
- color: button.pressed || button.highlighted ? qgcPal.buttonHighlightText : qgcPal.buttonText
- }
-
- QGCMouseArea {
- id: mouseArea
- anchors.fill: parent
- hoverEnabled: true
- preventStealing: true
- onClicked: { object.createPlan(_mapCenter()); _root.visible = false }
- }
- }
- }
- }
- }
-}
diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml
index 19acdbfecd834680de6512a5dd10fcc9519e851c..9995a66bccd8a8aeae6c4cbfaede6cd7f964b27e 100644
--- a/src/PlanView/PlanView.qml
+++ b/src/PlanView/PlanView.qml
@@ -28,6 +28,7 @@ import QGroundControl.Airspace 1.0
import QGroundControl.Airmap 1.0
Item {
+ id: _root
property bool planControlColapsed: false
@@ -110,6 +111,12 @@ Item {
}
}
+ onVisibleChanged: {
+ if (visible && !_planMasterController.containsItems) {
+ toolStrip.simulateClick(toolStrip.fileButtonIndex)
+ }
+ }
+
Connections {
target: _appSettings ? _appSettings.defaultMissionItemAltitude : null
onRawValueChanged: {
@@ -330,7 +337,7 @@ Item {
if (retList[0] == ShapeFileHelper.Error) {
mainWindow.showMessageDialog("Error", retList[1])
} else if (retList[0] == ShapeFileHelper.Polygon) {
- var editVehicle = activeVehicle ? activeVehicle : QGroundControl.multiVehicleManager.offlineEditingVehicle
+ var editVehicle = activeVehicle ? activeVehicle : QGroundControl.multiVehicleManager.offlineEditingVehicle
if (editVehicle.fixedWing) {
insertComplexMissionItemFromKMLOrSHP(_missionController.surveyComplexItemName, file, -1)
} else {
@@ -476,18 +483,6 @@ Item {
}
}
- PlanStartOverlay {
- id: startOverlay
- x: editorMap.centerViewport.left
- y: editorMap.centerViewport.top
- width: editorMap.centerViewport.width
- height: editorMap.centerViewport.height
- z: QGroundControl.zOrderMapItems + 2
- visible: !_planMasterController.containsItems
- planMasterController: _planMasterController
- mapControl: editorMap
- }
-
// Add the mission item visuals to the map
Repeater {
model: _editingLayer == _layerMission ? _missionController.visualItems : undefined
@@ -609,6 +604,8 @@ Item {
z: QGroundControl.zOrderWidgets
maxHeight: mapScale.y - toolStrip.y
+ property int fileButtonIndex: 1
+
property bool _isRally: _editingLayer == _layerRallyPoints
model: [
@@ -939,19 +936,14 @@ Item {
}
}
+ property var createPlanRemoveAllPromptDialogMapCenter
+ property var createPlanRemoveAllPromptDialogPlanCreator
Component {
- id: removeAllPromptDialog
+ id: createPlanRemoveAllPromptDialog
QGCViewMessage {
- message: qsTr("Are you sure you want to remove all items and create a new plan? ") +
- (_planMasterController.offline ? "" : qsTr("This will also remove all items from the vehicle."))
+ message: qsTr("Are you sure you want to remove current plan and create a new plan? ")
function accept() {
- if (_planMasterController.offline) {
- _planMasterController.removeAll()
- } else {
- _planMasterController.removeAllFromVehicle()
- }
- _missionController.setCurrentPlanViewIndex(0, true)
- startOverlay.visible = true
+ createPlanRemoveAllPromptDialogPlanCreator.createPlan(createPlanRemoveAllPromptDialogMapCenter)
hideDialog()
}
}
@@ -964,7 +956,6 @@ Item {
function accept() {
_planMasterController.removeAllFromVehicle()
_missionController.setCurrentPlanViewIndex(0, true)
- startOverlay.visible = true
hideDialog()
}
}
@@ -1027,42 +1018,113 @@ Item {
Component {
id: syncDropPanel
- Column {
+ ColumnLayout {
id: columnHolder
spacing: _margin
property string _overwriteText: (_editingLayer == _layerMission) ? qsTr("Mission overwrite") : ((_editingLayer == _layerGeoFence) ? qsTr("GeoFence overwrite") : qsTr("Rally Points overwrite"))
QGCLabel {
- width: sendSaveGrid.width
- wrapMode: Text.WordWrap
- text: _planMasterController.dirty ?
- (activeVehicle ?
- qsTr("You have unsaved changes. You should upload to your vehicle, or save to a file:") :
- qsTr("You have unsaved changes.")
- ) :
- qsTr("Plan File:")
+ Layout.fillWidth: true
+ wrapMode: Text.WordWrap
+ text: activeVehicle ?
+ qsTr("You have unsaved changes. You should upload to your vehicle, or save to a file.") :
+ qsTr("You have unsaved changes.")
+ visible: _planMasterController.dirty
+ }
+
+ SectionHeader {
+ id: createSection
+ Layout.fillWidth: true
+ text: qsTr("Create Plan")
}
GridLayout {
- id: sendSaveGrid
columns: 2
- anchors.margins: _margin
+ columnSpacing: _margin
+ rowSpacing: _margin
+ Layout.fillWidth: true
+ visible: createSection.visible
+
+ Repeater {
+ model: _planMasterController.planCreators
+
+ Rectangle {
+ id: button
+ width: ScreenTools.defaultFontPixelHeight * 7
+ height: planCreatorNameLabel.y + planCreatorNameLabel.height
+ color: button.pressed || button.highlighted ? qgcPal.buttonHighlight : qgcPal.button
+
+ property bool highlighted: mouseArea.containsMouse
+ property bool pressed: mouseArea.pressed
+
+ Image {
+ id: planCreatorImage
+ anchors.left: parent.left
+ anchors.right: parent.right
+ source: object.imageResource
+ sourceSize.width: width
+ fillMode: Image.PreserveAspectFit
+ mipmap: true
+ }
+
+ QGCLabel {
+ id: planCreatorNameLabel
+ anchors.top: planCreatorImage.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ horizontalAlignment: Text.AlignHCenter
+ text: object.name
+ color: button.pressed || button.highlighted ? qgcPal.buttonHighlightText : qgcPal.buttonText
+ }
+
+ QGCMouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ hoverEnabled: true
+ preventStealing: true
+ onClicked: {
+ if (_planMasterController.containsItems) {
+ createPlanRemoveAllPromptDialogMapCenter = _mapCenter()
+ createPlanRemoveAllPromptDialogPlanCreator = object
+ mainWindow.showComponentDialog(createPlanRemoveAllPromptDialog, qsTr("Create Plan"), mainWindow.showDialogDefaultWidth, StandardButton.Yes | StandardButton.No)
+ } else {
+ object.createPlan(_mapCenter())
+ }
+ dropPanel.hide()
+ }
+
+ function _mapCenter() {
+ var centerPoint = Qt.point(editorMap.centerViewport.left + (editorMap.centerViewport.width / 2), editorMap.centerViewport.top + (editorMap.centerViewport.height / 2))
+ return editorMap.toCoordinate(centerPoint, false /* clipToViewPort */)
+ }
+ }
+ }
+ }
+ }
+
+ SectionHeader {
+ id: storageSection
+ Layout.fillWidth: true
+ text: qsTr("Storage")
+ }
+
+ GridLayout {
+ columns: 3
rowSpacing: _margin
columnSpacing: ScreenTools.defaultFontPixelWidth
+ visible: storageSection.visible
- QGCButton {
+ /*QGCButton {
text: qsTr("New...")
Layout.fillWidth: true
onClicked: {
dropPanel.hide()
if (_planMasterController.containsItems) {
mainWindow.showComponentDialog(removeAllPromptDialog, qsTr("New Plan"), mainWindow.showDialogDefaultWidth, StandardButton.Yes | StandardButton.No)
- } else {
- startOverlay.visible = true
}
}
- }
+ }*/
QGCButton {
text: qsTr("Open...")
@@ -1103,8 +1165,9 @@ Item {
}
QGCButton {
+ Layout.columnSpan: 3
+ Layout.fillWidth: true
text: qsTr("Save Mission Waypoints As KML...")
- Layout.columnSpan: 2
enabled: !_planMasterController.syncInProgress && _visualItems.count > 1
onClicked: {
// First point does not count
@@ -1116,16 +1179,18 @@ Item {
_planMasterController.saveKmlToSelectedFile()
}
}
+ }
- Rectangle {
- width: parent.width * 0.8
- height: 1
- color: qgcPal.text
- opacity: 0.5
- visible: !QGroundControl.corePlugin.options.disableVehicleConnection
- Layout.fillWidth: true
- Layout.columnSpan: 2
- }
+ SectionHeader {
+ id: vehicleSection
+ Layout.fillWidth: true
+ text: qsTr("Vehicle")
+ }
+
+ RowLayout {
+ Layout.fillWidth: true
+ spacing: _margin
+ visible: vehicleSection.visible
QGCButton {
text: qsTr("Upload")
@@ -1154,7 +1219,7 @@ Item {
}
QGCButton {
- text: qsTr("Clear Vehicle Mission")
+ text: qsTr("Clear")
Layout.fillWidth: true
Layout.columnSpan: 2
enabled: !_planMasterController.offline && !_planMasterController.syncInProgress
@@ -1164,8 +1229,9 @@ Item {
mainWindow.showComponentDialog(clearVehicleMissionDialog, text, mainWindow.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel)
}
}
-
}
+
+
}
}
}
diff --git a/src/QmlControls/QGroundControl/Controls/qmldir b/src/QmlControls/QGroundControl/Controls/qmldir
index 8d3abf8b978a55fef6836b857c163d878045c1f2..fae59ca2d0aa2dbf6937ea1a1ba846b3c7feffae 100644
--- a/src/QmlControls/QGroundControl/Controls/qmldir
+++ b/src/QmlControls/QGroundControl/Controls/qmldir
@@ -40,7 +40,6 @@ ParameterEditor 1.0 ParameterEditor.qml
ParameterEditorDialog 1.0 ParameterEditorDialog.qml
PIDTuning 1.0 PIDTuning.qml
PlanEditToolbar 1.0 PlanEditToolbar.qml
-PlanStartOverlay 1.0 PlanStartOverlay.qml
PreFlightCheckButton 1.0 PreFlightCheckButton.qml
PreFlightCheckGroup 1.0 PreFlightCheckGroup.qml
PreFlightCheckModel 1.0 PreFlightCheckModel.qml