/*SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org>SPDX-FileCopyrightText: 2022 Carson Black <uhhadd@gmail.com>SPDX-License-Identifier: GPL-2.0-or-later*/pragma ComponentBehavior: Boundimport QtQuick 2.15import QtQuick.Layouts 1.10import org.kde.plasma.plasmoid 2.0import org.kde.plasma.core as PlasmaCoreimport org.kde.plasma.components as PlasmaComponentsimport org.kde.plasma.extras 2.0 as PlasmaExtrasimport org.kde.kirigami 2.20 as Kirigamiimport org.kde.taskmanager 0.1 as TaskManagerPlasmoidItem {id: rootPlasmoid.constraintHints: Plasmoid.CanFillAreacompactRepresentation: windowListButtonfullRepresentation: windowListswitchWidth: Kirigami.Units.gridUnit * 8switchHeight: Kirigami.Units.gridUnit * 6TaskManager.TasksModel {id: tasksModelsortMode: TaskManager.TasksModel.SortVirtualDesktopgroupMode: TaskManager.TasksModel.GroupDisabled}Component {id: windowListListView {id: windowListViewclip: trueLayout.preferredWidth: Kirigami.Units.gridUnit * 10Layout.preferredHeight: Kirigami.Units.gridUnit * 12model: tasksModeldelegate: PlasmaComponents.ItemDelegate {id: delegaterequired property var modelrequired property var decorationwidth: ListView.view.widthcontentItem: RowLayout {spacing: Kirigami.Units.smallSpacingKirigami.Icon {id: iconItemsource: delegate.decorationvisible: source !== "" && iconItem.validimplicitWidth: Kirigami.Units.iconSizes.sizeForLabelsimplicitHeight: Kirigami.Units.iconSizes.sizeForLabels}// Fall back to a generic icon if the application doesn't provide a valid oneKirigami.Icon {source: "preferences-system-windows"visible: !iconItem.validimplicitWidth: Kirigami.Units.iconSizes.sizeForLabelsimplicitHeight: Kirigami.Units.iconSizes.sizeForLabels}PlasmaComponents.Label {Layout.fillWidth: truetext: delegate.model.displaytextFormat: Text.PlainTextelide: Text.ElideRight}}onClicked: tasksModel.requestActivate(tasksModel.makeModelIndex(model.index))}Kirigami.PlaceholderMessage {anchors.centerIn: parentwidth: parent.width - (Kirigami.Units.largeSpacing * 2)visible: windowListView.count === 0icon.source: "edit-none"text: i18nc("@info:placeholder", "No open windows")}}}// Only exists because the default CompactRepresentation doesn't expose the// ability to show text below or beside the icon.// TODO remove once it gains that feature.Component {id: windowListButtonMenuButton {Layout.minimumWidth: implicitWidthLayout.maximumWidth: implicitWidthLayout.fillHeight: Plasmoid.formFactor === PlasmaCore.Types.HorizontalLayout.fillWidth: Plasmoid.formFactor === PlasmaCore.Types.VerticalonClicked: tasksMenu.open()down: pressed || tasksMenu.status === PlasmaExtras.Menu.OpenAccessible.name: Plasmoid.titleAccessible.description: root.toolTipSubTexttext: if (tasksModel.activeTask.valid) {return tasksModel.data(tasksModel.activeTask, TaskManager.AbstractTasksModel.AppName) ||tasksModel.data(tasksModel.activeTask, 0 /* display name, window title if app name not present */)} else {return i18n("Plasma Desktop")}iconSource: if (tasksModel.activeTask.valid) {return tasksModel.data(tasksModel.activeTask, 1 /* decorationrole */)} else {return "start-here-kde-symbolic"}PlasmaExtras.ModelContextMenu {id: tasksMenuplacement: {if (Plasmoid.location === PlasmaCore.Types.LeftEdge) {return PlasmaExtras.Menu.RightPosedTopAlignedPopup} else if (Plasmoid.location === PlasmaCore.Types.TopEdge) {return PlasmaExtras.Menu.BottomPosedLeftAlignedPopup} else if (Plasmoid.location === PlasmaCore.Types.RightEdge) {return PlasmaExtras.Menu.LeftPosedTopAlignedPopup} else {return PlasmaExtras.Menu.TopPosedLeftAlignedPopup}}property ListModel noWindowModel: ListModel {ListElement {display: "No open windows"decoration: "edit-none"}}model: tasksModel.count === 0 ? noWindowModel : tasksModelonClicked: (model) => {if (tasksModel.count > 0) {tasksModel.requestActivate(tasksModel.makeModelIndex(model.index));}}}}}}