Warning, /plasma/plasma-workspace/applets/clipboard/contents/ui/UrlItemDelegate.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 2.15
0009 
0010 import org.kde.plasma.components 3.0 as PlasmaComponents3
0011 import org.kde.kquickcontrolsaddons 2.0 as KQuickControlsAddons
0012 import org.kde.kirigami 2.20 as Kirigami
0013 
0014 Item {
0015     id: previewItem
0016     height: Kirigami.Units.gridUnit * 4 + Kirigami.Units.smallSpacing * 2
0017 
0018     Drag.active: dragHandler.active
0019     Drag.dragType: Drag.Automatic
0020     Drag.supportedActions: Qt.CopyAction
0021     Drag.mimeData: {
0022         "text/uri-list": DisplayRole.split(" "),
0023     }
0024 
0025     ListView {
0026         id: previewList
0027         model: DisplayRole.split(" ", maximumNumberOfPreviews)
0028         property int itemWidth: Kirigami.Units.gridUnit * 4
0029         property int itemHeight: Kirigami.Units.gridUnit * 4
0030         interactive: false
0031 
0032         spacing: Kirigami.Units.smallSpacing
0033         orientation: Qt.Horizontal
0034         width: (itemWidth + spacing) * model.length
0035         anchors {
0036             top: parent.top
0037             left: parent.left
0038             bottom: parent.bottom
0039         }
0040 
0041         delegate: Item {
0042             width: previewList.itemWidth
0043             height:  previewList.itemHeight
0044             y: Math.round((parent.height - previewList.itemHeight) / 2)
0045             clip: true
0046 
0047             KQuickControlsAddons.QPixmapItem {
0048                 id: previewPixmap
0049 
0050                 anchors.centerIn: parent
0051 
0052                 Component.onCompleted: {
0053                     function result(job) {
0054                         if (!job.error) {
0055                             pixmap = job.result.preview;
0056                             previewPixmap.width = job.result.previewWidth
0057                             previewPixmap.height = job.result.previewHeight
0058                         }
0059                     }
0060                     var service = clipboardSource.serviceForSource(UuidRole)
0061                     var operation = service.operationDescription("preview");
0062                     operation.url = modelData;
0063                     // We request a bigger size and then clip out a square in the middle
0064                     // so we get uniform delegate sizes without distortion
0065                     operation.previewWidth = previewList.itemWidth * 2;
0066                     operation.previewHeight = previewList.itemHeight * 2;
0067                     var serviceJob = service.startOperationCall(operation);
0068                     serviceJob.finished.connect(result);
0069                 }
0070             }
0071             Rectangle {
0072                 id: overlay
0073                 color: Kirigami.Theme.textColor
0074                 opacity: 0.6
0075                 height: Kirigami.Units.gridUnit
0076                 anchors {
0077                     left: parent.left
0078                     right: parent.right
0079                     bottom: parent.bottom
0080                 }
0081             }
0082             PlasmaComponents3.Label {
0083                 font: Kirigami.Theme.smallFont
0084                 color: Kirigami.Theme.backgroundColor
0085                 maximumLineCount: 1
0086                 anchors {
0087                     verticalCenter: overlay.verticalCenter
0088                     left: overlay.left
0089                     right: overlay.right
0090                     leftMargin: Kirigami.Units.smallSpacing
0091                     rightMargin: Kirigami.Units.smallSpacing
0092                 }
0093                 elide: Text.ElideRight
0094                 horizontalAlignment: Text.AlignHCenter
0095                 text: {
0096                     var u = modelData.split("/");
0097                     return decodeURIComponent(u[u.length - 1]);
0098                 }
0099                 textFormat: Text.PlainText
0100             }
0101         }
0102     }
0103     PlasmaComponents3.Label {
0104         property int additionalItems: DisplayRole.split(" ").length - maximumNumberOfPreviews
0105         visible: additionalItems > 0
0106         opacity: 0.6
0107         text: i18nc("Indicator that there are more urls in the clipboard than previews shown", "+%1", additionalItems)
0108         textFormat: Text.PlainText
0109         anchors {
0110             left: previewList.right
0111             right: parent.right
0112             bottom: parent.bottom
0113             margins: Kirigami.Units.smallSpacing
0114 
0115         }
0116         verticalAlignment: Text.AlignBottom
0117         horizontalAlignment: Text.AlignCenter
0118         font: Kirigami.Theme.smallFont
0119     }
0120 }