Browse Source

Merge pull request #8013 from DonLakeFlyer/CreatePlan

Plan: Create Plan
QGC4.4
Don Gagne 6 years ago committed by GitHub
parent
commit
a1cf6a3b79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      qgcimages.qrc
  2. 4
      qgroundcontrol.pro
  3. 1
      qgroundcontrol.qrc
  4. 24
      src/MissionManager/BlankPlanCreator.cc
  5. 4
      src/MissionManager/BlankPlanCreator.h
  6. BIN
      src/MissionManager/BlankPlanCreator.png
  7. BIN
      src/MissionManager/CorridorScanPlanCreator.png
  8. 38
      src/MissionManager/CustomPlanCreator.cc
  9. BIN
      src/MissionManager/CustomPlanCreator.png
  10. 8
      src/MissionManager/PlanMasterController.cc
  11. BIN
      src/MissionManager/StructureScanPlanCreator.png
  12. BIN
      src/MissionManager/SurveyPlanCreator.png
  13. 2
      src/PlanView/CameraSection.qml
  14. 20
      src/PlanView/CorridorScanEditor.qml
  15. 20
      src/PlanView/FWLandingPatternEditor.qml
  16. 24
      src/PlanView/GeoFenceEditor.qml
  17. 28
      src/PlanView/MissionSettingsEditor.qml
  18. 128
      src/PlanView/PlanStartOverlay.qml
  19. 170
      src/PlanView/PlanView.qml
  20. 12
      src/PlanView/StructureScanEditor.qml
  21. 28
      src/PlanView/SurveyItemEditor.qml
  22. 2
      src/QmlControls/ParameterEditor.qml
  23. 6
      src/QmlControls/PreFlightCheckGroup.qml
  24. 1
      src/QmlControls/QGroundControl/Controls/qmldir
  25. 6
      src/QmlControls/SectionHeader.qml
  26. 7
      src/QmlControls/ToolStrip.qml

2
qgcimages.qrc

@ -127,7 +127,7 @@ @@ -127,7 +127,7 @@
<file alias="pipHide.svg">src/FlightMap/Images/pipHide.svg</file>
<file alias="pipResize.svg">src/FlightMap/Images/pipResize.svg</file>
<file alias="Plan.svg">src/ui/toolbar/Images/Plan.svg</file>
<file alias="PlanCreator/CustomPlanCreator.png">src/MissionManager/CustomPlanCreator.png</file>
<file alias="PlanCreator/BlankPlanCreator.png">src/MissionManager/BlankPlanCreator.png</file>
<file alias="PlanCreator/CorridorScanPlanCreator.png">src/MissionManager/CorridorScanPlanCreator.png</file>
<file alias="PlanCreator/StructureScanPlanCreator.png">src/MissionManager/StructureScanPlanCreator.png</file>
<file alias="PlanCreator/SurveyPlanCreator.png">src/MissionManager/SurveyPlanCreator.png</file>

4
qgroundcontrol.pro

@ -592,7 +592,7 @@ HEADERS += \ @@ -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 += \ @@ -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 \

1
qgroundcontrol.qrc

@ -102,7 +102,6 @@ @@ -102,7 +102,6 @@
<file alias="QGroundControl/Controls/ParameterEditorDialog.qml">src/QmlControls/ParameterEditorDialog.qml</file>
<file alias="QGroundControl/Controls/PIDTuning.qml">src/QmlControls/PIDTuning.qml</file>
<file alias="QGroundControl/Controls/PlanEditToolbar.qml">src/PlanView/PlanEditToolbar.qml</file>
<file alias="QGroundControl/Controls/PlanStartOverlay.qml">src/PlanView/PlanStartOverlay.qml</file>
<file alias="QGroundControl/Controls/PreFlightCheckButton.qml">src/QmlControls/PreFlightCheckButton.qml</file>
<file alias="QGroundControl/Controls/PreFlightCheckGroup.qml">src/QmlControls/PreFlightCheckGroup.qml</file>
<file alias="QGroundControl/Controls/PreFlightCheckModel.qml">src/QmlControls/PreFlightCheckModel.qml</file>

