9import QtQuick.Controls as Controls
10import org.kde.kirigami as Kirigami
11import org.kde.kirigamiaddons.formcard as FormCard
12import org.kde.kirigamiaddons.settings
14FormCard.FormCardPage {
17 required property string defaultModule
18 required property list<ConfigurationModule> modules
22 property var pageCache:
Object.create(null)
24 title:
i18ndc(
"kirigami-addons6",
"@title",
"Settings")
28 Layout.fillWidth:
true
29 Layout.topMargin:
Kirigami.Units.gridUnit
32 Layout.fillWidth:
true
35 topPadding:
Kirigami.Units.smallSpacing
36 bottomPadding:
Kirigami.Units.smallSpacing
40 Layout.fillWidth:
true
42 onTextChanged: repeater.filterText = text.toLowerCase();
51 property string filterText:
""
54 const isFiltering = filterText.length !== 0;
55 let filteredCategories =
new Array();
57 for (let i in root.modules) {
58 const module = modules[i];
59 const modulePassesFilter =
module.text.toLowerCase().includes(filterText);
60 if (module.visible && (isFiltering ? modulePassesFilter : true)) {
61 const category = filteredCategories.find((category) =>
category.name === module.category);
65 filteredCategories.push({
66 name:
module.category,
72 return filteredCategories;
78 required
property var modelData
83 title: categoryDelegate.modelData.name ===
"_main_category" ?
i18ndc(
"kirigami-addons6",
"@title:group",
"Settings") : modelData.
name
93 model: categoryDelegate.modelData.modules
94 delegate: ColumnLayout {
97 required property int index
100 Layout.fillWidth: true
103 visible: moduleDelegate.index !== 0
110 root.window.pageStack.layers.push(pageForModule(modelData));
113 contentItem: RowLayout {
115 source: moduleDelegate.modelData.icon.name
116 Layout.rightMargin:
Kirigami.Units.largeSpacing
117 implicitWidth:
Kirigami.Units.iconSizes.medium
118 implicitHeight:
Kirigami.Units.iconSizes.medium
122 Layout.fillWidth:
true
123 text: moduleDelegate.modelData.text
124 elide:
Text.ElideRight
128 Layout.alignment:
Qt.AlignRight
129 source:
"arrow-right"
130 implicitWidth: Math.round(
Kirigami.Units.iconSizes.small * 0.75)
131 implicitHeight: Math.round(
Kirigami.Units.iconSizes.small * 0.75)
143 if (pageCache[module.moduleId]) {
144 return pageCache[module.moduleId];
146 const component =
module.page();
147 if (component.status === Component.Error) {
148 console.error(component.errorString());
150 const page = component.createObject(root, module.initialProperties());
151 if (page.title.length === 0) {
152 page.title =
module.text;
154 pageCache[module.moduleId] = page;
160 return modules.
find(module => module.moduleId == moduleId) ?? null;
This object holds the information of configuration module.
QString i18ndc(const char *domain, const char *context, const char *text, const TYPE &arg...)
QString name(GameStandardAction id)
Category category(StandardShortcut id)