diff options
Diffstat (limited to 'framework/qml/SelectableItem.qml')
-rw-r--r-- | framework/qml/SelectableItem.qml | 105 |
1 files changed, 35 insertions, 70 deletions
diff --git a/framework/qml/SelectableItem.qml b/framework/qml/SelectableItem.qml index feb70d8b..32d0f8b1 100644 --- a/framework/qml/SelectableItem.qml +++ b/framework/qml/SelectableItem.qml | |||
@@ -24,86 +24,51 @@ import QtQuick.Layouts 1.3 | |||
24 | 24 | ||
25 | QtObject { | 25 | QtObject { |
26 | id: root | 26 | id: root |
27 | property string text: null | 27 | property string text: "" |
28 | property var layout: null | 28 | property var layout: null |
29 | property var visualParent: layout.parent | 29 | property var visualParent: layout ? layout.parent : null |
30 | onVisualParentChanged: { | 30 | onVisualParentChanged: { |
31 | component.createObject(visualParent) | 31 | component.createObject(visualParent) |
32 | } | 32 | } |
33 | 33 | ||
34 | property var comp: Component { | 34 | /** |
35 | id: component | 35 | * This assumes a layout filled with labels. |
36 | Item { | 36 | * We iterate over all elements, extract the text, insert a linebreak after every line and a space otherwise. |
37 | anchors.fill: layout | 37 | */ |
38 | 38 | function gatherText() { | |
39 | /** | 39 | var gatheredText = ""; |
40 | * This assumes a layout filled with labels. | 40 | var length = layout.visibleChildren.length |
41 | * We iterate over all elements, extract the text, insert a linebreak after every line and a space otherwise. | 41 | for (var i = 0; i < length; i++) { |
42 | */ | 42 | var item = layout.visibleChildren[i] |
43 | function gatherText() { | ||
44 | var gatheredText = ""; | ||
45 | var length = layout.visibleChildren.length | ||
46 | for (var i = 0; i < length; i++) { | ||
47 | var item = layout.visibleChildren[i] | ||
48 | |||
49 | if (item && item.text) { | ||
50 | gatheredText += item.text; | ||
51 | } | ||
52 | if (layout.columns && (((i + 1) % layout.columns) == 0)) { | ||
53 | gatheredText += "\n"; | ||
54 | } else if (i != length - 1){ | ||
55 | gatheredText += " "; | ||
56 | } | ||
57 | } | ||
58 | // console.warn("Gathered text: ", gatheredText) | ||
59 | return gatheredText | ||
60 | } | ||
61 | 43 | ||
62 | Rectangle { | 44 | if (item && item.text) { |
63 | anchors.fill: parent | 45 | gatheredText += item.text; |
64 | color: "transparent" | ||
65 | border.color: Kube.Colors.highlightColor | ||
66 | border.width: 1 | ||
67 | visible: mouseArea.containsMouse || menu.visible | ||
68 | } | 46 | } |
69 | MouseArea { | 47 | if (layout.columns && (((i + 1) % layout.columns) == 0)) { |
70 | id: mouseArea | 48 | gatheredText += "\n"; |
71 | anchors.fill: parent | 49 | } else if (i != length - 1){ |
72 | hoverEnabled: true | 50 | gatheredText += " "; |
73 | acceptedButtons: Qt.RightButton | ||
74 | z: 1 | ||
75 | onClicked: { | ||
76 | menu.x = mouseX | ||
77 | menu.y = mouseY | ||
78 | menu.open() | ||
79 | mouse.accepted = true | ||
80 | } | ||
81 | } | 51 | } |
82 | Menu { | 52 | } |
83 | id: menu | 53 | // console.warn("Gathered text: ", gatheredText) |
54 | return gatheredText | ||
55 | } | ||
84 | 56 | ||
85 | height: menuLayout.height | 57 | property var comp: Component { |
86 | width: menuLayout.width | 58 | id: component |
87 | background: Rectangle { | 59 | ContextMenuOverlay { |
88 | anchors.fill: parent | 60 | id: menu |
89 | color: Kube.Colors.backgroundColor | 61 | anchors.fill: layout |
90 | } | 62 | Kube.TextButton { |
91 | RowLayout { | 63 | id: button |
92 | id: menuLayout | 64 | text: qsTr("Copy") |
93 | width: button.width | 65 | onClicked: { |
94 | height: button.height | 66 | if (root.text) { |
95 | Kube.TextButton { | 67 | clipboard.text = root.text |
96 | id: button | 68 | } else { |
97 | text: "Copy" | 69 | clipboard.text = gatherText() |
98 | onClicked: { | ||
99 | if (root.text) { | ||
100 | clipboard.text = root.text | ||
101 | } else { | ||
102 | clipboard.text = gatherText() | ||
103 | } | ||
104 | menu.close() | ||
105 | } | ||
106 | } | 70 | } |
71 | menu.close() | ||
107 | } | 72 | } |
108 | Kube.Clipboard { | 73 | Kube.Clipboard { |
109 | id: clipboard | 74 | id: clipboard |