24
src/MissionManager/BlankPlanCreator.cc

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
/****************************************************************************
*
* (c) 2009-2016 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.
*
****************************************************************************/
#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();
}

4
src/MissionManager/CustomPlanCreator.h → src/MissionManager/BlankPlanCreator.h

@ -11,12 +11,12 @@ @@ -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;
};

BIN
src/MissionManager/BlankPlanCreator.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

BIN
src/MissionManager/CorridorScanPlanCreator.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 KiB

After

Width:  |  Height:  |  Size: 1012 KiB

38
src/MissionManager/CustomPlanCreator.cc

@ -1,38 +0,0 @@ @@ -1,38 +0,0 @@
/****************************************************************************
*
* (c) 2009-2016 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.
*
****************************************************************************/
#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<FixedWingLandingComplexItem*>(_missionController->insertComplexMissionItem(MissionController::patternFWLandingName, mapCenterCoord, -1));
landingItem->setWizardMode(true);
landingItem->setLoiterDragAngleOnly(true);
} else {
MissionSettingsItem* settingsItem = _missionController->visualItems()->value<MissionSettingsItem*>(0);
settingsItem->setMissionEndRTL(true);
}
_missionController->setCurrentPlanViewIndex(takeoffItem->sequenceNumber(), true);
}

BIN
src/MissionManager/CustomPlanCreator.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 KiB

8
src/MissionManager/PlanMasterController.cc

@ -19,7 +19,7 @@ @@ -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) @@ -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));
}
}
}

BIN
src/MissionManager/StructureScanPlanCreator.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 494 KiB

After

Width:  |  Height:  |  Size: 670 KiB

BIN
src/MissionManager/SurveyPlanCreator.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

After

Width:  |  Height:  |  Size: 617 KiB

2
src/PlanView/CameraSection.qml

