Warning, /plasma/plasma-workspace/applets/clipboard/contents/ui/ClipboardPage.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 Kai Uwe Broulik <kde@privat.broulik.de>
0004
0005 SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007
0008 import QtQuick 2.4
0009 import QtQuick.Controls as QQC
0010 import QtQuick.Layouts 1.1
0011
0012 import org.kde.plasma.plasmoid 2.0
0013 import org.kde.plasma.core as PlasmaCore
0014 import org.kde.plasma.components 3.0 as PlasmaComponents3
0015 import org.kde.plasma.extras 2.0 as PlasmaExtras
0016 import org.kde.kitemmodels 1.0 as KItemModels
0017
0018 import org.kde.kirigami 2.19 as Kirigami // for InputMethod.willShowOnActive
0019
0020 Menu {
0021 id: clipboardMenu
0022
0023 Keys.onPressed: event => {
0024 function forwardToFilter() {
0025 if (filter.enabled && event.text !== "" && !filter.activeFocus) {
0026 clipboardMenu.view.currentIndex = -1
0027 if (event.matches(StandardKey.Paste)) {
0028 filter.paste();
0029 } else {
0030 filter.text = "";
0031 filter.text += event.text;
0032 }
0033 filter.forceActiveFocus();
0034 event.accepted = true;
0035 }
0036 }
0037 if (stack.currentItem !== clipboardMenu) {
0038 event.accepted = false;
0039 return;
0040 }
0041 switch(event.key) {
0042 case Qt.Key_Escape: {
0043 if (filter.text != "") {
0044 filter.text = "";
0045 event.accepted = true;
0046 }
0047 break;
0048 }
0049 case Qt.Key_F: {
0050 if (event.modifiers & Qt.ControlModifier) {
0051 filter.forceActiveFocus();
0052 filter.selectAll();
0053 event.accepted = true;
0054 } else {
0055 forwardToFilter();
0056 }
0057 break;
0058 }
0059 case Qt.Key_Tab:
0060 case Qt.Key_Backtab: {
0061 // prevent search filter from getting Tab key events
0062 break;
0063 }
0064 case Qt.Key_Backspace: {
0065 // filter.text += event.text wil break if the key is backspace
0066 filter.forceActiveFocus();
0067 filter.text = filter.text.slice(0, -1);
0068 event.accepted = true;
0069 break;
0070 }
0071 default: {
0072 forwardToFilter();
0073 }
0074 }
0075 }
0076
0077 Keys.forwardTo: [stack.currentItem]
0078
0079 property var header: PlasmaExtras.PlasmoidHeading {
0080 // This uses expanded to ensure the binding gets reevaluated
0081 // when the plasmoid is shown again and that way ensure we are
0082 // always in the correct state on show.
0083 focus: main.expanded
0084
0085 contentItem: RowLayout {
0086 enabled: clipboardMenu.model.count > 0 || filter.text.length > 0
0087
0088 PlasmaExtras.SearchField {
0089 id: filter
0090 Layout.fillWidth: true
0091
0092 focus: !Kirigami.InputMethod.willShowOnActive
0093
0094 KeyNavigation.up: dialogItem.KeyNavigation.up /* ToolBar */
0095 KeyNavigation.down: clipboardMenu.contentItem.count > 0 ? clipboardMenu.contentItem /* ListView */ : null
0096 KeyNavigation.right: clearHistoryButton.visible ? clearHistoryButton : null
0097 Keys.onDownPressed: event => {
0098 clipboardMenu.view.incrementCurrentIndex();
0099 event.accepted = false;
0100 }
0101
0102 Connections {
0103 target: main
0104 function onClearSearchField() {
0105 filter.clear()
0106 }
0107 }
0108 }
0109 PlasmaComponents3.ToolButton {
0110 id: clearHistoryButton
0111 visible: !(Plasmoid.containmentDisplayHints & PlasmaCore.Types.ContainmentDrawsPlasmoidHeading) && main.clearHistoryAction.visible
0112
0113 icon.name: "edit-clear-history"
0114
0115 display: PlasmaComponents3.AbstractButton.IconOnly
0116 text: main.clearHistoryAction.text
0117
0118 onClicked: {
0119 clipboardSource.service("", "clearHistory")
0120 filter.clear()
0121 }
0122
0123 PlasmaComponents3.ToolTip {
0124 text: parent.text
0125 }
0126 }
0127 }
0128 }
0129
0130 model: KItemModels.KSortFilterProxyModel {
0131 sourceModel: clipboardSource.models.clipboard
0132 filterRoleName: "DisplayRole"
0133 filterRegularExpression: RegExp(filter.text, "i")
0134 }
0135 supportsBarcodes: {
0136 try {
0137 let prisonTest = Qt.createQmlObject("import QtQml 2.0; import org.kde.prison 1.0; QtObject {}", this);
0138 prisonTest.destroy();
0139 } catch (e) {
0140 console.log("Barcodes not supported:", e);
0141 return false;
0142 }
0143 return true;
0144 }
0145 onItemSelected: uuid => clipboardSource.service(uuid, "select")
0146 onRemove: uuid => clipboardSource.service(uuid, "remove")
0147 onEdit: uuid => {
0148 const m = clipboardMenu.model;
0149 const index = m.index(clipboardMenu.view.currentIndex, 0);
0150 const text = m.data(index, Qt.DisplayRole);
0151 stack.push(Qt.resolvedUrl("EditPage.qml"), { text, uuid });
0152 }
0153 onBarcode: text => {
0154 stack.push(Qt.resolvedUrl("BarcodePage.qml"), {
0155 text: text
0156 });
0157 }
0158 onTriggerAction: uuid => clipboardSource.service(uuid, "action")
0159 }