Warning, /maui/mauikit/src/controls.5/PopupPage.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * Copyright 2018 Camilo Higuita <milo.h@aol.com> 0003 * 0004 * This program is free software; you can redistribute it and/or modify 0005 * it under the terms of the GNU Library General Public License as 0006 * published by the Free Software Foundation; either version 2, or 0007 * (at your option) any later version. 0008 * 0009 * This program is distributed in the hope that it will be useful, 0010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0012 * GNU General Public License for more details 0013 * 0014 * You should have received a copy of the GNU Library General Public 0015 * License along with this program; if not, write to the 0016 * Free Software Foundation, Inc., 0017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0018 */ 0019 0020 import QtQuick 2.14 0021 0022 import QtQuick.Controls 2.14 0023 import QtQuick.Layouts 1.3 0024 0025 import org.mauikit.controls 1.3 as Maui 0026 0027 import QtGraphicalEffects 1.0 0028 0029 /*! 0030 * \since org.mauikit.controls 1.0 0031 * \inqmlmodule org.mauikit.controls 0032 * 0033 * A scrollable dialog popup, with a Page as its main content. 0034 * With default buttons styled, a close button and a predefiend layout. 0035 * 0036 * The dialog can be used with its main default ColumnLayout or with an Item stacked. 0037 * 0038 * The dialog contents will be hanlded by a ColumnLayout, so the positioning of its child elements should use the attached property 0039 * Layout.fillheight layout.fillWidth, etc. 0040 */ 0041 Popup 0042 { 0043 id: control 0044 0045 focus: true 0046 0047 Maui.Theme.colorSet: Maui.Theme.Window 0048 Maui.Theme.inherit: false 0049 0050 closePolicy: control.persistent ? Popup.NoAutoClose | Popup.CloseOnEscape : Popup.CloseOnEscape | Popup.CloseOnPressOutside 0051 0052 maxWidth: 300 0053 maxHeight: implicitHeight 0054 implicitHeight: _layout.implicitHeight + topPadding + bottomPadding + topMargin + bottomMargin 0055 0056 hint: 0.9 0057 heightHint: 0.9 0058 spacing: Maui.Style.space.big 0059 0060 margins: 0 0061 0062 filling: persistent && mWidth === control.parent.width 0063 /*! 0064 * \qmlproperty list<Item> ApplicationWindow::scrollable 0065 * 0066 * Default content will be added to a scrollable ColumnLayout. 0067 * When adding a item keep on mind that to correctly have the scrollable behavior 0068 * the item must have an implicit height. And the positioning should be done via the Layout attached properties. 0069 */ 0070 default property alias scrollable : _scrollView.content 0071 0072 /*! 0073 * \qmlproperty list<Item> ApplicationWindow::stack 0074 * 0075 * To skip the scrollable behavior there is a stacked component to which items can be added, this is also 0076 * controlled by a ColumnLayout 0077 */ 0078 property alias stack : _stack.data 0079 0080 /*! 0081 * \qmlproperty string ApplicationWindow::title 0082 * 0083 * Default title text or title of the dialog page. 0084 */ 0085 property alias title : _page.title 0086 0087 /*! 0088 * \qmlproperty bool ApplicationWindow::persistent 0089 * 0090 * If the dialog should be closed when it loses focus or not. 0091 * If it is marked as persistent a close button is shown in the header bar, other wise the header bar is 0092 * hidden if there is not more elements on it. 0093 */ 0094 property bool persistent : true 0095 0096 /*! 0097 * \qmlproperty Page ApplicationWindow::page 0098 * 0099 * Access to the default dialog content. 0100 */ 0101 property alias page : _page 0102 0103 /*! 0104 * \qmlproperty ToolBar ApplicationWindow::footBar 0105 * 0106 * Dialog footer bar. 0107 */ 0108 property alias footBar : _page.footBar 0109 0110 /*! 0111 * \qmlproperty ToolBar ApplicationWindow::headBar 0112 * 0113 * Dialog header bar. 0114 */ 0115 property alias headBar: _page.headBar 0116 0117 /*! 0118 * \qmlproperty bool closeButton 0119 * 0120 * MouseArea for the close button when the dialog is marked as persistent. 0121 */ 0122 property bool closeButtonVisible: control.persistent 0123 0124 /*! 0125 * \qmlproperty Flickable Dialog::closeButton 0126 * 0127 * MouseArea for the close button when the dialog is marked as persistent. 0128 */ 0129 property alias flickable : _scrollView.flickable 0130 0131 /*! 0132 * \qmlproperty ScrollView Dialog::scrollView 0133 * 0134 * MouseArea for the close button when the dialog is marked as persistent. 0135 */ 0136 property alias scrollView : _scrollView 0137 0138 /*! 0139 * \qmlproperty int ScrollBar::policy 0140 * 0141 * MouseArea for the close button when the dialog is marked as persistent. 0142 */ 0143 property int verticalScrollBarPolicy: ScrollBar.AsNeeded 0144 0145 0146 /*! 0147 * \qmlproperty int ScrollBar::policy 0148 * 0149 * MouseArea for the close button when the dialog is marked as persistent. 0150 */ 0151 property int horizontalScrollBarPolicy: ScrollBar.AlwaysOff 0152 0153 property bool autoClose : true 0154 0155 /*! 0156 * List of actions to be added to the dialog footer bar as styled buttons. 0157 */ 0158 property list<Action> actions 0159 0160 property alias actionBar : _defaultButtonsLayout 0161 0162 /*! 0163 * Triggered when the accepted button is clicked. 0164 */ 0165 signal accepted() 0166 0167 /*! 0168 * Triggered when the rejected button is clicked. 0169 */ 0170 signal rejected() 0171 0172 signal closeTriggered() 0173 0174 ColumnLayout 0175 { 0176 id: _layout 0177 anchors.fill: parent 0178 spacing: 0 0179 0180 Maui.Page 0181 { 0182 id: _page 0183 0184 clip: true 0185 0186 Maui.Theme.colorSet: control.Maui.Theme.colorSet 0187 0188 Layout.fillWidth: true 0189 Layout.fillHeight: true 0190 0191 implicitHeight: Math.max(_scrollView.contentHeight + _scrollView.topPadding + _scrollView.bottomPadding, _stack.implicitHeight) + _page.footerContainer.implicitHeight + (_page.topPadding + _page.bottomPadding) + _page.headerContainer.implicitHeight + (_page.topMargin + _page.bottomMargin) 0192 0193 headerPositioning: ListView.InlineHeader 0194 0195 padding: 0 0196 margins: 0 0197 0198 headBar.visible: control.persistent 0199 headBar.borderVisible: false 0200 0201 background: null 0202 0203 headBar.farRightContent: Loader 0204 { 0205 asynchronous: true 0206 visible: active 0207 active: control.persistent && closeButtonVisible 0208 0209 sourceComponent: Maui.CloseButton 0210 { 0211 onClicked: 0212 { 0213 if(control.autoClose) 0214 { 0215 control.close() 0216 }else 0217 { 0218 control.closeTriggered() 0219 } 0220 } 0221 } 0222 } 0223 0224 ColumnLayout 0225 { 0226 id: _stack 0227 0228 anchors.fill: parent 0229 0230 spacing: control.spacing 0231 } 0232 0233 Maui.ScrollColumn 0234 { 0235 id: _scrollView 0236 0237 anchors.fill: parent 0238 0239 visible: _stack.children.length === 0 0240 0241 spacing: control.spacing 0242 padding: Maui.Style.space.big 0243 0244 ScrollBar.horizontal.policy: control.horizontalScrollBarPolicy 0245 ScrollBar.vertical.policy: control.verticalScrollBarPolicy 0246 } 0247 } 0248 0249 GridLayout 0250 { 0251 id: _defaultButtonsLayout 0252 0253 rowSpacing: Maui.Style.space.small 0254 columnSpacing: Maui.Style.space.small 0255 0256 Layout.fillWidth: true 0257 Layout.margins: Maui.Style.contentMargins 0258 0259 property bool isWide : control.width > Maui.Style.units.gridUnit*10 0260 0261 visible: control.actions.length 0262 0263 rows: isWide? 1 : _defaultButtonsLayout.children.length 0264 columns: isWide ? _defaultButtonsLayout.children.length : 1 0265 0266 Repeater 0267 { 0268 model: control.actions 0269 0270 Button 0271 { 0272 id: _actionButton 0273 focus: true 0274 Layout.fillWidth: true 0275 0276 action: modelData 0277 } 0278 } 0279 } 0280 } 0281 }