quicksettings: add ability to enable/disable qs

This commit is contained in:
Yari Polla 2023-03-13 14:03:17 +01:00 committed by Devin Lin
parent 2962a8b81c
commit e21354bf63
5 changed files with 153 additions and 60 deletions

View file

@ -98,6 +98,28 @@ SavedQuickSettingsModel *SavedQuickSettings::disabledQuickSettingsModel() const
return m_disabledQSModel;
}
void SavedQuickSettings::enableQS(int index)
{
KPluginMetaData *tmp = m_disabledQSModel->takeRow(index);
if (!tmp) {
return;
}
m_enabledQSModel->insertRow(tmp, m_enabledQSModel->rowCount({}));
}
void SavedQuickSettings::disableQS(int index)
{
KPluginMetaData *tmp = m_enabledQSModel->takeRow(index);
if (!tmp) {
return;
}
m_disabledQSModel->insertRow(tmp, m_disabledQSModel->rowCount({}));
}
void SavedQuickSettings::refreshModel()
{
QList<QString> enabledQS = m_settings->enabledQuickSettings();

View file

@ -34,6 +34,9 @@ public:
SavedQuickSettingsModel *enabledQuickSettingsModel() const;
SavedQuickSettingsModel *disabledQuickSettingsModel() const;
Q_INVOKABLE void enableQS(int index);
Q_INVOKABLE void disableQS(int index);
private:
void refreshModel();
void saveModel();

View file

@ -57,6 +57,21 @@ void SavedQuickSettingsModel::insertRow(KPluginMetaData *metaData, int index)
Q_EMIT dataUpdated(m_data);
}
KPluginMetaData *SavedQuickSettingsModel::takeRow(int index)
{
if (index < 0 || index >= m_data.size()) {
return {};
}
Q_EMIT beginRemoveRows(QModelIndex(), index, index);
KPluginMetaData *tmp = m_data.takeAt(index);
Q_EMIT endRemoveRows();
Q_EMIT dataUpdated(m_data);
return tmp;
}
void SavedQuickSettingsModel::removeRow(int index)
{
if (index < 0 || index >= m_data.size()) {

View file

@ -36,6 +36,7 @@ public:
Q_INVOKABLE void moveRow(int oldIndex, int newIndex);
Q_INVOKABLE void insertRow(KPluginMetaData *metaData, int index);
Q_INVOKABLE KPluginMetaData *takeRow(int index);
Q_INVOKABLE void removeRow(int index);
QList<KPluginMetaData *> list() const;

View file

@ -20,8 +20,88 @@ Kirigami.ScrollablePage {
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: 0
spacing: Kirigami.Units.smallSpacing
width: root.width
MobileForm.FormCard {
@ -32,69 +112,41 @@ Kirigami.ScrollablePage {
MobileForm.FormCardHeader {
title: i18n("Quick Settings")
subtitle: i18n("Customize the order of quick settings in the pull-down panel.")
subtitle: i18n("Customize the order of quick settings in the pull-down panel and hide them.")
}
ListView {
id: enabledQSListView
Loader {
Layout.fillWidth: true
Layout.preferredHeight: contentHeight
interactive: false
model: savedQuickSettings.enabledModel
moveDisplaced: Transition {
YAnimator {
duration: Kirigami.Units.longDuration
easing.type: Easing.InOutQuad
}
}
Component {
id: listItemComponent
MobileForm.AbstractFormDelegate {
id: qsDelegate
contentItem: RowLayout {
Kirigami.ListItemDragHandle {
Layout.rightMargin: Kirigami.Units.largeSpacing
listItem: qsDelegate
listView: enabledQSListView
onMoveRequested: savedQuickSettings.enabledModel.moveRow(oldIndex, newIndex)
}
Kirigami.Icon {
visible: model && model.icon !== ""
source: model ? model.icon : ""
Layout.rightMargin: (model && model.icon !== "") ? Kirigami.Units.largeSpacing : 0
implicitWidth: (model && model.icon !== "") ? Kirigami.Units.iconSizes.small : 0
implicitHeight: (model && model.icon !== "") ? 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
}
}
}
}
}
delegate: Kirigami.DelegateRecycler {
width: enabledQSListView.width
sourceComponent: listItemComponent
}
Layout.preferredHeight: item ? item.contentHeight : 0
asynchronous: true
sourceComponent: listViewComponent
onLoaded: item.isEnabled = true
}
}
MobileShell.SavedQuickSettings {
id: savedQuickSettings
}
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
}
}
}
}