forked from ethereum/mix
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDropdownButton.qml
155 lines (144 loc) · 2.81 KB
/
DropdownButton.qml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Dialogs 1.1
import QtQuick.Layouts 1.1
import org.ethereum.qml.InverseMouseArea 1.0
Item
{
property string tooltip
property var actions: []
property string imageSource: "qrc:/qml/img/showmoreactions.png"
id: root
function init()
{
actionsModel.clear()
actionLabels.height = 0
for (var k in actions)
actionsModel.append({ index: k, label: actions[k].label })
}
InverseMouseArea
{
id: inverseMouse
anchors.fill: parent
active: false
onClickedOutside: {
for (var k = 0; k < actionsModel.count; k++)
{
if (actionsRepeater.itemAt(k).containsMouse())
return
}
actionLabels.visible = false
inverseMouse.active = false
}
}
ScenarioButton
{
id: labelButton
roundLeft: false
roundRight: false
width: parent.width
height: parent.height
sourceImg: imageSource
text: tooltip
onClicked:
{
btnClicked()
}
function btnClicked()
{
if (actionLabels.visible)
actionLabels.visible = false
else
{
parent.init()
var top = labelButton;
while (top.parent)
top = top.parent
actionLabels.parent = top
var globalCoord = labelButton.mapToItem(null, 0, 0);
actionLabels.x = globalCoord.x + labelButton.width
actionLabels.y = globalCoord.y
actionLabels.z = 50
actionLabels.visible = true
inverseMouse.active = true
}
}
}
Rectangle
{
id: actionLabels
visible: false
width: (5 * appSettings.systemPointSize) + minWidth
property int minHeight: 35
property int minWidth: 150
Connections
{
target: appSettings
onSystemPointSizeChanged:
{
updateSize()
}
Component.onCompleted:
{
updateSize()
}
function updateSize()
{
if (actionLabels.visible)
{
actionLabels.visible = falses
labelButton.btnClicked()
}
}
}
ColumnLayout
{
id: actionsCol
spacing: 5
ListModel
{
id: actionsModel
}
Repeater
{
id: actionsRepeater
model: actionsModel
Rectangle
{
function containsMouse()
{
return mouseAreaAction.containsMouse
}
color: mouseAreaAction.containsMouse ? "#cccccc" : "transparent"
width: actionLabels.width
height: labelAction.height + 10
Component.onCompleted:
{
actionLabels.height += height + actionsCol.spacing
}
DefaultLabel
{
text: actions[index].label
elide: Text.ElideRight
id: labelAction
anchors.left: parent.left
anchors.leftMargin: 10
anchors.verticalCenter: parent.verticalCenter
MouseArea
{
id: mouseAreaAction
anchors.fill: parent
hoverEnabled: true
onClicked:
{
actions[index].action()
actionLabels.visible = false
}
}
}
}
}
}
}
}