/* * SPDX-FileCopyrightText: 2022 Devin Lin * SPDX-License-Identifier: LGPL-2.0-or-later */ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 as QQC2 import org.kde.kirigami 2.19 as Kirigami import org.kde.kcm 1.3 as KCM import org.kde.plasma.private.mobileshell 1.0 as MobileShell import org.kde.kirigamiaddons.labs.mobileform 0.1 as MobileForm Kirigami.ScrollablePage { id: root title: i18n("Quick Settings") leftPadding: 0 rightPadding: 0 topPadding: Kirigami.Units.gridUnit bottomPadding: Kirigami.Units.gridUnit Component { id: listItemComponent MobileForm.AbstractFormDelegate { id: qsDelegate readonly property bool isEnabled: parent ? parent.parentView.isEnabled : false contentItem: RowLayout { Kirigami.ListItemDragHandle { visible: qsDelegate.isEnabled Layout.rightMargin: Kirigami.Units.largeSpacing listItem: qsDelegate listView: qsDelegate.parent ? qsDelegate.parent.parentView : null onMoveRequested: savedQuickSettings.enabledModel.moveRow(oldIndex, newIndex) } Kirigami.Icon { readonly property bool iconAvailable: model && model.icon !== "" visible: iconAvailable source: model ? model.icon : "" Layout.rightMargin: iconAvailable ? Kirigami.Units.largeSpacing : 0 implicitWidth: iconAvailable ? Kirigami.Units.iconSizes.small : 0 implicitHeight: iconAvailable ? Kirigami.Units.iconSizes.small : 0 } ColumnLayout { Layout.fillWidth: true spacing: Kirigami.Units.smallSpacing QQC2.Label { Layout.fillWidth: true text: model ? model.name : "" elide: Text.ElideRight } } QQC2.ToolButton { icon.name: model ? qsDelegate.isEnabled ? "hide_table_row" : "show_table_row" : "" onClicked: qsDelegate.isEnabled ? savedQuickSettings.disableQS(model.index) : savedQuickSettings.enableQS(model.index) } } } } Component { id: listViewComponent ListView { id: listView Layout.fillWidth: true Layout.preferredHeight: contentHeight interactive: false property bool isEnabled: false model: isEnabled ? savedQuickSettings.enabledModel : savedQuickSettings.disabledModel moveDisplaced: Transition { YAnimator { duration: Kirigami.Units.longDuration easing.type: Easing.InOutQuad } } delegate: Kirigami.DelegateRecycler { id: delegate width: listView.width sourceComponent: listItemComponent readonly property ListView parentView: ListView.view } } } MobileShell.SavedQuickSettings { id: savedQuickSettings } ColumnLayout { spacing: Kirigami.Units.smallSpacing width: root.width MobileForm.FormCard { Layout.fillWidth: true contentItem: ColumnLayout { spacing: 0 MobileForm.FormCardHeader { title: i18n("Quick Settings") subtitle: i18n("Customize the order of quick settings in the pull-down panel and hide them.") } Loader { Layout.fillWidth: true Layout.preferredHeight: item ? item.contentHeight : 0 asynchronous: true sourceComponent: listViewComponent onLoaded: item.isEnabled = true } } } MobileForm.FormCard { Layout.fillWidth: true contentItem: ColumnLayout { spacing: 0 MobileForm.FormCardHeader { title: i18n("Disabled Quick Settings") subtitle: i18n("Re-enable previously disabled quick settings.") } Loader { Layout.fillWidth: true Layout.preferredHeight: item ? item.contentHeight : 0 asynchronous: true sourceComponent: listViewComponent onLoaded: item.isEnabled = false } } } } }