2021-09-29 17:10:18 +00:00
|
|
|
/*
|
|
|
|
Copyright (C) 2011 Martin Gräßlin <mgraesslin@kde.org>
|
|
|
|
Copyright (C) 2012 Gregor Taetzner <gregor@freenet.de>
|
|
|
|
Copyright 2014 Sebastian Kügler <sebas@kde.org>
|
|
|
|
Copyright (C) 2015-2018 Eike Hein <hein@kde.org>
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
*/
|
|
|
|
import QtQuick 2.0
|
|
|
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
|
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
|
|
import org.kde.draganddrop 2.0
|
|
|
|
import QtGraphicalEffects 1.15
|
|
|
|
|
|
|
|
import "code/tools.js" as Tools
|
|
|
|
|
|
|
|
Item {
|
|
|
|
id: listItem
|
|
|
|
|
|
|
|
enabled: !model.disabled && !(model.display === "" || model.display === "Recent Applications")
|
|
|
|
visible: !(model.display === "" || model.display === "Recent Applications")
|
|
|
|
width: ListView.view.width
|
2022-04-19 20:04:22 +00:00
|
|
|
height: model.display === "" || model.display === "Recent Applications" ? 0 : (PlasmaCore.Units.smallSpacing) + Math.max(elementIcon.height, titleElement.implicitHeight + subTitleElement.implicitHeight)
|
|
|
|
//height: 36
|
2021-09-29 17:10:18 +00:00
|
|
|
|
|
|
|
signal reset
|
|
|
|
signal actionTriggered(string actionId, variant actionArgument)
|
|
|
|
signal aboutToShowActionMenu(variant actionMenu)
|
|
|
|
signal addBreadcrumb(var model, string title)
|
|
|
|
|
|
|
|
readonly property int itemIndex: model.index
|
|
|
|
readonly property string url: model.url || ""
|
|
|
|
readonly property var decoration: model.decoration || ""
|
|
|
|
|
|
|
|
property bool dropEnabled: false
|
|
|
|
property bool appView: false
|
|
|
|
property bool modelChildren: model.hasChildren || false
|
|
|
|
property bool isCurrent: listItem.ListView.view.currentIndex === index;
|
|
|
|
property bool showAppsByName: plasmoid.configuration.showAppsByName
|
|
|
|
|
|
|
|
property bool hasActionList: ((model.favoriteId !== null)
|
|
|
|
|| (("hasActionList" in model) && (model.hasActionList === true)))
|
|
|
|
property Item menu: actionMenu
|
|
|
|
property alias usePlasmaIcon: elementIcon.usesPlasmaTheme
|
|
|
|
|
|
|
|
onAboutToShowActionMenu: {
|
|
|
|
var actionList = hasActionList ? model.actionList : [];
|
|
|
|
Tools.fillActionMenu(i18n, actionMenu, actionList, ListView.view.model.favoritesModel, model.favoriteId);
|
|
|
|
}
|
|
|
|
|
|
|
|
onActionTriggered: {
|
2022-04-19 20:04:22 +00:00
|
|
|
|
|
|
|
plasmoid.expanded = false;
|
2021-09-29 17:10:18 +00:00
|
|
|
if (Tools.triggerAction(ListView.view.model, model.index, actionId, actionArgument) === true) {
|
|
|
|
plasmoid.expanded = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (actionId.indexOf("_kicker_favorite_") === 0) {
|
|
|
|
switchToInitial();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function activate() {
|
|
|
|
var view = listItem.ListView.view;
|
|
|
|
|
|
|
|
if (model.hasChildren) {
|
|
|
|
var childModel = view.model.modelForRow(index);
|
|
|
|
|
|
|
|
listItem.addBreadcrumb(childModel, display);
|
|
|
|
view.model = childModel;
|
|
|
|
} else {
|
|
|
|
plasmoid.expanded = false;
|
2022-04-19 20:04:22 +00:00
|
|
|
view.model.trigger(index, "", null);
|
2021-09-29 17:10:18 +00:00
|
|
|
listItem.reset();
|
|
|
|
}
|
2022-04-19 20:04:22 +00:00
|
|
|
|
2021-09-29 17:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function openActionMenu(x, y) {
|
|
|
|
aboutToShowActionMenu(actionMenu);
|
|
|
|
actionMenu.visualParent = listItem;
|
|
|
|
actionMenu.open(x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
ActionMenu {
|
|
|
|
id: actionMenu
|
|
|
|
|
|
|
|
onActionClicked: {
|
|
|
|
actionTriggered(actionId, actionArgument);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
PlasmaCore.IconItem {
|
|
|
|
id: elementIcon
|
|
|
|
|
|
|
|
anchors {
|
|
|
|
left: parent.left
|
|
|
|
leftMargin: PlasmaCore.Units.smallSpacing * 2
|
|
|
|
verticalCenter: parent.verticalCenter
|
|
|
|
}
|
|
|
|
width: PlasmaCore.Units.iconSizes.medium
|
|
|
|
height: width
|
|
|
|
|
|
|
|
animated: false
|
|
|
|
usesPlasmaTheme: false
|
|
|
|
|
|
|
|
source: model.decoration
|
|
|
|
}
|
|
|
|
|
|
|
|
PlasmaComponents.Label {
|
|
|
|
id: titleElement
|
|
|
|
|
|
|
|
y: Math.round((parent.height - titleElement.height - ( (subTitleElement.text != "") ? subTitleElement.implicitHeight : 0) ) / 2)
|
|
|
|
anchors {
|
|
|
|
//bottom: elementIcon.verticalCenter
|
|
|
|
left: elementIcon.right
|
|
|
|
right: arrow.left
|
|
|
|
leftMargin: PlasmaCore.Units.smallSpacing * 4
|
|
|
|
rightMargin: PlasmaCore.Units.smallSpacing * 6
|
|
|
|
}
|
|
|
|
height: implicitHeight //undo PC2 height override, remove when porting to PC3
|
|
|
|
// TODO: games should always show the by name!
|
|
|
|
text: model.display
|
|
|
|
elide: Text.ElideRight
|
|
|
|
horizontalAlignment: Text.AlignLeft
|
|
|
|
color: "#000000"
|
|
|
|
}
|
|
|
|
|
|
|
|
PlasmaComponents.Label {
|
|
|
|
id: subTitleElement
|
|
|
|
|
|
|
|
anchors {
|
|
|
|
left: titleElement.left
|
|
|
|
right: arrow.right
|
|
|
|
top: titleElement.bottom
|
|
|
|
}
|
|
|
|
height: implicitHeight
|
|
|
|
color: "#000000"
|
|
|
|
text: model.description || ""
|
|
|
|
opacity: isCurrent ? 0.8 : 0.6
|
|
|
|
font: theme.smallestFont
|
|
|
|
elide: Text.ElideMiddle
|
|
|
|
horizontalAlignment: Text.AlignLeft
|
|
|
|
}
|
|
|
|
|
|
|
|
PlasmaCore.SvgItem {
|
|
|
|
id: arrow
|
|
|
|
|
|
|
|
anchors {
|
|
|
|
right: parent.right
|
|
|
|
rightMargin: PlasmaCore.Units.smallSpacing * 6
|
|
|
|
verticalCenter: parent.verticalCenter
|
|
|
|
}
|
|
|
|
|
|
|
|
width: visible ? PlasmaCore.Units.iconSizes.small : 0
|
|
|
|
height: width
|
|
|
|
|
|
|
|
visible: (model.hasChildren === true)
|
2022-11-20 00:17:12 +00:00
|
|
|
opacity: (listItem.ListView.view.currentIndex === index) ? 1.0 : 1.0
|
2021-09-29 17:10:18 +00:00
|
|
|
|
|
|
|
svg: arrowsSvg
|
2022-11-20 00:17:12 +00:00
|
|
|
elementId: (Qt.application.layoutDirection == Qt.RightToLeft) ? "left-arrow-black" : "right-arrow-black"
|
|
|
|
/*Colorize {
|
2021-09-29 17:10:18 +00:00
|
|
|
anchors.fill: arrow
|
|
|
|
source: arrow
|
|
|
|
hue: 0
|
|
|
|
saturation: 0.0
|
|
|
|
lightness: -0.6
|
2022-11-20 00:17:12 +00:00
|
|
|
}*/
|
2021-09-29 17:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Keys.onPressed: {
|
|
|
|
if (event.key === Qt.Key_Menu && hasActionList) {
|
|
|
|
event.accepted = true;
|
|
|
|
openActionMenu();
|
|
|
|
} else if ((event.key === Qt.Key_Enter || event.key === Qt.Key_Return) && !modelChildren) {
|
|
|
|
if (!modelChildren) {
|
|
|
|
event.accepted = true;
|
|
|
|
listItem.activate();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} // listItem
|