Commit 4d24924a authored by Nate Graham's avatar Nate Graham 🔩
Browse files

[Applet] Port to ExpandableListItem

Summary: Depends on D28033

Test Plan:
All functionality still works. There are minimal visual changes, mostly little things
to make the appearance consistent with other applets using the new `ExpandableListItem`
component.

{F8174619}

Reviewers: #vdg, #plasma, dantti, davidedmundson

Reviewed By: #plasma, davidedmundson

Subscribers: davidedmundson, kde-utils-devel

Differential Revision: https://phabricator.kde.org/D28036
parent 23b7c752
......@@ -9,7 +9,7 @@ set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE
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.70.0")
......
......@@ -71,8 +71,6 @@ FocusScope {
ListView {
id: printersView
property int currentExpanded: -1
anchors.fill: parent
opacity: 0
focus: true
......@@ -80,6 +78,8 @@ FocusScope {
clip: true
model: printersFilterModel
highlight: PlasmaComponents.Highlight{ }
highlightMoveDuration: units.longDuration
highlightResizeDuration: units.longDuration
delegate: PrinterItem { }
}
}
......
/*
* Copyright 2012-2013 Daniel Nicoletti <dantti12@gmail.com>
* Copyright 2014-2015 Jan Grulich <jgrulich@redhat.com>
* Copyright 2020 Nate Graham <nate@kde.org>
*
* 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);
}
]
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment