mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-06-11 08:57:21 +00:00
175 lines
6.8 KiB
QML
175 lines
6.8 KiB
QML
|
|
// SPDX-FileCopyrightText: 2026 Marco Allegretti
|
||
|
|
// SPDX-License-Identifier: EUPL-1.2
|
||
|
|
|
||
|
|
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
|
||
|
|
|
||
|
|
InitialStartModule {
|
||
|
|
name: i18n("Device")
|
||
|
|
|
||
|
|
contentItem: Item {
|
||
|
|
id: root
|
||
|
|
|
||
|
|
readonly property real cardWidth: Math.min(Kirigami.Units.gridUnit * 30, root.width - Kirigami.Units.gridUnit * 2)
|
||
|
|
|
||
|
|
function chooseDevice(deviceClass, primaryInput) {
|
||
|
|
SetupState.applyDeviceDefaults(deviceClass, primaryInput)
|
||
|
|
}
|
||
|
|
|
||
|
|
function selectedDeviceLabel() {
|
||
|
|
switch (SetupState.deviceClass) {
|
||
|
|
case "phone":
|
||
|
|
return i18n("Phone")
|
||
|
|
case "tablet":
|
||
|
|
return i18n("Tablet or 2-in-1")
|
||
|
|
case "laptop":
|
||
|
|
return i18n("Laptop")
|
||
|
|
case "desktop":
|
||
|
|
return i18n("Desktop PC")
|
||
|
|
case "handheld":
|
||
|
|
return i18n("Gaming handheld")
|
||
|
|
case "mini-pc":
|
||
|
|
return i18n("Gaming PC")
|
||
|
|
case "dual-screen":
|
||
|
|
return i18n("Dual-screen device")
|
||
|
|
case "foldable":
|
||
|
|
return i18n("Foldable device")
|
||
|
|
default:
|
||
|
|
return SetupState.deviceClass
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function selectedInputLabel() {
|
||
|
|
switch (SetupState.primaryInput) {
|
||
|
|
case "touch":
|
||
|
|
return i18n("touch")
|
||
|
|
case "keyboardMouse":
|
||
|
|
return i18n("keyboard and pointer")
|
||
|
|
case "gamepad":
|
||
|
|
return i18n("gamepad")
|
||
|
|
default:
|
||
|
|
return SetupState.primaryInput
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
ScrollView {
|
||
|
|
anchors {
|
||
|
|
fill: parent
|
||
|
|
topMargin: Kirigami.Units.gridUnit
|
||
|
|
}
|
||
|
|
|
||
|
|
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
|
||
|
|
contentWidth: -1
|
||
|
|
|
||
|
|
ColumnLayout {
|
||
|
|
width: root.width
|
||
|
|
spacing: Kirigami.Units.gridUnit
|
||
|
|
|
||
|
|
Label {
|
||
|
|
Layout.leftMargin: Kirigami.Units.gridUnit
|
||
|
|
Layout.rightMargin: Kirigami.Units.gridUnit
|
||
|
|
Layout.alignment: Qt.AlignTop
|
||
|
|
Layout.fillWidth: true
|
||
|
|
horizontalAlignment: Text.AlignHCenter
|
||
|
|
wrapMode: Text.Wrap
|
||
|
|
text: i18n("What are you setting up SHIFT on?")
|
||
|
|
}
|
||
|
|
|
||
|
|
FormCard.FormCard {
|
||
|
|
maximumWidth: root.cardWidth
|
||
|
|
Layout.fillWidth: true
|
||
|
|
Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
|
||
|
|
|
||
|
|
FormCard.FormTextDelegate {
|
||
|
|
text: i18n("Current selection")
|
||
|
|
description: i18n("%1, controlled with %2", root.selectedDeviceLabel(), root.selectedInputLabel())
|
||
|
|
}
|
||
|
|
|
||
|
|
FormCard.FormButtonDelegate {
|
||
|
|
text: i18n("Use Hardware Recommendation")
|
||
|
|
icon.name: "emblem-ok-symbolic"
|
||
|
|
onClicked: SetupState.useRecommendedSettings()
|
||
|
|
}
|
||
|
|
|
||
|
|
FormCard.FormDelegateSeparator {}
|
||
|
|
|
||
|
|
FormCard.FormRadioDelegate {
|
||
|
|
text: i18n("Phone")
|
||
|
|
description: i18n("Pocket touch device. Starts with the simple mobile home screen and full-screen apps.")
|
||
|
|
onClicked: root.chooseDevice("phone", "touch")
|
||
|
|
|
||
|
|
Binding on checked {
|
||
|
|
value: SetupState.deviceClass === "phone"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
FormCard.FormRadioDelegate {
|
||
|
|
text: i18n("Tablet or 2-in-1")
|
||
|
|
description: i18n("Touch device that may rotate, dock, or use a keyboard. Starts with adaptive defaults.")
|
||
|
|
onClicked: root.chooseDevice("tablet", "touch")
|
||
|
|
|
||
|
|
Binding on checked {
|
||
|
|
value: SetupState.deviceClass === "tablet"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
FormCard.FormRadioDelegate {
|
||
|
|
text: i18n("Laptop or Desktop")
|
||
|
|
description: i18n("Keyboard and pointer computer. Starts with windows, Overview, dock, tiling, and snap layouts.")
|
||
|
|
onClicked: root.chooseDevice(DeviceContext.hasBattery ? "laptop" : "desktop", "keyboardMouse")
|
||
|
|
|
||
|
|
Binding on checked {
|
||
|
|
value: SetupState.deviceClass === "laptop" || SetupState.deviceClass === "desktop"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
FormCard.FormRadioDelegate {
|
||
|
|
text: i18n("Gaming PC or Handheld")
|
||
|
|
description: i18n("Gamepad-first setup for a handheld, console-style mini PC, or living-room gaming device.")
|
||
|
|
onClicked: root.chooseDevice(DeviceContext.hasBattery ? "handheld" : "mini-pc", "gamepad")
|
||
|
|
|
||
|
|
Binding on checked {
|
||
|
|
value: SetupState.deviceClass === "handheld" || SetupState.deviceClass === "mini-pc"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
FormCard.FormRadioDelegate {
|
||
|
|
text: i18n("Dual-screen or Foldable")
|
||
|
|
description: i18n("Hardware whose screen layout changes by posture, hinge, external display, or dock.")
|
||
|
|
onClicked: root.chooseDevice(DeviceContext.displayCount > 1 ? "dual-screen" : "foldable", SetupState.primaryInput)
|
||
|
|
|
||
|
|
Binding on checked {
|
||
|
|
value: SetupState.deviceClass === "dual-screen" || SetupState.deviceClass === "foldable"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
FormCard.FormCard {
|
||
|
|
maximumWidth: root.cardWidth
|
||
|
|
Layout.fillWidth: true
|
||
|
|
Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
|
||
|
|
|
||
|
|
FormCard.FormTextDelegate {
|
||
|
|
text: i18n("Detected context")
|
||
|
|
description: i18n("Recommended: %1 with %2 layout. Displays: %3, Touch: %4, Battery: %5",
|
||
|
|
DeviceContext.recommendedDeviceClass,
|
||
|
|
DeviceContext.recommendedExperienceProfile,
|
||
|
|
DeviceContext.displayCount,
|
||
|
|
DeviceContext.hasTouch ? i18n("yes") : i18n("no"),
|
||
|
|
DeviceContext.hasBattery ? i18n("yes") : i18n("no"))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
Item {
|
||
|
|
Layout.fillHeight: true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|