Newer
Older
/****************************************************************************
*
* (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.
*
****************************************************************************/
/// @file
/// @author Don Gagne <don@thegagnes.com>
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
property var qgcView: _rootItem ///< Used by Fact controls for validation dialogs
property bool completedSignalled: false
property real topDialogMargin: 0 ///< Set a top margin for dialog
property var viewPanel
/// This is signalled when the top level Item reaches Component.onCompleted. This allows
/// the view subcomponent to connect to this signal and do work once the full ui is ready
/// to go.
function _setupDialogButtons(buttons) {
_acceptButton.visible = false
_rejectButton.visible = false
_acceptButton.text = qsTr("Ok")
_acceptButton.visible = true
_acceptButton.text = qsTr("Open")
_acceptButton.visible = true
_acceptButton.text = qsTr("Save")
_acceptButton.visible = true
_acceptButton.text = qsTr("Apply")
_acceptButton.visible = true
_acceptButton.text = qsTr("Open")
_acceptButton.visible = true
_acceptButton.text = qsTr("Save All")
_acceptButton.visible = true
_acceptButton.text = qsTr("Yes")
_acceptButton.visible = true
_acceptButton.text = qsTr("Yes to All")
_acceptButton.visible = true
_acceptButton.text = qsTr("Retry")
_acceptButton.visible = true
_acceptButton.text = qsTr("Reset")
_acceptButton.visible = true
} else if (buttons & StandardButton.RestoreToDefaults) {
_acceptButton.text = qsTr("Restore to Defaults")
_acceptButton.visible = true
_acceptButton.text = qsTr("Ignore")
_acceptButton.visible = true
// Reject role buttons
if (buttons & StandardButton.Cancel) {
_rejectButton.text = qsTr("Cancel")
_rejectButton.visible = true
_rejectButton.text = qsTr("Close")
_rejectButton.visible = true
_rejectButton.text = qsTr("No")
_rejectButton.visible = true
_rejectButton.text = qsTr("No to All")
_rejectButton.visible = true
_rejectButton.text = qsTr("Abort")
_rejectButton.visible = true
function _checkForEarlyDialog(title) {
console.warn(qsTr("showDialog called before QGCView.completed signalled"), title)
/// Shows a QGCViewDialog component
/// @param compoent QGCViewDialog component
/// @param title Title for dialog
/// @param charWidth Width of dialog in characters
/// @param buttons Buttons to show in dialog using StandardButton enum
readonly property int showDialogFullWidth: -1 ///< Use for full width dialog
readonly property int showDialogDefaultWidth: 40 ///< Use for default dialog width
function showDialog(component, title, charWidth, buttons) {
if (_checkForEarlyDialog(title)) {
_rejectButton.enabled = true
_acceptButton.enabled = true
_dialogCharWidth = charWidth
_dialogTitle = title
if (_checkForEarlyDialog(title)) {
_rejectButton.enabled = true
_acceptButton.enabled = true
_dialogCharWidth = showDialogDefaultWidth
_dialogTitle = title
_messageDialogText = message
_dialogComponent = _messageDialog
_dialogComponent = null
_dialogOverlay.visible = false
QGCPalette { id: _qgcPal; colorGroupEnabled: true }
QGCLabel { id: _textMeasure; text: "X"; visible: false }
property real defaultTextHeight: _textMeasure.contentHeight
property real defaultTextWidth: _textMeasure.contentWidth
/// The width of the dialog panel in characters
property int _dialogCharWidth: 75
property string _messageDialogText
property Component _dialogComponent
// When we use this control inside a QGCQmlWidgetHolder Component.onCompleted is signalled
// before the width and height are adjusted. So we need to wait for width and heigth to be
// set before we signal our own completed signal.
if (!completedSignalled && width != 0 && height != 0) {
completedSignalled = true
Component.onCompleted: _signalCompleted()
onWidthChanged: _signalCompleted()
onHeightChanged: _signalCompleted()
target: _dialogComponentLoader.item
onHideDialog: _rootItem.hideDialog()
visible: false
anchors.fill: parent
z: 5000
// This covers the parent with an transparent section
Rectangle {
height: ScreenTools.availableHeight ? ScreenTools.availableHeight : parent.height
anchors.bottom: parent.bottom
anchors.left: parent.left
}
// This is the main dialog panel which is anchored to the right edge
Rectangle {
id: _dialogPanel
width: _dialogCharWidth == showDialogFullWidth ? parent.width : defaultTextWidth * _dialogCharWidth
height: ScreenTools.availableHeight ? ScreenTools.availableHeight : parent.height
anchors.right: parent.right
height: _acceptButton.visible ? _acceptButton.height : _rejectButton.height
color: _qgcPal.windowShade
function _hidePanel() {
_fullPanel.visible = false
height: parent.height
verticalAlignment: Text.AlignVCenter
id: _rejectButton
anchors.right: _acceptButton.visible ? _acceptButton.left : parent.right
onClicked: {
enabled = false // prevent multiple clicks
_dialogComponentLoader.item.reject()
if (!viewPanel.enabled) {
// Dialog was not closed, re-enable button
enabled = true
}
anchors.right: parent.right
primary: true
enabled = false // prevent multiple clicks
_dialogComponentLoader.item.accept()
if (!viewPanel.enabled) {
// Dialog was not closed, re-enable button
enabled = true
}
anchors.margins: 5
anchors.left: parent.left
anchors.right: parent.right
sourceComponent: _dialogComponent
property bool acceptAllowed: _acceptButton.visible
property bool rejectAllowed: _rejectButton.visible
}
} // Rectangle - Dialog panel
} // Item - Dialog overlay