You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
4.0 KiB
125 lines
4.0 KiB
/******************************************************************** |
|
This file is part of the KDE project. |
|
|
|
Copyright (C) 2014 Martin Gräßlin <mgraesslin@kde.org> |
|
Copyright 2014 Sebastian Kügler <sebas@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, see <http://www.gnu.org/licenses/>. |
|
*********************************************************************/ |
|
import QtQuick 2.0 |
|
import QtQuick.Layouts 1.1 |
|
import QtGraphicalEffects 1.0 |
|
|
|
import org.kde.plasma.components 2.0 as PlasmaComponents |
|
import org.kde.kquickcontrolsaddons 2.0 as KQuickControlsAddons |
|
|
|
PlasmaComponents.ListItem { |
|
id: menuItem |
|
|
|
property bool supportsBarcodes |
|
property int maximumNumberOfPreviews: Math.floor(width / (units.gridUnit * 4 + units.smallSpacing)) |
|
readonly property real gradientThreshold: (label.width - toolButtonsLoader.width) / label.width |
|
|
|
signal itemSelected(string uuid) |
|
signal remove(string uuid) |
|
signal edit(string uuid) |
|
signal barcode(string text) |
|
signal action(string uuid) |
|
|
|
// the 1.6 comes from ToolButton's default height |
|
height: Math.max(label.height, Math.round(units.gridUnit * 1.6)) + 2 * units.smallSpacing |
|
|
|
enabled: true |
|
|
|
onClicked: { |
|
menuItem.itemSelected(UuidRole); |
|
if (plasmoid.hideOnWindowDeactivate) |
|
plasmoid.expanded = false; |
|
} |
|
onContainsMouseChanged: { |
|
if (containsMouse) { |
|
menuListView.currentIndex = index |
|
} else { |
|
menuListView.currentIndex = -1 |
|
} |
|
} |
|
|
|
ListView.onIsCurrentItemChanged: { |
|
if (ListView.isCurrentItem) { |
|
labelMask.source = label // calculate on demand |
|
} |
|
} |
|
|
|
// this stuff here is used so we can fade out the text behind the tool buttons |
|
Item { |
|
id: labelMaskSource |
|
anchors.fill: label |
|
visible: false |
|
|
|
Rectangle { |
|
anchors.centerIn: parent |
|
rotation: LayoutMirroring.enabled ? 90 : -90 // you cannot even rotate gradients without QtGraphicalEffects |
|
width: parent.height |
|
height: parent.width |
|
|
|
gradient: Gradient { |
|
GradientStop { position: 0.0; color: "white" } |
|
GradientStop { position: gradientThreshold - 0.25; color: "white"} |
|
GradientStop { position: gradientThreshold; color: "transparent"} |
|
GradientStop { position: 1; color: "transparent"} |
|
} |
|
} |
|
} |
|
|
|
OpacityMask { |
|
id: labelMask |
|
anchors.fill: label |
|
cached: true |
|
maskSource: labelMaskSource |
|
visible: !!source && menuItem.ListView.isCurrentItem |
|
} |
|
|
|
Item { |
|
id: label |
|
height: childrenRect.height |
|
visible: !menuItem.ListView.isCurrentItem |
|
anchors { |
|
left: parent.left |
|
leftMargin: units.gridUnit / 2 - listMargins.left |
|
right: parent.right |
|
verticalCenter: parent.verticalCenter |
|
} |
|
|
|
Loader { |
|
width: parent.width |
|
source: ["Text", "Image", "Url"][TypeRole] + "ItemDelegate.qml" |
|
} |
|
} |
|
|
|
Loader { |
|
id: toolButtonsLoader |
|
anchors { |
|
right: label.right |
|
verticalCenter: parent.verticalCenter |
|
} |
|
source: "DelegateToolButtons.qml" |
|
active: menuItem.ListView.isCurrentItem |
|
onActiveChanged: { |
|
if (active) { |
|
// break binding, once it was loaded, never unload |
|
active = true; |
|
} |
|
} |
|
} |
|
}
|
|
|