diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index e611bc24437b9990df83b279040248dead77d67d..ccabc9be31c3c8ebd738baa43a49810da4170be0 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -32,6 +32,8 @@ src/QmlControls/VehicleSummaryRow.qml src/QmlControls/arrow-down.png src/ViewWidgets/ViewWidget.qml + src/QmlControls/ViewWithDialog.qml + src/QmlControls/ParameterEditor.qml src/ViewWidgets/ParameterEditorWidget.qml diff --git a/src/QmlControls/ViewWithDialog.qml b/src/QmlControls/ViewWithDialog.qml new file mode 100644 index 0000000000000000000000000000000000000000..61d64c41bbaffb4c7b3c0a5eded26a3af23570d8 --- /dev/null +++ b/src/QmlControls/ViewWithDialog.qml @@ -0,0 +1,221 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2015 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +/// @file +/// @author Don Gagne + +import QtQuick 2.3 +import QtQuick.Controls 1.3 +import QtQuick.Dialogs 1.2 + +import QGroundControl.Controls 1.0 +import QGroundControl.Palette 1.0 +import QGroundControl.ScreenTools 1.0 +import QGroundControl.FactSystem 1.0 +import QGroundControl.FactControls 1.0 + +Item { + property Component viewComponent + + function __showDialog(component, title, charWidth, buttons) { + __acceptButton.visible = false + __rejectButton.visible = false + __dialogCharWidth = charWidth + __dialogTitle = title + + if (buttons & StandardButton.Ok) { + __acceptButton.text = "Ok" + __acceptButton.visible = true + } else if (buttons & StandardButton.Open) { + __acceptButton.text = "Open" + __acceptButton.visible = true + } else if (buttons & StandardButton.Save) { + __acceptButton.text = "Save" + __acceptButton.visible = true + } else if (buttons & StandardButton.Cancel) { + __rejectButton.text = "Cancel" + __rejectButton.visible = true + } else if (buttons & StandardButton.Close) { + __rejectButton.text = "Cancel" + __rejectButton.visible = true + } else if (buttons & StandardButton.Apply) { + __acceptButton.text = "Apply" + __acceptButton.visible = true + } else if (buttons & StandardButton.Open) { + __acceptButton.text = "Open" + __acceptButton.visible = true + } else if (buttons & StandardButton.SaveAll) { + __acceptButton.text = "Save All" + __acceptButton.visible = true + } else if (buttons & StandardButton.Yes) { + __acceptButton.text = "Yes" + __acceptButton.visible = true + } else if (buttons & StandardButton.YesToAll) { + __acceptButton.text = "Yes to All" + __acceptButton.visible = true + } else if (buttons & StandardButton.No) { + __rejectButton.text = "No" + __rejectButton.visible = true + } else if (buttons & StandardButton.NoToAll) { + __rejectButton.text = "No to All" + __rejectButton.visible = true + } else if (buttons & StandardButton.Abort) { + __rejectButton.text = "Abort" + __rejectButton.visible = true + } else if (buttons & StandardButton.Retry) { + __acceptButton.text = "Retry" + __acceptButton.visible = true + } else if (buttons & StandardButton.Reset) { + __acceptButton.text = "Reset" + __acceptButton.visible = true + } else if (buttons & StandardButton.RestoreToDefaults) { + __acceptButton.text = "Restore to Defaults" + __acceptButton.visible = true + } else if (buttons & StandardButton.Ignore) { + __acceptButton.text = "Ignore" + __acceptButton.visible = true + } + __dialogComponent = component + __viewPanel.enabled = false + __dialogOverlay.visible = true + } + + function __hideDialog() { + __dialogComponent = null + __viewPanel.enabled = true + __dialogOverlay.visible = false + } + + QGCPalette { id: __qgcPal; colorGroupEnabled: true } + QGCLabel { id: __textMeasure; text: "X"; visible: false } + + property real __textHeight: __textMeasure.contentHeight + property real __textWidth: __textMeasure.contentWidth + + /// The width of the dialog panel in characters + property int __dialogCharWidth: 75 + + /// The title for the dialog panel + property string __dialogTitle + + property Component __dialogComponent + + Component.onCompleted: __viewPanel.item.doWorkAfterComponentCompleted() + + Connections { + target: __viewPanel.item + + onShowDialog: __showDialog(component, title, charWidth, buttons) + onHideDialog: __hideDialog() + } + + Connections { + target: __dialogComponentLoader.item + + onHideDialog: __hideDialog() + } + + Loader { + id: __viewPanel + anchors.fill: parent + focus: true + sourceComponent: viewComponent + } + + Item { + id: __dialogOverlay + visible: false + anchors.fill: parent + z: 5000 + + // This covers the parent with an transparent section + Rectangle { + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: __dialogPanel.left + opacity: 0.80 + color: __qgcPal.window + } + + // This is the main dialog panel which is anchored to the right edge + Rectangle { + id: __dialogPanel + width: __textWidth * __dialogCharWidth + height: parent.height + anchors.right: parent.right + color: __qgcPal.windowShadeDark + + Rectangle { + id: __header + width: parent.width + height: __acceptButton.height + color: __qgcPal.windowShade + + function __hidePanel() { + __fullPanel.visible = false + } + + QGCLabel { + x: __textWidth + height: parent.height + verticalAlignment: Text.AlignVCenter + text: __dialogTitle + } + + QGCButton { + id: __rejectButton + anchors.right: __acceptButton.left + anchors.bottom: parent.bottom + + onClicked: __dialogComponentLoader.item.reject() + } + + QGCButton { + id: __acceptButton + anchors.right: parent.right + primary: true + + onClicked: __dialogComponentLoader.item.accept() + } + } + + Item { + id: __spacer + width: 10 + height: 10 + anchors.top: __header.bottom + } + + Loader { + id: __dialogComponentLoader + anchors.margins: 5 + anchors.left: parent.left + anchors.right: parent.right + anchors.top: __spacer.bottom + anchors.bottom: parent.bottom + sourceComponent: __dialogComponent + } + } // Rectangle - Dialog panel + } // Item - Dialog overlay +} \ No newline at end of file diff --git a/src/QmlControls/qmldir b/src/QmlControls/qmldir index b62af1bcbd73ebb6588a628c0514fd3f90f65902..a588343b36f613226ad807df77765cea3020797e 100644 --- a/src/QmlControls/qmldir +++ b/src/QmlControls/qmldir @@ -16,4 +16,5 @@ VehicleRotationCal 1.0 VehicleRotationCal.qml VehicleSummaryRow 1.0 VehicleSummaryRow.qml ParameterEditor 1.0 ParameterEditor.qml ViewWidget 1.0 ViewWidget.qml +ViewWithDialog 1.0 ViewWithDialog.qml