5 changed files with 229 additions and 0 deletions
@ -0,0 +1,41 @@ |
|||||||
|
/**************************************************************************** |
||||||
|
* |
||||||
|
* (c) 2009-2020 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.12 |
||||||
|
|
||||||
|
Item { |
||||||
|
width: childrenRect.width |
||||||
|
height: childrenRect.height |
||||||
|
|
||||||
|
signal hideDialog |
||||||
|
|
||||||
|
Keys.onReleased: { |
||||||
|
if (event.key === Qt.Key_Escape) { |
||||||
|
reject() |
||||||
|
event.accepted = true |
||||||
|
} else if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) { |
||||||
|
accept() |
||||||
|
event.accepted = true |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function accept() { |
||||||
|
if (acceptAllowed) { |
||||||
|
Qt.inputMethod.hide() |
||||||
|
hideDialog() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function reject() { |
||||||
|
if (rejectAllowed) { |
||||||
|
Qt.inputMethod.hide() |
||||||
|
hideDialog() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,174 @@ |
|||||||
|
/**************************************************************************** |
||||||
|
* |
||||||
|
* (c) 2009-2020 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.12 |
||||||
|
import QtQuick.Controls 2.4 |
||||||
|
import QtQuick.Layouts 1.12 |
||||||
|
import QtQuick.Dialogs 1.3 |
||||||
|
|
||||||
|
import QGroundControl 1.0 |
||||||
|
import QGroundControl.Controls 1.0 |
||||||
|
import QGroundControl.Palette 1.0 |
||||||
|
import QGroundControl.ScreenTools 1.0 |
||||||
|
|
||||||
|
Popup { |
||||||
|
anchors.centerIn: parent |
||||||
|
width: mainFlickable.width |
||||||
|
height: mainFlickable.height |
||||||
|
padding: 0 |
||||||
|
modal: true |
||||||
|
focus: true |
||||||
|
|
||||||
|
background: Rectangle { |
||||||
|
color: QGroundControl.globalPalette.window |
||||||
|
} |
||||||
|
|
||||||
|
property string title |
||||||
|
property var buttons |
||||||
|
property var dialogComponent |
||||||
|
|
||||||
|
property real _contentMargin: ScreenTools.defaultFontPixelHeight / 2 |
||||||
|
property real _popupDoubleInset: ScreenTools.defaultFontPixelHeight * 2 |
||||||
|
property real _maxAvailableWidth: parent.width - _popupDoubleInset |
||||||
|
property real _maxAvailableHeight: parent.height - _popupDoubleInset |
||||||
|
|
||||||
|
Component.onCompleted: setupDialogButtons() |
||||||
|
|
||||||
|
QGCPalette { id: qgcPal; colorGroupEnabled: parent.enabled } |
||||||
|
|
||||||
|
function setupDialogButtons() { |
||||||
|
acceptButton.visible = false |
||||||
|
rejectButton.visible = false |
||||||
|
// Accept role buttons |
||||||
|
if (buttons & StandardButton.Ok) { |
||||||
|
acceptButton.text = qsTr("Ok") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Open) { |
||||||
|
acceptButton.text = qsTr("Open") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Save) { |
||||||
|
acceptButton.text = qsTr("Save") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Apply) { |
||||||
|
acceptButton.text = qsTr("Apply") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Open) { |
||||||
|
acceptButton.text = qsTr("Open") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.SaveAll) { |
||||||
|
acceptButton.text = qsTr("Save All") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Yes) { |
||||||
|
acceptButton.text = qsTr("Yes") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.YesToAll) { |
||||||
|
acceptButton.text = qsTr("Yes to All") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Retry) { |
||||||
|
acceptButton.text = qsTr("Retry") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Reset) { |
||||||
|
acceptButton.text = qsTr("Reset") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.RestoreToDefaults) { |
||||||
|
acceptButton.text = qsTr("Restore to Defaults") |
||||||
|
acceptButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Ignore) { |
||||||
|
acceptButton.text = qsTr("Ignore") |
||||||
|
acceptButton.visible = true |
||||||
|
} |
||||||
|
|
||||||
|
// Reject role buttons |
||||||
|
if (buttons & StandardButton.Cancel) { |
||||||
|
rejectButton.text = qsTr("Cancel") |
||||||
|
rejectButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Close) { |
||||||
|
rejectButton.text = qsTr("Close") |
||||||
|
rejectButton.visible = true |
||||||
|
} else if (buttons & StandardButton.No) { |
||||||
|
rejectButton.text = qsTr("No") |
||||||
|
rejectButton.visible = true |
||||||
|
} else if (buttons & StandardButton.NoToAll) { |
||||||
|
rejectButton.text = qsTr("No to All") |
||||||
|
rejectButton.visible = true |
||||||
|
} else if (buttons & StandardButton.Abort) { |
||||||
|
rejectButton.text = qsTr("Abort") |
||||||
|
rejectButton.visible = true |
||||||
|
} |
||||||
|
|
||||||
|
if (rejectButton.visible) { |
||||||
|
closePolicy = Popup.NoAutoClose | Popup.CloseOnEscape |
||||||
|
} else { |
||||||
|
closePolicy = Popup.NoAutoClose |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Connections { |
||||||
|
target: dialogComponentLoader.item |
||||||
|
onHideDialog: close() |
||||||
|
} |
||||||
|
|
||||||
|
QGCFlickable { |
||||||
|
id: mainFlickable |
||||||
|
width: Math.min(mainColumnLayout.width, _maxAvailableWidth) |
||||||
|
height: Math.min(mainColumnLayout.height, _maxAvailableHeight) |
||||||
|
contentWidth: mainColumnLayout.width |
||||||
|
contentHeight: mainColumnLayout.height |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
width: titleRowLayout.width |
||||||
|
height: titleRowLayout.height |
||||||
|
color: qgcPal.windowShade |
||||||
|
} |
||||||
|
|
||||||
|
ColumnLayout { |
||||||
|
id: mainColumnLayout |
||||||
|
spacing: _contentMargin |
||||||
|
|
||||||
|
RowLayout { |
||||||
|
id: titleRowLayout |
||||||
|
Layout.fillWidth: true |
||||||
|
|
||||||
|
QGCLabel { |
||||||
|
Layout.leftMargin: ScreenTools.defaultFontPixelWidth |
||||||
|
Layout.fillWidth: true |
||||||
|
text: title |
||||||
|
height: parent.height |
||||||
|
verticalAlignment: Text.AlignVCenter |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
id: rejectButton |
||||||
|
onClicked: dialogComponentLoader.item.reject() |
||||||
|
} |
||||||
|
|
||||||
|
QGCButton { |
||||||
|
id: acceptButton |
||||||
|
primary: true |
||||||
|
onClicked: dialogComponentLoader.item.accept() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Item { |
||||||
|
id: item |
||||||
|
width: dialogComponentLoader.width + (_contentMargin * 2) |
||||||
|
height: dialogComponentLoader.height + _contentMargin |
||||||
|
|
||||||
|
Loader { |
||||||
|
id: dialogComponentLoader |
||||||
|
x: _contentMargin |
||||||
|
sourceComponent: dialogComponent |
||||||
|
focus: true |
||||||
|
property bool acceptAllowed: acceptButton.visible |
||||||
|
property bool rejectAllowed: rejectButton.visible |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue