/*===================================================================== 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 { id: __rootItem property Component viewComponent /// 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. signal completed function __setupDialogButtons(buttons) { __acceptButton.visible = false __rejectButton.visible = false // Accept role buttons 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.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.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 } // Reject role buttons 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.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 } } function __showDialog(component, title, charWidth, buttons) { __dialogCharWidth = charWidth __dialogTitle = title __setupDialogButtons(buttons) __dialogComponent = component __viewPanel.enabled = false __dialogOverlay.visible = true } function __showMessage(title, message, buttons) { __dialogCharWidth = 50 __dialogTitle = title __messageDialogText = message __setupDialogButtons(buttons) __dialogComponent = __messageDialog __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 string __messageDialogText property Component __dialogComponent Component.onCompleted: completed() Connections { target: __viewPanel.item onShowDialog: __showDialog(component, title, charWidth, buttons) onShowMessage: __showMessage(title, message, 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: __dialogCharWidth == -1 ? parent.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 Component { id: __messageDialog QGCViewMessage { message: __messageDialogText } } }