4pragma ComponentBehavior: Bound
7import QtQuick.Templates as T
10import "../core/UiMetrics.js" as UiMetrics
59 property MD.typescale typescale: MD.Tokens.segmentedButton.labelTextFont
67 property bool showCheckmark:
true
73 property color containerColor: checked ? control.MD.Style.secondaryContainerColor :
"transparent"
81 property color contentColor: !enabled
82 ? Qt.alpha(control.MD.Style.onSurfaceColor, MD.Tokens.segmentedButton.disabledContentOpacity)
83 : (checked ? control.MD.Style.onSecondaryContainerColor : control.MD.Style.onSurfaceColor)
89 property color outlineColor: enabled ? control.MD.Style.outlineColor
90 : Qt.alpha(control.MD.Style.onSurfaceColor, MD.
Tokens.segmentedButton.disabledOutlineOpacity)
97 property color stateLayerColor: checked ? control.MD.Style.onSecondaryContainerColor : control.MD.Style.onSurfaceColor
99 property var __segmentedButtonGroup: null
100 property bool __leftEnd: true
101 property bool __rightEnd: true
102 readonly property bool __mirrored: __segmentedButtonGroup ? __segmentedButtonGroup.mirrored : mirrored
103 readonly property real __stateLayerOpacity: !enabled ? 0
104 : down ? MD.
Tokens.segmentedButton.pressedStateLayerOpacity
105 : visualFocus ? MD.
Tokens.segmentedButton.focusStateLayerOpacity
106 : hovered ? MD.
Tokens.segmentedButton.hoverStateLayerOpacity : 0
108 implicitWidth: Math.max(MD.
Tokens.segmentedButton.minimumInteractiveSize,
109 implicitContentWidth + leftPadding + rightPadding)
110 implicitHeight: Math.max(MD.
Tokens.segmentedButton.minimumInteractiveSize,
111 implicitContentHeight + topPadding + bottomPadding,
112 MD.
Tokens.segmentedButton.containerHeight + topInset + bottomInset)
113 leftPadding: MD.
Tokens.segmentedButton.contentPadding
114 rightPadding: MD.
Tokens.segmentedButton.contentPadding
116 bottomPadding: bottomInset
117 topInset: (MD.
Tokens.segmentedButton.minimumInteractiveSize - MD.
Tokens.segmentedButton.containerHeight) / 2
118 bottomInset: topInset
121 spacing: MD.
Tokens.segmentedButton.contentSpacing
122 icon.width: MD.
Tokens.segmentedButton.iconSize
123 icon.height: MD.
Tokens.segmentedButton.iconSize
124 icon.color: contentColor
125 font.family: typescale.face === MD.Style.TypeFace.Brand ? control.MD.Style.brandFontFamily : control.MD.Style.plainFontFamily
126 font.pixelSize: typescale.fontSize
127 font.weight: typescale.fontWeight
128 font.letterSpacing: typescale.tracking
132 focusPolicy: Qt.StrongFocus
134 Accessible.role: __segmentedButtonGroup && __segmentedButtonGroup.selectionMode === MD.SegmentedButtonGroup.SingleSelection
136 Accessible.name: text
137 Accessible.checkable: true
138 Accessible.checked: checked
139 Accessible.focusable: enabled && focusPolicy !== Qt.NoFocus
140 Accessible.focused: activeFocus
141 Accessible.pressed: down
142 Accessible.onPressAction: {
143 if (control.enabled && control.visible)
148 if (__segmentedButtonGroup)
149 __segmentedButtonGroup.__childCheckedChanged(control);
151 onActiveFocusChanged: {
152 if (activeFocus && __segmentedButtonGroup)
153 __segmentedButtonGroup.__childFocused(control);
156 if (__segmentedButtonGroup)
157 __segmentedButtonGroup.__scheduleSync();
160 if (__segmentedButtonGroup)
161 __segmentedButtonGroup.__scheduleSync();
163 onImplicitWidthChanged: {
164 if (__segmentedButtonGroup)
165 __segmentedButtonGroup.__scheduleSync();
167 onImplicitHeightChanged: {
168 if (__segmentedButtonGroup)
169 __segmentedButtonGroup.__scheduleSync();
171 Keys.onPressed:
event => {
172 if (__segmentedButtonGroup && __segmentedButtonGroup.__handleKey(control, event))
173 event.accepted =
true;
174 else if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
175 if (!event.isAutoRepeat)
177 event.accepted =
true;
181 contentItem: SegmentedButtonContent {
183 iconName: control.icon.name
184 iconSource: control.icon.source
185 iconWidth: control.icon.width
186 iconHeight: control.icon.height
187 checked: control.checked
188 showCheckmark: control.showCheckmark
189 mirrored: control.__mirrored
190 textFont: control.font
191 lineHeight: control.typescale.lineHeight
192 contentColor: control.contentColor
193 iconColor: control.icon.color
194 spacing: control.spacing
195 indicatorSize: MD.Tokens.segmentedButton.
iconSize
198 background: SegmentedButtonBackground {
199 implicitHeight: MD.Tokens.segmentedButton.containerHeight
200 containerColor: control.containerColor
201 outlineColor: control.outlineColor
202 stateLayerColor: control.stateLayerColor
203 stateLayerOpacity: control.__stateLayerOpacity
204 outlineWidth: MD.Tokens.segmentedButton.outlineWidth
205 leftRadius: control.__leftEnd ? UiMetrics.resolveShapeRadius(MD.Tokens.segmentedButton.containerShape.topLeft, width, height) : 0
206 rightRadius: control.__rightEnd ? UiMetrics.resolveShapeRadius(MD.Tokens.segmentedButton.containerShape.topRight, width, height) : 0
207 drawLeftOutline: control.__leftEnd
Material Design 3 design tokens.
Material Design 3 checkbox tokens.