aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnchorRow.qml
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 {}
    }
}