@ -24,6 +24,8 @@ Column { @@ -24,6 +24,8 @@ Column {
SectionHeader {
id: cameraSectionHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Camera")
checked: false
}

20
src/PlanView/CorridorScanEditor.qml

@ -124,8 +124,10 @@ Rectangle { @@ -124,8 +124,10 @@ Rectangle {
}
SectionHeader {
id: corridorHeader
text: qsTr("Corridor")
id: corridorHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Corridor")
}
GridLayout {
@ -182,9 +184,11 @@ Rectangle { @@ -182,9 +184,11 @@ Rectangle {
}
SectionHeader {
id: terrainHeader
text: qsTr("Terrain")
checked: missionItem.followTerrain
id: terrainHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Terrain")
checked: missionItem.followTerrain
}
ColumnLayout {
@ -228,8 +232,10 @@ Rectangle { @@ -228,8 +232,10 @@ Rectangle {
}
SectionHeader {
id: statsHeader
text: qsTr("Statistics")
id: statsHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Statistics")
}
TransectStyleComplexItemStats { }

20
src/PlanView/FWLandingPatternEditor.qml

@ -52,8 +52,10 @@ Rectangle { @@ -52,8 +52,10 @@ Rectangle {
visible: !editorColumnNeedLandingPoint.visible
SectionHeader {
id: loiterPointSection
text: qsTr("Loiter point")
id: loiterPointSection
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Loiter point")
}
Column {
@ -101,8 +103,10 @@ Rectangle { @@ -101,8 +103,10 @@ Rectangle {
}
SectionHeader {
id: landingPointSection
text: qsTr("Landing point")
id: landingPointSection
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Landing point")
}
Column {
@ -181,9 +185,11 @@ Rectangle { @@ -181,9 +185,11 @@ Rectangle {
}
SectionHeader {
id: cameraSection
text: qsTr("Camera")
visible: _showCameraSection
id: cameraSection
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Camera")
visible: _showCameraSection
}
Column {

24
src/PlanView/GeoFenceEditor.qml

@ -110,8 +110,10 @@ QGCFlickable { @@ -110,8 +110,10 @@ QGCFlickable {
}
SectionHeader {
id: insertSection
text: qsTr("Insert GeoFence")
id: insertSection
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Insert GeoFence")
}
QGCButton {
@ -139,8 +141,10 @@ QGCFlickable { @@ -139,8 +141,10 @@ QGCFlickable {
}
SectionHeader {
id: polygonSection
text: qsTr("Polygon Fences")
id: polygonSection
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Polygon Fences")
}
QGCLabel {
@ -212,8 +216,10 @@ QGCFlickable { @@ -212,8 +216,10 @@ QGCFlickable {
} // GridLayout
SectionHeader {
id: circleSection
text: qsTr("Circular Fences")
id: circleSection
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Circular Fences")
}
QGCLabel {
@ -302,8 +308,10 @@ QGCFlickable { @@ -302,8 +308,10 @@ QGCFlickable {
} // GridLayout
SectionHeader {
id: breachReturnSection
text: qsTr("Breach Return Point")
id: breachReturnSection
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Breach Return Point")
}
QGCButton {

28
src/PlanView/MissionSettingsEditor.qml

@ -108,9 +108,11 @@ Rectangle { @@ -108,9 +108,11 @@ Rectangle {
}
SectionHeader {
id: missionEndHeader
text: qsTr("Mission End")
checked: true
id: missionEndHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Mission End")
checked: true
}
Column {
@ -128,10 +130,12 @@ Rectangle { @@ -128,10 +130,12 @@ Rectangle {
SectionHeader {
id: vehicleInfoSectionHeader
text: qsTr("Vehicle Info")
visible: _offlineEditing && !_waypointsOnlyMode
checked: false
id: vehicleInfoSectionHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Vehicle Info")
visible: _offlineEditing && !_waypointsOnlyMode
checked: false
}
GridLayout {
@ -192,10 +196,12 @@ Rectangle { @@ -192,10 +196,12 @@ Rectangle {
} // GridLayout
SectionHeader {
id: plannedHomePositionSection
text: qsTr("Planned Home Position")
visible: !_vehicleHasHomePosition
checked: false
id: plannedHomePositionSection
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Planned Home Position")
visible: !_vehicleHasHomePosition
checked: false
}
Column {

128
src/PlanView/PlanStartOverlay.qml

@ -1,128 +0,0 @@ @@ -1,128 +0,0 @@
/****************************************************************************
*
* (c) 2009-2016 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.
*
****************************************************************************/
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 }
}
}
}
}
}
}

170
src/PlanView/PlanView.qml

@ -28,6 +28,7 @@ import QGroundControl.Airspace 1.0 @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -964,7 +956,6 @@ Item {
function accept() {
_planMasterController.removeAllFromVehicle()
_missionController.setCurrentPlanViewIndex(0, true)
startOverlay.visible = true
hideDialog()
}
}
@ -1027,42 +1018,115 @@ Item { @@ -1027,42 +1018,115 @@ 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:")
id: unsavedChangedLabel
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")
showSpacer: false
}
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 +1167,9 @@ Item { @@ -1103,8 +1167,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 +1181,18 @@ Item { @@ -1116,16 +1181,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 +1221,7 @@ Item { @@ -1154,7 +1221,7 @@ Item {
}
QGCButton {
text: qsTr("Clear Vehicle Mission")
text: qsTr("Clear")
Layout.fillWidth: true
Layout.columnSpan: 2
enabled: !_planMasterController.offline && !_planMasterController.syncInProgress
@ -1164,8 +1231,9 @@ Item { @@ -1164,8 +1231,9 @@ Item {
mainWindow.showComponentDialog(clearVehicleMissionDialog, text, mainWindow.showDialogDefaultWidth, StandardButton.Yes | StandardButton.Cancel)
}
}
}
}
}
}

12
src/PlanView/StructureScanEditor.qml

@ -130,8 +130,10 @@ Rectangle { @@ -130,8 +130,10 @@ Rectangle {
}
SectionHeader {
id: scanHeader
text: qsTr("Scan")
id: scanHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Scan")
}
Column {
@ -200,8 +202,10 @@ Rectangle { @@ -200,8 +202,10 @@ Rectangle {
} // Column - Scan
SectionHeader {
id: statsHeader
text: qsTr("Statistics")
id: statsHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Statistics")
}
Grid {

28
src/PlanView/SurveyItemEditor.qml

@ -124,8 +124,10 @@ Rectangle { @@ -124,8 +124,10 @@ Rectangle {
}
SectionHeader {
id: transectsHeader
text: qsTr("Transects")
id: transectsHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Transects")
}
GridLayout {
@ -233,9 +235,11 @@ Rectangle { @@ -233,9 +235,11 @@ Rectangle {
}
SectionHeader {
id: terrainHeader
text: qsTr("Terrain")
checked: missionItem.followTerrain
id: terrainHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Terrain")
checked: missionItem.followTerrain
}
ColumnLayout {
@ -280,8 +284,10 @@ Rectangle { @@ -280,8 +284,10 @@ Rectangle {
}
SectionHeader {
id: statsHeader
text: qsTr("Statistics")
id: statsHeader
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Statistics")
}
TransectStyleComplexItemStats {
@ -357,8 +363,6 @@ Rectangle { @@ -357,8 +363,6 @@ Rectangle {
SectionHeader {
id: presectsTransectsHeader
anchors.left: undefined
anchors.right: undefined
Layout.fillWidth: true
text: qsTr("Transects")
}
@ -400,11 +404,9 @@ Rectangle { @@ -400,11 +404,9 @@ Rectangle {
}
SectionHeader {
id: presetsStatsHeader
anchors.left: undefined
anchors.right: undefined
id: presetsStatsHeader
Layout.fillWidth: true
text: qsTr("Statistics")
text: qsTr("Statistics")
}
TransectStyleComplexItemStats {

2
src/QmlControls/ParameterEditor.qml

@ -174,6 +174,8 @@ Item { @@ -174,6 +174,8 @@ Item {
SectionHeader {
id: categoryHeader
anchors.left: parent.left
anchors.right: parent.right
text: category
checked: controller.currentCategory === text
exclusiveGroup: sectionGroup

6
src/QmlControls/PreFlightCheckGroup.qml

@ -43,8 +43,10 @@ Column { @@ -43,8 +43,10 @@ Column {
}
SectionHeader {
id: header
text: name + (passed ? qsTr(" (passed)") : "")
id: header
anchors.left: parent.left
anchors.right: parent.right
text: name + (passed ? qsTr(" (passed)") : "")
}
Column {

1
src/QmlControls/QGroundControl/Controls/qmldir

@ -40,7 +40,6 @@ ParameterEditor 1.0 ParameterEditor.qml @@ -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

6
src/QmlControls/SectionHeader.qml

@ -7,10 +7,8 @@ import QGroundControl.ScreenTools 1.0 @@ -7,10 +7,8 @@ import QGroundControl.ScreenTools 1.0
import QGroundControl.Palette 1.0
FocusScope {
id: _root
anchors.left: parent.left
anchors.right: parent.right
height: column.height
id: _root
height: column.height
property alias text: label.text
property bool checked: true

7
src/QmlControls/ToolStrip.qml

@ -27,6 +27,11 @@ Rectangle { @@ -27,6 +27,11 @@ Rectangle {
property AbstractButton lastClickedButton: null
function simulateClick(buttonIndex) {
toolStripColumn.children[buttonIndex].checked = true
toolStripColumn.children[buttonIndex].clicked()
}
// Ensure we don't get narrower than content
property real _idealWidth: (ScreenTools.isMobile ? ScreenTools.minTouchPixels : ScreenTools.defaultFontPixelWidth * 8) + toolStripColumn.anchors.margins * 2
@ -73,7 +78,7 @@ Rectangle { @@ -73,7 +78,7 @@ Rectangle {
checked: modelData.checked !== undefined ? modelData.checked : checked
ButtonGroup.group: buttonGroup
// Only drop pannel and toggleable are checkable
// Only drop panel and toggleable are checkable
checkable: modelData.dropPanelComponent !== undefined || (modelData.toggle !== undefined && modelData.toggle)
onClicked: {

Loading…
Cancel
Save