Warning, /maui/mauikit/src/controls.6/SettingsDialog.qml is written in an unsupported language. File is not indexed.
0001 import org.mauikit.controls 1.3 as Maui 0002 import QtQuick.Controls 0003 import QtQuick.Layouts 0004 import QtQuick 0005 0006 /** 0007 * @inherit QtQuick.Loader 0008 * 0009 * @brief A popup page with a scrollable vertical layout, and support for a stack of multiple pages. 0010 * The default container fo this control is a MauiKit SettingsPage, and the popup will snap to the window full size on constrained spaces. 0011 * @see SettingsPage 0012 * 0013 * You can add multiple sub pages to this control by making use of the SettingsPage control and the `addPage` function. 0014 * By using the SettingsPage you can expect to have a way to navigate between the control sub pages. 0015 * The code snippet below shows a quick demo on how to do it. 0016 * @see addPage 0017 * 0018 * @image html Misc/settingsdialog.png 0019 * 0020 * @note This control is mostly use for presenting a group of configuration settings to the user. Usually it is populated with sections SectionGroup containing FlexSectionItem. 0021 * 0022 * @code 0023 * Maui.SettingsDialog 0024 * { 0025 * id: _settingsDialog 0026 * 0027 * Maui.FlexSectionItem 0028 * { 0029 * label1.text: "SSetting Subpage" 0030 * label2.text: "Click me to add a new page" 0031 * 0032 * ToolButton 0033 * { 0034 * icon.name: "go-next" 0035 * checkable: true 0036 * onToggled: _settingsDialog.addPage(_settingsPage2) 0037 * } 0038 * } 0039 * 0040 * Maui.SectionGroup 0041 * { 0042 * title: "First Section" 0043 * 0044 * Maui.FlexSectionItem 0045 * { 0046 * label1.text: "Configuration title" 0047 * label2.text: "Description text" 0048 * 0049 * Button 0050 * { 0051 * text: "Test" 0052 * } 0053 * } 0054 * 0055 * Maui.FlexSectionItem 0056 * { 0057 * label1.text: "Configuration title" 0058 * label2.text: "Description text" 0059 * 0060 * Switch {} 0061 * } 0062 * 0063 * Maui.FlexSectionItem 0064 * { 0065 * label1.text: "Configuration title" 0066 * label2.text: "Description text" 0067 * 0068 * Switch {} 0069 * } 0070 * } 0071 * 0072 * Maui.SectionGroup 0073 * { 0074 * title: "A Second Section" 0075 * 0076 * Maui.FlexSectionItem 0077 * { 0078 * label1.text: "Configuration title" 0079 * label2.text: "Description text" 0080 * 0081 * Switch {} 0082 * } 0083 * 0084 * Maui.FlexSectionItem 0085 * { 0086 * label1.text: "Configuration title" 0087 * label2.text: "Description text" 0088 * wide: false 0089 * TextField 0090 * { 0091 * Layout.fillWidth: true 0092 * } 0093 * } 0094 * 0095 * Maui.FlexSectionItem 0096 * { 0097 * label1.text: "Configuration title" 0098 * label2.text: "Description text" 0099 * 0100 * Switch {} 0101 * } 0102 * } 0103 * 0104 * Component 0105 * { 0106 * id: _settingsPage2 0107 * 0108 * Maui.SettingsPage 0109 * { 0110 * title: "Page2" 0111 * 0112 * Maui.FlexSectionItem 0113 * { 0114 * label1.text: "Configuration title" 0115 * label2.text: "Description text" 0116 * 0117 * Switch {} 0118 * } 0119 * } 0120 * } 0121 * } 0122 * @endcode 0123 * 0124 * <a href="https://invent.kde.org/maui/mauikit/-/blob/qt6-2/examples/SettingsDialog.qml">You can find a more complete example at this link.</a> 0125 */ 0126 0127 Loader 0128 { 0129 id: control 0130 0131 /** 0132 * @brief By default all the children content will be placed into a MauiKit SettingsPage, which has a scrollable column layout. 0133 * @property list<QtObject> SettingsDialog::content 0134 */ 0135 default property list<QtObject> content 0136 0137 Component 0138 { 0139 id: _appComponent 0140 0141 Maui.DialogWindow 0142 { 0143 id: _window 0144 width: 400 0145 maximumWidth: 800 0146 height: Math.max(500, Math.min(900, implicitHeight)) 0147 modality: Qt.ApplicationModal 0148 0149 readonly property int implicitHeight: Math.max(_content.implicitHeight, _stackView.currentItem.implicitHeight)+_stackView.topPadding + _stackView.bottomPadding 0150 0151 title: _stackView.currentItem.title ? _stackView.currentItem.title : "" 0152 onClosing: (close) => 0153 { 0154 _window.hide() 0155 close.accepted = true 0156 } 0157 0158 readonly property alias stackView: _stackView 0159 0160 page.headBar.forceCenterMiddleContent: true 0161 page.headBar.leftContent: ToolButton 0162 { 0163 icon.name: "go-previous" 0164 visible: _stackView.depth > 1 0165 0166 onClicked: _stackView.pop() 0167 } 0168 0169 StackView 0170 { 0171 id: _stackView 0172 anchors.fill: parent 0173 0174 initialItem: Maui.SettingsPage 0175 { 0176 id:_content 0177 content: control.content 0178 } 0179 } 0180 0181 function addPage(component, properties) 0182 { 0183 _stackView.push(component, properties) 0184 } 0185 0186 function open() 0187 { 0188 _window.show() 0189 } 0190 } 0191 } 0192 0193 Component 0194 { 0195 id: _dialogComponent 0196 0197 Maui.PopupPage 0198 { 0199 id: control 0200 0201 readonly property alias stackView: _stackView 0202 0203 maxHeight: implicitHeight 0204 maxWidth: 500 0205 0206 hint: 1 0207 0208 page.title: _stackView.currentItem.title ? _stackView.currentItem.title : "" 0209 0210 headBar.visible: true 0211 0212 headBar.leftContent: ToolButton 0213 { 0214 icon.name: "go-previous" 0215 visible: _stackView.depth > 1 0216 0217 onClicked: _stackView.pop() 0218 } 0219 0220 stack: StackView 0221 { 0222 id: _stackView 0223 Layout.fillHeight: true 0224 Layout.fillWidth: true 0225 implicitHeight: Math.max(_content.implicitHeight, currentItem.implicitHeight)+topPadding +bottomPadding 0226 0227 initialItem: Maui.SettingsPage 0228 { 0229 id: _content 0230 content: control.content 0231 } 0232 } 0233 0234 function addPage(component, properties) 0235 { 0236 _stackView.push(component, properties) 0237 } 0238 } 0239 0240 } 0241 0242 function open() 0243 { 0244 if(control.item) 0245 { 0246 control.item.open() 0247 return 0248 } 0249 0250 if(Maui.Handy.isMobile) 0251 { 0252 control.sourceComponent = _dialogComponent 0253 }else 0254 { 0255 control.sourceComponent = _appComponent 0256 } 0257 control.item.open() 0258 0259 } 0260 0261 /** 0262 * @brief Adds a new sub page to the control. Use a MauiKit SettingsPage for the component. 0263 * @param component the QQC2 Component wrapping a MauiKit SettingsPage 0264 * @param properties optional properties map for the newly added sub page component 0265 * 0266 * @note The optional properties argument specifies a map of initial property values for the pushed item. For dynamically created items, these values are applied before the creation is finalized. This is more efficient than setting property values after creation, particularly where large sets of property values are defined, and also allows property bindings to be set up (using Qt.binding()) before the item is created. 0267 * Checkout QT documentation on the StackView methods. 0268 */ 0269 function addPage(component, properties) 0270 { 0271 control.item.addPage(component, properties) 0272 } 0273 } 0274