Skip to content

Commit

Permalink
Use custom sidebar implementation
Browse files Browse the repository at this point in the history
It has nicer default width

Signed-off-by: Carl Schwan <[email protected]>
  • Loading branch information
CarlSchwan committed Dec 14, 2022
1 parent d74737a commit cd0db29
Showing 1 changed file with 92 additions and 89 deletions.
181 changes: 92 additions & 89 deletions app/qml/main.qml
Original file line number Diff line number Diff line change
Expand Up @@ -4,121 +4,124 @@
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/

import QtQuick 2.2
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.1
import org.kde.kirigami 2.0 as Kirigami
import QtQuick 2.15
import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.20 as Kirigami
import org.kde.kdeconnect 1.0

Kirigami.ApplicationWindow
{
Kirigami.ApplicationWindow {
id: root
visible: true
width: 900
height: 500
property int columnWidth: Kirigami.Units.gridUnit * 13
minimumWidth: Kirigami.Units.gridUnit * 15
minimumHeight: Kirigami.Units.gridUnit * 15
wideScreen: width > columnWidth * 5
pageStack.globalToolBar.canContainHandles: true
pageStack.globalToolBar.showNavigationButtons: applicationWindow().pageStack.currentIndex > 0 ? Kirigami.ApplicationHeaderStyle.ShowBackButton : 0

globalDrawer: Kirigami.OverlayDrawer {
id: drawer
edge: Qt.application.layoutDirection === Qt.RightToLeft ? Qt.RightEdge : Qt.LeftEdge
modal: Kirigami.Settings.isMobile || (applicationWindow().width < Kirigami.Units.gridUnit * 50 && !collapsed) // Only modal when not collapsed, otherwise collapsed won't show.
drawerOpen: !Kirigami.Settings.isMobile
width: Kirigami.Units.gridUnit * 16
onModalChanged: if (!modal) {
drawerOpen = true;
}

onWideScreenChanged: {
if (wideScreen) {
drawer.open()
Behavior on width {
NumberAnimation {
duration: Kirigami.Units.longDuration
easing.type: Easing.InOutQuad
}
}
}
Kirigami.Theme.colorSet: Kirigami.Theme.Window

Kirigami.Action {
id: findDevicesAction
text: i18nd("kdeconnect-app", "Find devices...")
iconName: "list-add"
checked: pageStack.currentItem && pageStack.currentItem.objectName == "FindDevices"
handleClosedIcon.source: modal ? null : "sidebar-expand-left"
handleOpenIcon.source: modal ? null : "sidebar-collapse-left"
handleVisible: modal

onTriggered: {
root.pageStack.clear()
root.pageStack.push(Qt.resolvedUrl("FindDevicesPage.qml"));
}
}
leftPadding: 0
rightPadding: 0
topPadding: 0
bottomPadding: 0

globalDrawer: Kirigami.GlobalDrawer {
id: drawer
contentItem: ColumnLayout {
spacing: 0

modal: !root.wideScreen
handleVisible: !root.wideScreen

header: Kirigami.AbstractApplicationHeader {
topPadding: Kirigami.Units.smallSpacing
bottomPadding: Kirigami.Units.smallSpacing
leftPadding: Kirigami.Units.smallSpacing
rightPadding: Kirigami.Units.smallSpacing
contentItem: RowLayout {
anchors.fill: parent
spacing: Kirigami.Units.smallSpacing

DBusProperty {
id: announcedNameProperty
object: DaemonDbusInterface
read: "announcedName"
defaultValue: ""
}
QQC2.ToolBar {
Layout.fillWidth: true
Layout.preferredHeight: pageStack.globalToolBar.preferredHeight

TextField {
id: nameField
visible: false
Layout.fillWidth: true
text: announcedNameProperty.value
onAccepted: {
DaemonDbusInterface.setAnnouncedName(text)
text = Qt.binding(function() {return announcedNameProperty.value})
}
}
leftPadding: Kirigami.Units.largeSpacing
rightPadding: Kirigami.Units.largeSpacing
topPadding: Kirigami.Units.smallSpacing
bottomPadding: Kirigami.Units.smallSpacing

Kirigami.Heading {
level: 1
contentItem: Kirigami.Heading {
text: announcedNameProperty.value
Layout.fillWidth: true
visible: !nameField.visible
elide: Qt.ElideRight
}

Button {
icon.name: nameField.visible ? "dialog-ok-apply" : "entry-edit"
onClicked: {
nameField.visible = !nameField.visible
nameField.accepted()
DBusProperty {
id: announcedNameProperty
object: DaemonDbusInterface
read: "announcedName"
defaultValue: ""
}
}
}
}

property var objects: [findDevicesAction]
Instantiator {
model: DevicesSortProxyModel {
sourceModel: DevicesModel { displayFilter: DevicesModel.Paired | DevicesModel.Reachable }
}
delegate: Kirigami.Action {
icon.name: model.iconName
icon.color: "transparent"
text: model.name + "\n" + toolTip
visible: status & DevicesModel.Reachable
checked: pageStack.currentItem && pageStack.currentItem.currentDevice == device
onTriggered: {
Kirigami.BasicListItem {
id: findDevicesAction
text: i18nd("kdeconnect-app", "Find devices...")
icon: "list-add"
checked: pageStack.currentItem && pageStack.currentItem.objectName == "FindDevices"
Layout.fillWidth: true

onClicked: {
root.pageStack.clear()
root.pageStack.push(
Qt.resolvedUrl("DevicePage.qml"),
{currentDevice: device}
);
root.pageStack.push(Qt.resolvedUrl("FindDevicesPage.qml"));
}
}

onObjectAdded: {
drawer.objects.push(object)
drawer.objects = drawer.objects
Kirigami.Separator {
Layout.fillWidth: true
}
onObjectRemoved: {
var idx = drawer.objects.indexOf(object);
if (idx>=0) {
var removed = drawer.objects.splice(idx, 1)
drawer.objects = drawer.objects

Repeater {
model: DevicesSortProxyModel {
sourceModel: DevicesModel {
displayFilter: DevicesModel.Paired | DevicesModel.Reachable
}
}

Kirigami.BasicListItem {
Layout.fillWidth: true
text: model.name + "\n" + toolTip
enabled: status & DevicesModel.Reachable
checked: pageStack.currentItem && pageStack.currentItem.currentDevice == device
icon: model.iconName
iconColor: "transparent"
onClicked: {
root.pageStack.clear()
root.pageStack.push(
Qt.resolvedUrl("DevicePage.qml"),
{currentDevice: device}
);
}
}
}

Item {
Layout.fillHeight: true
Layout.fillWidth: true
}

Kirigami.BasicListItem {
text: i18n("Settings")
onClicked: pageStack.pushDialogLayer('qrc:/qml/Settings.qml');
}
}
actions: objects
}

contextDrawer: Kirigami.ContextDrawer {
Expand Down

0 comments on commit cd0db29

Please sign in to comment.