diff --git a/initialstart/modules/CMakeLists.txt b/initialstart/modules/CMakeLists.txt index fb826a0f..e8b335de 100644 --- a/initialstart/modules/CMakeLists.txt +++ b/initialstart/modules/CMakeLists.txt @@ -2,6 +2,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later plasma_install_package(finished org.kde.plasma.mobileinitialstart.finished mobileinitialstart) +plasma_install_package(systemnavigation org.kde.plasma.mobileinitialstart.systemnavigation mobileinitialstart) add_subdirectory(cellular) add_subdirectory(prepare) add_subdirectory(time) diff --git a/initialstart/modules/systemnavigation/contents/ui/main.qml b/initialstart/modules/systemnavigation/contents/ui/main.qml new file mode 100644 index 00000000..6715f877 --- /dev/null +++ b/initialstart/modules/systemnavigation/contents/ui/main.qml @@ -0,0 +1,101 @@ +// SPDX-FileCopyrightText: 2025 Devin Lin +// SPDX-License-Identifier: GPL-2.0-or-later + +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +import org.kde.kirigami as Kirigami + +import org.kde.kirigamiaddons.formcard as FormCard +import org.kde.plasma.mobileinitialstart.initialstart +import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings + +InitialStartModule { + name: i18n("System Navigation") + + contentItem: Item { + id: root + + readonly property real cardWidth: Math.min(Kirigami.Units.gridUnit * 30, root.width - Kirigami.Units.gridUnit * 2) + + ColumnLayout { + anchors { + fill: parent + topMargin: Kirigami.Units.gridUnit + bottomMargin: Kirigami.Units.gridUnit + } + + width: root.width + spacing: 0 + + Label { + Layout.leftMargin: Kirigami.Units.gridUnit + Layout.rightMargin: Kirigami.Units.gridUnit + Layout.alignment: Qt.AlignTop + Layout.fillWidth: true + + wrapMode: Text.Wrap + horizontalAlignment: Text.AlignHCenter + text: i18n("Choose a method to navigate around the system.") + } + + FormCard.FormCard { + maximumWidth: root.cardWidth + Layout.topMargin: Kirigami.Units.gridUnit + Layout.fillWidth: true + + FormCard.FormRadioDelegate { + text: i18n("Gesture navigation") + description: i18n("Swipe up from the bottom to see running applications. Flick to go to the home screen.") + onClicked: { + if (checked && ShellSettings.Settings.navigationPanelEnabled) { + ShellSettings.Settings.navigationPanelEnabled = false; + } + checked = Qt.binding(function () { return !ShellSettings.Settings.navigationPanelEnabled; }); + } + + Binding on checked { + value: !ShellSettings.Settings.navigationPanelEnabled + } + } + } + + FormCard.FormCard { + maximumWidth: root.cardWidth + Layout.topMargin: Kirigami.Units.largeSpacing + Layout.fillWidth: true + + FormCard.FormRadioDelegate { + text: i18n("Button navigation") + description: i18n("Use buttons on a navigation bar to navigate the system.") + onClicked: { + if (checked && !ShellSettings.Settings.navigationPanelEnabled) { + ShellSettings.Settings.navigationPanelEnabled = true; + } + checked = Qt.binding(function () { return ShellSettings.Settings.navigationPanelEnabled; }); + } + + Binding on checked { + value: ShellSettings.Settings.navigationPanelEnabled + } + } + } + + Label { + Layout.topMargin: Kirigami.Units.gridUnit + Layout.leftMargin: Kirigami.Units.gridUnit + Layout.rightMargin: Kirigami.Units.gridUnit + Layout.fillWidth: true + + wrapMode: Text.Wrap + horizontalAlignment: Text.AlignHCenter + text: i18n("This can later be changed in the settings.") + } + + Item { + Layout.fillHeight: true + } + } + } +} diff --git a/initialstart/modules/systemnavigation/metadata.json b/initialstart/modules/systemnavigation/metadata.json new file mode 100644 index 00000000..8cf7cb2e --- /dev/null +++ b/initialstart/modules/systemnavigation/metadata.json @@ -0,0 +1,53 @@ +{ + "KPackageStructure": "KPackage/GenericQML", + "KPlugin": { + "Authors": [ + { + "Email": "devin@kde.org", + "Name": "Devin Lin", + "Name[ar]": "ديفين لين", + "Name[az]": "Devin Lin", + "Name[ca@valencia]": "Devin Lin", + "Name[ca]": "Devin Lin", + "Name[cs]": "Devin Lin", + "Name[de]": "Devin Lin", + "Name[en_GB]": "Devin Lin", + "Name[eo]": "Devin Lin", + "Name[es]": "Devin Lin", + "Name[eu]": "Devin Lin", + "Name[fi]": "Devin Lin", + "Name[fr]": "Devin Lin", + "Name[gl]": "Devin Lin", + "Name[he]": "דווין לין", + "Name[hu]": "Devin Lin", + "Name[ia]": "Devin Lin", + "Name[is]": "Devin Lin", + "Name[it]": "Devin Lin", + "Name[ka]": "Devin Lin", + "Name[ko]": "Devin Lin", + "Name[lv]": "Devin Lin", + "Name[nl]": "Devin Lin", + "Name[nn]": "Devin Lin", + "Name[pa]": "ਡੇਵਿਨ ਲਿਨ", + "Name[pl]": "Devin Lin", + "Name[pt]": "Devin Lin", + "Name[pt_BR]": "Devin Lin", + "Name[ru]": "Devin Lin", + "Name[sa]": "डेविन् लिन्", + "Name[sk]": "Devin Lin", + "Name[sl]": "Devin Lin", + "Name[sv]": "Devin Lin", + "Name[tr]": "Devin Lin", + "Name[uk]": "Devin Lin", + "Name[x-test]": "xxDevin Linxx", + "Name[zh_CN]": "Devin Lin", + "Name[zh_TW]": "Devin Lin" + } + ], + "Description": "System navigation initialstart module for Plasma Mobile", + "Id": "org.kde.plasma.mobileinitialstart.systemnavigation", + "License": "GPL-2.0+", + "Name": "System Navigation", + "Website": "https://kde.org" + } +} diff --git a/initialstart/wizard.cpp b/initialstart/wizard.cpp index f11f0e04..9fb4a984 100644 --- a/initialstart/wizard.cpp +++ b/initialstart/wizard.cpp @@ -15,6 +15,7 @@ const QList WIZARD_MODULE_ORDER = {QStringLiteral("org.kde.plasma.mobil QStringLiteral("org.kde.plasma.mobileinitialstart.time"), QStringLiteral("org.kde.plasma.mobileinitialstart.wifi"), QStringLiteral("org.kde.plasma.mobileinitialstart.cellular"), + QStringLiteral("org.kde.plasma.mobileinitialstart.systemnavigation"), QStringLiteral("org.kde.plasma.mobileinitialstart.finished")}; Wizard::Wizard(QObject *parent, QQmlEngine *engine)