diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ project(print-manager VERSION ${RELEASE_SERVICE_VERSION}) set(QT_MIN_VERSION "5.9.0") -set(KF5_MIN_VERSION "5.62.0") +set(KF5_MIN_VERSION "5.69.0") diff --git a/plasmoid/package/contents/ui/PopupDialog.qml b/plasmoid/package/contents/ui/PopupDialog.qml --- a/plasmoid/package/contents/ui/PopupDialog.qml +++ b/plasmoid/package/contents/ui/PopupDialog.qml @@ -72,15 +72,15 @@ ListView { id: printersView - property int currentExpanded: -1 - anchors.fill: parent opacity: 0 focus: true currentIndex: -1 clip: true model: printersFilterModel highlight: PlasmaComponents.Highlight{ } + highlightMoveDuration: units.longDuration + highlightResizeDuration: units.longDuration delegate: PrinterItem { } } } diff --git a/plasmoid/package/contents/ui/PrinterItem.qml b/plasmoid/package/contents/ui/PrinterItem.qml --- a/plasmoid/package/contents/ui/PrinterItem.qml +++ b/plasmoid/package/contents/ui/PrinterItem.qml @@ -1,6 +1,7 @@ /* * Copyright 2012-2013 Daniel Nicoletti * Copyright 2014-2015 Jan Grulich + * Copyright 2020 Nate Graham * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as @@ -19,274 +20,54 @@ */ import QtQuick 2.2 -import org.kde.kquickcontrolsaddons 2.0 -import org.kde.plasma.core 2.0 as PlasmaCore +import QtQuick.Controls 2.9 + import org.kde.plasma.extras 2.0 as PlasmaExtras -import org.kde.plasma.components 2.0 as PlasmaComponents -import org.kde.kquickcontrolsaddons 2.0 as KQuickControlsAddons import org.kde.plasma.printmanager 0.2 as PrintManager -Item { - id: printerItem - - readonly property bool isPaused: printerState === 5 - readonly property bool expanded: ListView.view.currentExpanded == index - - height: container.childrenRect.height + Math.round(units.gridUnit / 2) - width: parent.width - Math.round(units.gridUnit / 2) - - MouseArea { - id: container - anchors.fill: parent - - hoverEnabled: true - onEntered: { - printerItem.ListView.view.currentIndex = index; - - //this is done to hide the highlight if the mouse moves out of the list view - //and we are not mouseoverring anything - if (printerItem.ListView.view.highlightItem) { - printerItem.ListView.view.highlightItem.opacity = 1 - } - } - onExited: { - if (printerItem.ListView.view.highlightItem) { - printerItem.ListView.view.highlightItem.opacity = 0 - } - } - onClicked: { - // the order is important, don't change since the last - // line resets the value of expanded and makes the code hard to read - // if it's not the last one - jobsFilterModel.filteredPrinters = expanded ? "" : printerName - printerItem.ListView.view.currentExpanded = expanded ? -1 : index; - } - - KQuickControlsAddons.QIconItem { - id: printerIcon - - anchors { - left: parent.left - leftMargin: units.smallSpacing - verticalCenter: labelsColumn.verticalCenter - } - - height: units.iconSizes.medium - width: height - icon: iconName - Behavior on opacity { PropertyAnimation {} } - } - - Column { - id: labelsColumn - - anchors { - top: parent.top - left: printerIcon.right - right: stateChangeButton.left - topMargin: units.smallSpacing - leftMargin: units.smallSpacing - rightMargin: units.smallSpacing - } - - PlasmaComponents.Label { - id: printerNameLabel - - anchors { - left: parent.left - right: parent.right - } - - height: paintedHeight - elide: Text.ElideRight - font.weight: isDefault ? Font.DemiBold : Font.Normal - text: printerName - } - - PlasmaComponents.Label { - id: printerStatusLabel - - anchors { - left: parent.left - right: parent.right - } - - height: paintedHeight - elide: Text.ElideRight - font.pointSize: theme.smallestFont.pointSize - opacity: 0.6 - text: stateMessage - } - } - - PlasmaComponents.ToolButton { - id: stateChangeButton - - anchors { - right: parent.right - rightMargin: Math.round(units.gridUnit / 2) - verticalCenter: printerIcon.verticalCenter - } - - iconSource: isPaused ? "media-playback-start" : "media-playback-pause" - tooltip: isPaused ? i18n("Resume printing") : i18n("Pause printing") - opacity: container.containsMouse ? 1 : 0 - visible: opacity != 0 +PlasmaExtras.ExpandableListItem { + readonly property bool isPaused: model.printerState === 5 - onClicked: toggleSelection() - } - - ListView { - id: actionsList - - anchors { - top: labelsColumn.bottom - left: printerIcon.right - right: stateChangeButton.left - leftMargin: Math.round(units.gridUnit / 2) - rightMargin: Math.round(units.gridUnit / 2) - } - interactive: false - model: ListModel { - Component.onCompleted: { - append({"name":i18n("Configure printer"), "icon":"configure", "actionType":1}) - append({"name":i18n("Open print queue"), "icon":"view-list-details", "actionType":2}) - } - } - property int actionIconHeight: units.iconSizes.medium * 0.8 - height: expanded ? ((actionIconHeight + Math.round(units.gridUnit / 2)) * 2) + Math.round(units.gridUnit / 4) : 0 - opacity: expanded ? 1 : 0 - highlight: PlasmaComponents.Highlight{} - delegate: actionItem - - - Behavior on opacity { NumberAnimation { duration: units.shortDuration * 3 } } - - Component.onCompleted: currentIndex = -1 - - Component { - id: actionItem - - Item { - height: Math.max(actionIcon.height, actionText.height + jobsCountText.height) + Math.round(units.gridUnit / 3) - width: actionsList.width - - PlasmaCore.IconItem { - id: actionIcon - - source: icon - height: actionsList.actionIconHeight - width: actionsList.actionIconHeight - - anchors { - left: parent.left - leftMargin: 3 - verticalCenter: actionLabels.verticalCenter - } - } - - Column { - id: actionLabels - - anchors { - left: actionIcon.right - leftMargin: 5 - right: parent.right - rightMargin: 3 - verticalCenter: parent.verticalCenter - } - - PlasmaComponents.Label { - id: actionText - - anchors { - left: parent.left - right: parent.right - } - - height: paintedHeight - verticalAlignment: Text.AlignVCenter - wrapMode: Text.WordWrap - text: name - } - - PlasmaComponents.Label { - id: jobsCountText - - anchors { - left: parent.left - right: parent.right - } - - height: actionType == 2 ? paintedHeight : 0 - elide: Text.ElideRight - font.pointSize: theme.smallestFont.pointSize - opacity: 0.6 - text: getJobsLabel() - } - } - - MouseArea { - anchors.fill: parent - hoverEnabled: true - - onEntered: { - actionsList.currentIndex = index; - actionsList.highlightItem.opacity = 1; - } - onExited: { - actionsList.highlightItem.opacity = 0; - } - onClicked: { - // Configure printer - if (actionType == 1) { - processRunner.configurePrinter(printerName) - // Open print queue - } else { - processRunner.openPrintQueue(printerName) - } - } - } - } - } - } - } - - states: [ - State { - name: "NORMAL" - when: !isPaused - }, - - State { - name: "PAUSED" - when: isPaused - PropertyChanges { target: printerNameLabel; opacity: 0.6 } - PropertyChanges { target: printerIcon; opacity: 0.6 } - } - ] - - function getJobsLabel() { + icon: model.iconName + iconEmblem: isPaused ? "emblem-pause" : "" + title: model.printerName + subtitle: { if (printmanager.jobsFilter == PrintManager.JobModel.WhichActive) { if (jobsFilterModel.count == 0) { - return i18n("No active jobs"); + return i18n("%1, no active jobs", model.stateMessage); } else { - return i18np("One active job", "%1 active jobs", jobsFilterModel.count); + return i18np("%1, %2 active job", "%1, %2 active jobs", model.stateMessage, jobsFilterModel.count); } } else { if (jobsFilterModel.count == 0) { - return i18n("No jobs"); + return i18n("%1, no jobs", model.stateMessage); } else { - return i18np("One job", "%1 jobs", jobsFilterModel.count); + return i18np("%1, %2 job", "%1, %2 jobs", model.stateMessage, jobsFilterModel.count); } } } - - function toggleSelection() { - if (isPaused) { - printersModel.resumePrinter(printerName) - } else { - printersModel.pausePrinter(printerName) + isDefault: model.isDefault + defaultActionButtonAction: Action { + icon.name: isPaused ? "media-playback-start" : "media-playback-pause" + text: isPaused ? i18n("Resume printing") : i18n("Pause printing") + onTriggered: { + if (isPaused) { + printersModel.resumePrinter(model.printerName); + } else { + printersModel.pausePrinter(model.printerName); + } } } + contextualActionsModel: [ + Action { + icon.name: "configure" + text: i18n("Configure printer...") + onTriggered: processRunner.configurePrinter(model.printerName); + }, + Action { + icon.name: "view-list-details" + text: i18n("View print queue") + onTriggered: processRunner.openPrintQueue(printerName); + } + ] }