Compare commits

...

4 commits

Author SHA1 Message Date
Nicolas Fella
cbd0eda348 Explictly specify signal handler args 2024-06-06 02:33:34 +02:00
Nicolas Fella
632bf8e450 Port runcommand config to Kirigami.Dialog
It works better out of the box
2024-06-06 02:32:16 +02:00
Nicolas Fella
811101352f Port runcommand config to ItemDelegate 2024-06-06 02:30:05 +02:00
Nicolas Fella
6366ceb530 [app] Fixup plugin config pages
Depending on the content we want to use Page or ScrollablePage

The runcommand config should be a scrollablepage, but isn't right now

The code even (incompletely) works around that

To address this make the individual config files add their page instead of an additional wrapper page
2024-06-06 02:27:40 +02:00
9 changed files with 299 additions and 286 deletions

View file

@ -40,7 +40,6 @@ ecm_target_qml_sources(kdeconnect-app SOURCES
qml/volume.qml
qml/MprisSlider.qml
qml/PluginSettings.qml
qml/PluginInfoPage.qml
qml/Settings.qml
)

View file

@ -1,31 +0,0 @@
/*
* SPDX-FileCopyrightText: 2019 Nicolas Fella <nicolas.fella@gmx.de>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
import QtQuick
import org.kde.kirigami as Kirigami
Kirigami.Page {
id: root
property string configFile
property string device
actions: loader.item && loader.item.action ? [loader.item.action] : []
onConfigFileChanged: loader.setSource(configFile, {
device: root.device
})
Loader {
anchors.fill: parent
id: loader
Component.onCompleted: setSource(configFile, {
device: root.device
})
}
}

View file

@ -63,19 +63,16 @@ Kirigami.ScrollablePage {
// https://bugreports.qt.io/browse/QTBUG-123123
Accessible.name: i18nd("kdeconnect-app", "Configure plugin")
onTriggered: {
if (pageStack.lastItem.toString().startsWith("PluginInfoPage")) {
pageStack.lastItem.configFile = configSource;
pageStack.lastItem.title = name;
pageStack.goForward();
} else {
pageStack.push(Qt.resolvedUrl("PluginInfoPage.qml"), {
if (!pageStack.lastItem.toString().startsWith("PluginSettings")) {
pageStack.pop()
}
pageStack.push(configSource, {
title: name,
configFile: configSource,
device: root.device,
});
}
}
}
]
}
}

View file

@ -10,10 +10,14 @@ import QtQuick.Layouts 1.15
import org.kde.kirigami 2.20 as Kirigami
import org.kde.kdeconnect 1.0
Kirigami.FormLayout {
Kirigami.Page {
property string device
Kirigami.FormLayout {
anchors.fill: parent
KdeConnectPluginConfig {
id: config
deviceId: device
@ -38,3 +42,4 @@ Kirigami.FormLayout {
}
}
}

View file

@ -11,15 +11,21 @@ import org.kde.kirigami 2.20 as Kirigami
import Qt.labs.platform 1.1
import org.kde.kdeconnect 1.0
Kirigami.FormLayout {
Kirigami.Page {
property string device
property var action: Kirigami.Action {
actions: [
Kirigami.Action {
icon.name: "dialog-ok"
text: i18n("Apply")
onTriggered: config.set("ringtone", path.text)
}
]
Kirigami.FormLayout {
anchors.fill: parent
FileDialog {
id: fileDialog
@ -53,4 +59,4 @@ Kirigami.FormLayout {
}
}
}
}

View file

@ -10,9 +10,14 @@ import QtQuick.Layouts 1.15
import org.kde.kirigami 2.20 as Kirigami
import org.kde.kdeconnect 1.0
Kirigami.FormLayout {
Kirigami.Page {
property string device
Kirigami.FormLayout {
anchors.fill: parent
KdeConnectPluginConfig {
id: config
deviceId: device
@ -55,3 +60,4 @@ Kirigami.FormLayout {
onClicked: config.set("actionResume", checked)
}
}
}

View file

@ -3,46 +3,62 @@
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
pragma ComponentBehavior: Bound
import QtQuick 2.15
import QtQuick.Layouts
import QtQuick.Controls 2.15 as QQC2
import org.kde.kirigami 2.20 as Kirigami
import org.kde.kdeconnect 1.0
ListView {
id: view
Component.onCompleted: {
root.leftPadding = 0
root.rightPadding = 0
root.topPadding = 0
root.bottomPadding = 0
}
Kirigami.ScrollablePage {
id: root
property string device
property var action: Kirigami.Action {
actions: [
Kirigami.Action {
icon.name: "list-add"
text: i18n("Add command")
onTriggered: addDialog.open()
}
]
ListView {
id: view
model: CommandsModel {
id: commandModel
deviceId: device
}
delegate: Kirigami.SwipeListItem {
width: parent.width
enabled: true
delegate: QQC2.ItemDelegate {
id: commandDelegate
contentItem: QQC2.Label {
text: i18n("%1 <br> <i>%2</i>", name, command)
required property string name
required property string command
required property int index
text: name
width: ListView.view.width
contentItem: RowLayout {
Kirigami.TitleSubtitle {
title: commandDelegate.text
subtitle: commandDelegate.command
Layout.fillWidth: true
}
actions: Kirigami.Action {
QQC2.ToolButton {
text: i18n("Delete")
icon.name: "delete"
onTriggered: commandModel.removeCommand(index)
onClicked: commandModel.removeCommand(commandDelegate.index)
display: QQC2.ToolButton.IconOnly
QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
QQC2.ToolTip.text: text
QQC2.ToolTip.visible: hovered || activeFocus
}
}
}
@ -53,15 +69,17 @@ ListView {
width: parent.width - Kirigami.Units.gridUnit * 4
text: i18n("No Commands")
explanation: i18n("Add commands to run them remotely from other devices")
helpfulAction: view.action
helpfulAction: root.actions[0]
}
QQC2.Dialog {
Kirigami.Dialog {
id: addDialog
title: "Add command"
standardButtons: QQC2.Dialog.Save | QQC2.Dialog.Cancel
horizontalPadding: Kirigami.Units.largeSpacing
Kirigami.FormLayout {
QQC2.TextField {
id: nameField
@ -106,7 +124,7 @@ ListView {
command: "qdbus org.kde.kded5 /modules/plasmavault forceCloseAllVaults"
}
}
onActivated: {
onActivated: index => {
if (index > 0) {
nameField.text = sampleCommands.get(index).name
commandField.text = sampleCommands.get(index).command
@ -118,3 +136,4 @@ ListView {
onAccepted: commandModel.addCommand(nameField.text, commandField.text)
}
}
}

View file

@ -10,10 +10,14 @@ import QtQuick.Layouts 1.1
import org.kde.kirigami 2.5 as Kirigami
import org.kde.kdeconnect 1.0
Kirigami.FormLayout {
Kirigami.Page {
property string device
Kirigami.FormLayout {
anchors.fill: parent
KdeConnectPluginConfig {
id: config
deviceId: device
@ -54,3 +58,4 @@ Kirigami.FormLayout {
}
}
}

View file

@ -11,15 +11,21 @@ import org.kde.kirigami 2.20 as Kirigami
import Qt.labs.platform 1.1
import org.kde.kdeconnect 1.0
Kirigami.FormLayout {
Kirigami.Page {
property string device
property var action: Kirigami.Action {
actions: [
Kirigami.Action {
icon.name: "dialog-ok"
text: i18n("Apply")
onTriggered: config.set("incoming_path", path.text)
}
]
Kirigami.FormLayout {
anchors.fill: parent
FolderDialog {
id: folderDialog
@ -57,3 +63,4 @@ Kirigami.FormLayout {
text: i18n("%1 in the path will be replaced with the specific device name", "%1")
}
}
}