blob: fc8fb1cc128799899acf6d156b5ac09760a93a3b (
plain)
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
|
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
import QtQuick 2.15
import QtQuick.Layouts 1.15
import HelperWidgets 2.0
import QtQuickDesignerTheme 1.0
import StudioControls 1.0 as StudioControls
import StudioTheme 1.0 as StudioTheme
SectionLayout {
id: anchorRow
opacity: enabled ? 1 : 0.5
property variant anchorMargin
property alias iconSource: iconLabel.icon
property alias targetName: targetComboBox.targetName
property alias currentText: targetComboBox.currentText
property alias relativeTarget: buttonRow.relativeTarget
property alias buttonRow: buttonRow
property bool verticalAnchor
property bool invertRelativeTargets: false
property bool showAlternativeTargets: true
signal targetChanged
signal sameEdgeButtonClicked
signal centerButtonClicked
signal oppositeEdgeButtonClicked
PropertyLabel { text: qsTr("Target") }
SecondColumnLayout {
IconLabel {
id: iconLabel
implicitWidth: StudioTheme.Values.actionIndicatorWidth
horizontalAlignment: Text.AlignLeft
}
TargetComboBox {
id: targetComboBox
implicitWidth: StudioTheme.Values.singleControlColumnWidth
onCurrentTextChanged: anchorRow.targetChanged()
}
ExpandingSpacer {}
}
PropertyLabel { text: qsTr("Margin") }
SecondColumnLayout {
SpinBox {
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
minimumValue: -0xffff
maximumValue: 0xffff
backendValue: anchorMargin
realDragRange: 5000
}
Spacer {
implicitWidth: StudioTheme.Values.twoControlColumnGap
+ StudioTheme.Values.actionIndicatorWidth
+ (StudioTheme.Values.twoControlColumnWidth - buttonRow.width)
}
StudioControls.ButtonRow {
id: buttonRow
property variant relativeTarget: anchorBackend.relativeAnchorTargetTop
actionIndicatorVisible: false
onRelativeTargetChanged: {
buttonSameEdge.checked = false
buttonCenter.checked = false
buttonOppositeEdge.checked = false
if (relativeTarget === AnchorBindingProxy.SameEdge) {
if (!invertRelativeTargets) {
buttonSameEdge.checked = true
} else {
buttonOppositeEdge.checked = true
}
} else if (relativeTarget === AnchorBindingProxy.OppositeEdge) {
if (!invertRelativeTargets) {
buttonOppositeEdge.checked = true
} else {
buttonSameEdge.checked = true
}
} else if (relativeTarget === AnchorBindingProxy.Center) {
buttonCenter.checked = true
}
}
StudioControls.ButtonGroup { id: group }
AbstractButton {
id: buttonSameEdge
buttonIcon: verticalAnchor ? StudioTheme.Constants.anchorTop
: StudioTheme.Constants.anchorLeft
checkable: true
autoExclusive: true
StudioControls.ButtonGroup.group: group
tooltip: verticalAnchor ? qsTr("Anchor to the top of the target.")
: qsTr("Anchor to the left of the target.")
onClicked: {
if (!invertRelativeTargets)
sameEdgeButtonClicked()
else
oppositeEdgeButtonClicked()
}
}
AbstractButton {
id: buttonCenter
buttonIcon: verticalAnchor ? StudioTheme.Constants.centerVertical
: StudioTheme.Constants.centerHorizontal
checkable: true
autoExclusive: true
StudioControls.ButtonGroup.group: group
tooltip: verticalAnchor ? qsTr("Anchor to the vertical center of the target.")
: qsTr("Anchor to the horizontal center of the target.")
onClicked: centerButtonClicked()
}
AbstractButton {
id: buttonOppositeEdge
buttonIcon: verticalAnchor ? StudioTheme.Constants.anchorBottom
: StudioTheme.Constants.anchorRight
checkable: true
autoExclusive: true
StudioControls.ButtonGroup.group: group
tooltip: verticalAnchor ? qsTr("Anchor to the bottom of the target.")
: qsTr("Anchor to the right of the target.")
onClicked: {
if (!invertRelativeTargets)
oppositeEdgeButtonClicked()
else
sameEdgeButtonClicked()
}
}
}
ExpandingSpacer {}
}
}
|