Warning, /plasma/plasma-workspace/applets/clipboard/contents/ui/ClipboardItemDelegate.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
0003 SPDX-FileCopyrightText: 2014 Sebastian Kügler <sebas@kde.org>
0004
0005 SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007
0008 import QtQuick
0009 import QtQuick.Layouts 1.1
0010 import Qt5Compat.GraphicalEffects
0011
0012 import org.kde.plasma.plasmoid 2.0
0013 import org.kde.plasma.components 3.0 as PlasmaComponents
0014 import org.kde.kirigami 2.20 as Kirigami
0015
0016 PlasmaComponents.ItemDelegate {
0017 id: menuItem
0018
0019 property bool supportsBarcodes
0020 property int maximumNumberOfPreviews: Math.floor(width / (Kirigami.Units.gridUnit * 4 + Kirigami.Units.smallSpacing))
0021 readonly property real gradientThreshold: (label.width - toolButtonsLoader.width) / label.width
0022 // Consider tall to be > about 1.5x the default height for purposes of top-aligning
0023 // the buttons to preserve Fitts' Law when deleting multiple items in a row,
0024 // or else the top-alignment doesn't look deliberate enough and people will think
0025 // it's a bug
0026 readonly property bool isTall: height > Math.round(Kirigami.Units.gridUnit * 2.5)
0027
0028 signal itemSelected(string uuid)
0029 signal remove(string uuid)
0030 signal edit(string uuid)
0031 signal barcode(string text)
0032 signal triggerAction(string uuid)
0033
0034 // the 1.6 comes from ToolButton's default height
0035 height: Math.max(label.height, Math.round(Kirigami.Units.gridUnit * 1.6)) + 2 * Kirigami.Units.smallSpacing
0036
0037 enabled: true
0038
0039 onClicked: {
0040 menuItem.itemSelected(UuidRole);
0041 if (main.hideOnWindowDeactivate) {
0042 main.expanded = false;
0043 } else {
0044 forceActiveFocus(); // Or activeFocus will always be false after clicking buttons in the heading
0045 }
0046 }
0047
0048 Keys.onEnterPressed: event => Keys.returnPressed(event)
0049 Keys.onReturnPressed: menuItem.clicked()
0050 Keys.onDeletePressed: {
0051 remove(UuidRole);
0052 }
0053
0054 ListView.onIsCurrentItemChanged: {
0055 if (ListView.isCurrentItem) {
0056 labelMask.source = label // calculate on demand
0057 }
0058 }
0059
0060 // this stuff here is used so we can fade out the text behind the tool buttons
0061 Item {
0062 id: labelMaskSource
0063 anchors.fill: label
0064 visible: false
0065
0066 Rectangle {
0067 anchors.centerIn: parent
0068 rotation: LayoutMirroring.enabled ? 90 : -90 // you cannot even rotate gradients without Qt5Compat.GraphicalEffects
0069 width: parent.height
0070 height: parent.width
0071
0072 gradient: Gradient {
0073 GradientStop { position: 0.0; color: "white" }
0074 GradientStop { position: gradientThreshold - 0.25; color: "white"}
0075 GradientStop { position: gradientThreshold; color: "transparent"}
0076 GradientStop { position: 1; color: "transparent"}
0077 }
0078 }
0079 }
0080
0081 OpacityMask {
0082 id: labelMask
0083 anchors.fill: label
0084 cached: true
0085 maskSource: labelMaskSource
0086 visible: !!source && menuItem.ListView.isCurrentItem
0087
0088 TapHandler {
0089 enabled: !toolButtonsLoader.item?.hovered // https://bugreports.qt.io/browse/QTBUG-108821
0090 onTapped: {
0091 menuItem.clicked() // https://bugreports.qt.io/browse/QTBUG-63395
0092 }
0093 }
0094
0095 DragHandler {
0096 id: dragHandler
0097 enabled: !toolButtonsLoader.item?.hovered
0098 }
0099 }
0100
0101 Item {
0102 id: label
0103 height: childrenRect.height
0104 visible: !menuItem.ListView.isCurrentItem
0105 anchors {
0106 left: parent.left
0107 leftMargin: Math.ceil(Kirigami.Units.gridUnit / 2) - listMargins.left
0108 right: parent.right
0109 rightMargin: Math.ceil(Kirigami.Units.gridUnit / 2) - listMargins.right
0110 verticalCenter: parent.verticalCenter
0111 }
0112
0113 Loader {
0114 width: parent.width
0115 source: ["Text", "Image", "Url"][TypeRole] + "ItemDelegate.qml"
0116 }
0117 }
0118
0119 Loader {
0120 id: toolButtonsLoader
0121
0122 anchors {
0123 right: label.right
0124 verticalCenter: parent.verticalCenter
0125 // This is here because you can't assign to it in AnchorChanges below
0126 topMargin: Math.ceil(Kirigami.Units.gridUnit / 2) - listMargins.top
0127 }
0128 source: "DelegateToolButtons.qml"
0129 active: menuItem.ListView.isCurrentItem
0130
0131 // It's not recommended to change anchors via conditional bindings, use AnchorChanges instead.
0132 // See https://doc.qt.io/qt-5/qtquick-positioning-anchors.html#changing-anchors
0133 states: [
0134 State {
0135 when: menuItem.isTall
0136
0137 AnchorChanges {
0138 target: toolButtonsLoader
0139 anchors.top: parent.top
0140 anchors.verticalCenter: undefined
0141 }
0142 }
0143 ]
0144
0145 onActiveChanged: {
0146 if (active) {
0147 menuItem.KeyNavigation.tab = toolButtonsLoader.item.children[0]
0148 menuItem.KeyNavigation.right = toolButtonsLoader.item.children[0]
0149 // break binding, once it was loaded, never unload
0150 active = true;
0151 }
0152 }
0153 }
0154 }