You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
8.2 KiB
232 lines
8.2 KiB
/**************************************************************************** |
|
* |
|
* (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 { |
|
property var dialogComponent |
|
property string dialogSource |
|
property var dialogProperties |
|
|
|
id: _root |
|
anchors.centerIn: parent |
|
width: mainColumnLayout.width + (padding * 2) |
|
height: mainColumnLayout.y + mainColumnLayout.height + padding |
|
padding: 2 |
|
modal: true |
|
focus: true |
|
|
|
property var _pal: QGroundControl.globalPalette |
|
property real _frameSize: ScreenTools.defaultFontPixelWidth |
|
property string _dialogTitle |
|
property real _contentMargin: ScreenTools.defaultFontPixelHeight / 2 |
|
property real _popupDoubleInset: ScreenTools.defaultFontPixelHeight * 2 |
|
property real _maxContentWidth: parent.width - _popupDoubleInset |
|
property real _maxContentHeight: parent.height - titleRowLayout.height - _popupDoubleInset |
|
|
|
background: Item { |
|
Rectangle { |
|
anchors.left: parent.left |
|
anchors.top: parent.top |
|
width: _frameSize |
|
height: _frameSize |
|
color: _pal.text |
|
visible: enabled |
|
} |
|
|
|
Rectangle { |
|
anchors.right: parent.right |
|
anchors.top: parent.top |
|
width: _frameSize |
|
height: _frameSize |
|
color: _pal.text |
|
visible: enabled |
|
} |
|
|
|
Rectangle { |
|
anchors.left: parent.left |
|
anchors.bottom: parent.bottom |
|
width: _frameSize |
|
height: _frameSize |
|
color: _pal.text |
|
visible: enabled |
|
} |
|
|
|
Rectangle { |
|
anchors.right: parent.right |
|
anchors.bottom: parent.bottom |
|
width: _frameSize |
|
height: _frameSize |
|
color: _pal.text |
|
visible: enabled |
|
} |
|
|
|
Rectangle { |
|
anchors.margins: _root.padding |
|
anchors.fill: parent |
|
color: _pal.window |
|
} |
|
} |
|
|
|
Component.onCompleted: { |
|
_dialogTitle = dialogComponentLoader.item.title |
|
setupDialogButtons(dialogComponentLoader.item.buttons) |
|
} |
|
|
|
QGCPalette { id: qgcPal; colorGroupEnabled: parent.enabled } |
|
|
|
function setupDialogButtons(buttons) { |
|
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 |
|
} |
|
} |
|
|
|
function disableAcceptButton() { |
|
acceptButton.enabled = false |
|
} |
|
|
|
Connections { |
|
target: dialogComponentLoader.item |
|
onHideDialog: close() |
|
onEnableAcceptButton: acceptButton.enabled = true |
|
onEnableRejectButton: rejectButton.enabled = true |
|
onDisableAcceptButton: acceptButton.enabled = false |
|
onDisableRejectButton: rejectButton.enabled = false |
|
} |
|
|
|
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: _dialogTitle |
|
font.pointSize: ScreenTools.mediumFontPointSize |
|
verticalAlignment: Text.AlignVCenter |
|
} |
|
|
|
QGCButton { |
|
id: rejectButton |
|
onClicked: dialogComponentLoader.item.reject() |
|
} |
|
|
|
QGCButton { |
|
id: acceptButton |
|
primary: true |
|
onClicked: dialogComponentLoader.item.accept() |
|
} |
|
} |
|
|
|
QGCFlickable { |
|
id: mainFlickable |
|
Layout.preferredWidth: Math.min(marginItem.width, _maxContentWidth) |
|
Layout.preferredHeight: Math.min(marginItem.height, _maxContentHeight) |
|
contentWidth: marginItem.width |
|
contentHeight: marginItem.height |
|
|
|
Item { |
|
id: marginItem |
|
width: dialogComponentLoader.width + (_contentMargin * 2) |
|
height: dialogComponentLoader.height + _contentMargin |
|
|
|
Loader { |
|
id: dialogComponentLoader |
|
x: _contentMargin |
|
source: dialogSource |
|
sourceComponent: dialogComponent |
|
focus: true |
|
|
|
property var dialogProperties: _root.dialogProperties |
|
property bool acceptAllowed: acceptButton.visible |
|
property bool rejectAllowed: rejectButton.visible |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|