QGCPopupDialogContainer.qml 7.73 KB
Newer Older
DoinLakeFlyer's avatar
DoinLakeFlyer committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/****************************************************************************
 *
 * (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 {
21 22 23 24
    property var dialogComponent
    property var dialogProperties

    id:                 popupRoot
DoinLakeFlyer's avatar
DoinLakeFlyer committed
25
    anchors.centerIn:   parent
26 27
    width:              mainColumnLayout.width + (padding * 2)
    height:             mainColumnLayout.y + mainColumnLayout.height + padding
DonLakeFlyer's avatar
DonLakeFlyer committed
28
    padding:            2
DoinLakeFlyer's avatar
DoinLakeFlyer committed
29 30 31
    modal:              true
    focus:              true

32 33
    property var    _pal:               QGroundControl.globalPalette
    property real   _frameSize:         ScreenTools.defaultFontPixelWidth
34
    property string _dialogTitle
35 36 37 38
    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
DonLakeFlyer's avatar
DonLakeFlyer committed
39 40 41 42 43

    background: Item {
        Rectangle {
            anchors.left:   parent.left
            anchors.top:    parent.top
44 45 46
            width:          _frameSize
            height:         _frameSize
            color:          _pal.text
DonLakeFlyer's avatar
DonLakeFlyer committed
47 48 49 50 51 52
            visible:        enabled
        }

        Rectangle {
            anchors.right:  parent.right
            anchors.top:    parent.top
53 54 55
            width:          _frameSize
            height:         _frameSize
            color:          _pal.text
DonLakeFlyer's avatar
DonLakeFlyer committed
56 57 58 59 60 61
            visible:        enabled
        }

        Rectangle {
            anchors.left:   parent.left
            anchors.bottom: parent.bottom
62 63 64
            width:          _frameSize
            height:         _frameSize
            color:          _pal.text
DonLakeFlyer's avatar
DonLakeFlyer committed
65 66 67 68 69 70
            visible:        enabled
        }

        Rectangle {
            anchors.right:  parent.right
            anchors.bottom: parent.bottom
71 72 73
            width:          _frameSize
            height:         _frameSize
            color:          _pal.text
DonLakeFlyer's avatar
DonLakeFlyer committed
74 75 76 77
            visible:        enabled
        }

        Rectangle {
78
            anchors.margins:    popupRoot.padding
DonLakeFlyer's avatar
DonLakeFlyer committed
79
            anchors.fill:       parent
80
            color:              _pal.window
DonLakeFlyer's avatar
DonLakeFlyer committed
81
        }
DoinLakeFlyer's avatar
DoinLakeFlyer committed
82 83
    }

84 85 86 87
    Component.onCompleted: {
        _dialogTitle = dialogComponentLoader.item.title
        setupDialogButtons(dialogComponentLoader.item.buttons)
    }
DoinLakeFlyer's avatar
DoinLakeFlyer committed
88 89 90

    QGCPalette { id: qgcPal; colorGroupEnabled: parent.enabled }

91
    function setupDialogButtons(buttons) {
DoinLakeFlyer's avatar
DoinLakeFlyer committed
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
        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()
    }

163 164 165 166 167
    Rectangle {
        width:  titleRowLayout.width
        height: titleRowLayout.height
        color:  qgcPal.windowShade
    }
DoinLakeFlyer's avatar
DoinLakeFlyer committed
168

169 170 171
    ColumnLayout {
        id:         mainColumnLayout
        spacing:    _contentMargin
DoinLakeFlyer's avatar
DoinLakeFlyer committed
172

173 174 175
        RowLayout {
            id:                 titleRowLayout
            Layout.fillWidth:   true
DoinLakeFlyer's avatar
DoinLakeFlyer committed
176

177 178
            QGCLabel {
                Layout.leftMargin:  ScreenTools.defaultFontPixelWidth
DoinLakeFlyer's avatar
DoinLakeFlyer committed
179
                Layout.fillWidth:   true
180 181 182 183
                text:               _dialogTitle
                height:             parent.height
                verticalAlignment:	Text.AlignVCenter
            }
DoinLakeFlyer's avatar
DoinLakeFlyer committed
184

185 186 187 188
            QGCButton {
                id:         rejectButton
                onClicked:  dialogComponentLoader.item.reject()
            }
DoinLakeFlyer's avatar
DoinLakeFlyer committed
189

190 191 192 193
            QGCButton {
                id:         acceptButton
                primary:    true
                onClicked:  dialogComponentLoader.item.accept()
DoinLakeFlyer's avatar
DoinLakeFlyer committed
194
            }
195 196 197 198 199 200 201 202
        }

        QGCFlickable {
            id:                     mainFlickable
            Layout.preferredWidth:  Math.min(marginItem.width, _maxContentWidth)
            Layout.preferredHeight: Math.min(marginItem.height, _maxContentHeight)
            contentWidth:           marginItem.width
            contentHeight:          marginItem.height
DoinLakeFlyer's avatar
DoinLakeFlyer committed
203 204

            Item {
205 206 207
                id:     marginItem
                width:  dialogComponentLoader.width + (_contentMargin * 2)
                height: dialogComponentLoader.height + _contentMargin
DoinLakeFlyer's avatar
DoinLakeFlyer committed
208 209 210 211 212 213

                Loader {
                    id:                 dialogComponentLoader
                    x:                  _contentMargin
                    sourceComponent:    dialogComponent
                    focus:              true
214 215 216 217

                    property var dialogProperties:  popupRoot.dialogProperties
                    property bool acceptAllowed:    acceptButton.visible
                    property bool rejectAllowed:    rejectButton.visible
DoinLakeFlyer's avatar
DoinLakeFlyer committed
218 219 220 221 222
                }
            }
        }
    }
}