Skip to content

Commit 1a6f165

Browse files
authored
Merge pull request #4797 from opengisch/tool_container
Implement a brand new QfToolButtonDrawer item and use it with digitizing tool button settings
2 parents 3bfad9a + 440959b commit 1a6f165

File tree

6 files changed

+300
-129
lines changed

6 files changed

+300
-129
lines changed

images/images.qrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
</qresource>
1313
<qresource prefix="/">
1414
<file>themes/qfield/nodpi/ic_3x3_grid_white_24dp.svg</file>
15+
<file>themes/qfield/nodpi/ic_digitizing_settings_black_24dp.svg</file>
1516
<file>themes/qfield/nodpi/ic_undo_white_24dp.svg</file>
1617
<file>themes/qfield/nodpi/ic_flash_auto_black_24dp.svg</file>
1718
<file>themes/qfield/nodpi/ic_flash_on_black_24dp.svg</file>
Lines changed: 5 additions & 0 deletions
Loading
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
import QtQuick 2.14
2+
import QtQuick.Controls 2.14
3+
4+
import Theme 1.0
5+
6+
Container {
7+
id: container
8+
9+
enum Direction {
10+
Up,
11+
Down,
12+
Left,
13+
Right
14+
}
15+
16+
property string name: ''
17+
property real size: 48
18+
property int direction: QfToolButtonDrawer.Direction.Down
19+
property bool collapsed: true
20+
property alias round: toggleButton.round
21+
property alias bgcolor: toggleButton.bgcolor
22+
property alias iconSource: toggleButton.iconSource
23+
property alias iconColor: toggleButton.iconColor
24+
25+
onNameChanged: {
26+
collapsed = settings.valueBool("QField/QfToolButtonContainer/"+name+"/collapsed", true)
27+
}
28+
29+
width: {
30+
switch(container.direction) {
31+
case QfToolButtonDrawer.Direction.Up:
32+
case QfToolButtonDrawer.Direction.Down:
33+
return size
34+
case QfToolButtonDrawer.Direction.Left:
35+
case QfToolButtonDrawer.Direction.Right:
36+
return collapsed ? size : size + content.contentWidth + container.spacing * 2
37+
}
38+
}
39+
height: {
40+
switch(container.direction) {
41+
case QfToolButtonDrawer.Direction.Up:
42+
case QfToolButtonDrawer.Direction.Down:
43+
return collapsed ? size : size + content.contentHeight + container.spacing * 2
44+
case QfToolButtonDrawer.Direction.Left:
45+
case QfToolButtonDrawer.Direction.Right:
46+
return size
47+
}
48+
}
49+
spacing: 4
50+
clip: true
51+
52+
Behavior on width {
53+
enabled: true
54+
NumberAnimation { duration: 200 }
55+
}
56+
57+
Behavior on height {
58+
enabled: true
59+
NumberAnimation { duration: 200 }
60+
}
61+
62+
contentItem: Rectangle {
63+
radius: size / 2
64+
color: Qt.hsla(toggleButton.bgcolor.hslHue, toggleButton.bgcolor.hslSaturation, toggleButton.bgcolor.hslLightness, 0.3)
65+
clip: true
66+
67+
ListView {
68+
id: content
69+
width: {
70+
switch(container.direction) {
71+
case QfToolButtonDrawer.Direction.Up:
72+
case QfToolButtonDrawer.Direction.Down:
73+
return container.size
74+
case QfToolButtonDrawer.Direction.Left:
75+
case QfToolButtonDrawer.Direction.Right:
76+
return content.contentWidth
77+
}
78+
}
79+
height: {
80+
switch(container.direction) {
81+
case QfToolButtonDrawer.Direction.Up:
82+
case QfToolButtonDrawer.Direction.Down:
83+
return content.contentHeight
84+
case QfToolButtonDrawer.Direction.Left:
85+
case QfToolButtonDrawer.Direction.Right:
86+
return container.size
87+
}
88+
}
89+
x: {
90+
switch (container.direction) {
91+
case QfToolButtonDrawer.Direction.Up:
92+
case QfToolButtonDrawer.Direction.Down:
93+
case QfToolButtonDrawer.Direction.Left:
94+
return container.spacing
95+
case QfToolButtonDrawer.Direction.Right:
96+
return container.size + container.spacing
97+
}
98+
}
99+
y: {
100+
switch (container.direction) {
101+
case QfToolButtonDrawer.Direction.Up:
102+
case QfToolButtonDrawer.Direction.Left:
103+
case QfToolButtonDrawer.Direction.Right:
104+
return container.spacing
105+
case QfToolButtonDrawer.Direction.Down:
106+
return container.size + container.spacing
107+
}
108+
}
109+
model: container.contentModel
110+
snapMode: ListView.SnapToItem
111+
orientation: container.direction === QfToolButtonDrawer.Direction.Up || container.direction === QfToolButtonDrawer.Direction.Down
112+
? ListView.Vertical
113+
: ListView.Horizontal
114+
spacing: container.spacing
115+
}
116+
117+
QfToolButton {
118+
id: toggleButton
119+
width: container.size
120+
height: container.size
121+
x: {
122+
switch(direction) {
123+
case QfToolButtonDrawer.Direction.Down:
124+
case QfToolButtonDrawer.Direction.Right:
125+
return 0
126+
case QfToolButtonDrawer.Direction.Up:
127+
case QfToolButtonDrawer.Direction.Left:
128+
return container.width - container.size
129+
}
130+
}
131+
y: {
132+
switch(direction) {
133+
case QfToolButtonDrawer.Direction.Down:
134+
case QfToolButtonDrawer.Direction.Right:
135+
return 0
136+
case QfToolButtonDrawer.Direction.Up:
137+
case QfToolButtonDrawer.Direction.Left:
138+
return container.height - container.size
139+
}
140+
}
141+
round: true
142+
143+
onClicked: {
144+
container.collapsed = !container.collapsed
145+
if (name != "") {
146+
settings.setValue("QField/QfToolButtonContainer/" + name + "/collapsed", container.collapsed)
147+
}
148+
}
149+
}
150+
}
151+
}

src/qml/imports/Theme/qmldir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ QfSlider 1.0 QfSlider.qml
55
QfSwitch 1.0 QfSwitch.qml
66
QfButton 1.0 QfButton.qml
77
QfToolButton 1.0 QfToolButton.qml
8+
QfToolButtonDrawer 1.0 QfToolButtonDrawer.qml
89
QfTextField 1.0 QfTextField.qml
910
QfCollapsibleMessage 1.0 QfCollapsibleMessage.qml
1011
QfDropShadow 1.0 QfDropShadow.qml

0 commit comments

Comments
 (0)