Улучшен дизайн кнопок SpinBox: добавлены современные стили, улучшена визуальная обратная связь, добавлены SVG иконки, оптимизированы размеры и отступы, улучшена читаемость значени

This commit is contained in:
kromskii2 committed 2025-03-14 19:25:58 +07:00
1 parent 2b9165771b
commit 29dce906c5
6110 files changed
+775979

No files matched your search

@@ -0,0 +1,14 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.AbstractButton {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
}
@@ -0,0 +1,7 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.Action { }
@@ -0,0 +1,7 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.ActionGroup { }
@@ -0,0 +1,12 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ApplicationWindow {
id: window
color: window.palette.window
}
@@ -0,0 +1,29 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.Basic.impl
import QtQuick.Templates as T
T.BusyIndicator {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 6
contentItem: BusyIndicatorImpl {
implicitWidth: 48
implicitHeight: 48
pen: control.palette.dark
fill: control.palette.dark
running: control.running
opacity: control.running ? 1 : 0
Behavior on opacity { OpacityAnimator { duration: 250 } }
}
}
@@ -0,0 +1,46 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Button {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 6
horizontalPadding: padding + 2
spacing: 6
icon.width: 24
icon.height: 24
icon.color: control.checked || control.highlighted ? control.palette.brightText :
control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
icon: control.icon
text: control.text
font: control.font
color: control.checked || control.highlighted ? control.palette.brightText :
control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
}
background: Rectangle {
implicitWidth: 100
implicitHeight: 40
visible: !control.flat || control.down || control.checked || control.highlighted
color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button,
control.palette.mid, control.down ? 0.5 : 0.0)
border.color: control.palette.highlight
border.width: control.visualFocus ? 2 : 0
}
}
@@ -0,0 +1,7 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.ButtonGroup { }
@@ -0,0 +1,8 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
pragma Singleton
import QtQuick.Templates as T
T.Calendar {}
@@ -0,0 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick.Templates as T
T.CalendarModel {}
@@ -0,0 +1,59 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.CheckBox {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
padding: 6
spacing: 6
// keep in sync with CheckDelegate.qml (shared CheckIndicator.qml was removed for performance reasons)
indicator: Rectangle {
implicitWidth: 28
implicitHeight: 28
x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
y: control.topPadding + (control.availableHeight - height) / 2
color: control.down ? control.palette.light : control.palette.base
border.width: control.visualFocus ? 2 : 1
border.color: control.visualFocus ? control.palette.highlight : control.palette.mid
ColorImage {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
defaultColor: "#353637"
color: control.palette.text
source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png"
visible: control.checkState === Qt.Checked
}
Rectangle {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: 16
height: 3
color: control.palette.text
visible: control.checkState === Qt.PartiallyChecked
}
}
contentItem: CheckLabel {
leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
text: control.text
font: control.font
color: control.palette.windowText
}
}
@@ -0,0 +1,76 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.CheckDelegate {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
padding: 12
spacing: 12
icon.width: 24
icon.height: 24
icon.color: control.palette.text
contentItem: IconLabel {
leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.palette.text
}
// keep in sync with CheckBox.qml (shared CheckIndicator.qml was removed for performance reasons)
indicator: Rectangle {
implicitWidth: 28
implicitHeight: 28
x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
y: control.topPadding + (control.availableHeight - height) / 2
color: control.down ? control.palette.light : control.palette.base
border.width: control.visualFocus ? 2 : 1
border.color: control.visualFocus ? control.palette.highlight : control.palette.mid
ColorImage {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
defaultColor: "#353637"
color: control.palette.text
source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png"
visible: control.checkState === Qt.Checked
}
Rectangle {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: 16
height: 3
color: control.palette.text
visible: control.checkState === Qt.PartiallyChecked
}
}
background: Rectangle {
implicitWidth: 100
implicitHeight: 40
visible: control.down || control.highlighted
color: control.down ? control.palette.midlight : control.palette.light
}
}
@@ -0,0 +1,112 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ComboBox {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
delegate: ItemDelegate {
required property var model
required property int index
width: ListView.view.width
text: model[control.textRole]
palette.text: control.palette.text
palette.highlightedText: control.palette.highlightedText
font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
highlighted: control.highlightedIndex === index
hoverEnabled: control.hoverEnabled
}
indicator: ColorImage {
x: control.mirrored ? control.padding : control.width - width - control.padding
y: control.topPadding + (control.availableHeight - height) / 2
color: control.palette.dark
defaultColor: "#353637"
source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/double-arrow.png"
opacity: enabled ? 1 : 0.3
}
contentItem: T.TextField {
leftPadding: !control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1
rightPadding: control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1
topPadding: 6 - control.padding
bottomPadding: 6 - control.padding
text: control.editable ? control.editText : control.displayText
enabled: control.editable
autoScroll: control.editable
readOnly: control.down
inputMethodHints: control.inputMethodHints
validator: control.validator
selectByMouse: control.selectTextByMouse
color: control.editable ? control.palette.text : control.palette.buttonText
selectionColor: control.palette.highlight
selectedTextColor: control.palette.highlightedText
verticalAlignment: Text.AlignVCenter
background: Rectangle {
visible: control.enabled && control.editable && !control.flat
border.width: parent && parent.activeFocus ? 2 : 1
border.color: parent && parent.activeFocus ? control.palette.highlight : control.palette.button
color: control.palette.base
}
}
background: Rectangle {
implicitWidth: 140
implicitHeight: 40
color: control.down ? control.palette.mid : control.palette.button
border.color: control.palette.highlight
border.width: !control.editable && control.visualFocus ? 2 : 0
visible: !control.flat || control.down
}
popup: T.Popup {
y: control.height
width: control.width
height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin)
topMargin: 6
bottomMargin: 6
palette: control.palette
contentItem: ListView {
clip: true
implicitHeight: contentHeight
model: control.delegateModel
currentIndex: control.highlightedIndex
highlightMoveDuration: 0
Rectangle {
z: 10
width: parent.width
height: parent.height
color: "transparent"
border.color: control.palette.mid
}
T.ScrollIndicator.vertical: ScrollIndicator { }
}
background: Rectangle {
color: control.palette.window
}
}
}
@@ -0,0 +1,14 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.Container {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
}
@@ -0,0 +1,14 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.Control {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
}
@@ -0,0 +1,40 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.AbstractDayOfWeekRow {
id: control
implicitWidth: Math.max(background ? background.implicitWidth : 0,
contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(background ? background.implicitHeight : 0,
contentItem.implicitHeight + topPadding + bottomPadding)
spacing: 6
topPadding: 6
bottomPadding: 6
font.bold: true
//! [delegate]
delegate: Text {
text: shortName
font: control.font
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
required property string shortName
}
//! [delegate]
//! [contentItem]
contentItem: Row {
spacing: control.spacing
Repeater {
model: control.source
delegate: control.delegate
}
}
//! [contentItem]
}
@@ -0,0 +1,71 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.DelayButton {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 6
horizontalPadding: padding + 2
transition: Transition {
NumberAnimation {
duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress)
}
}
contentItem: ItemGroup {
ClippedText {
clip: control.progress > 0
clipX: -control.leftPadding + control.progress * control.width
clipWidth: (1.0 - control.progress) * control.width
visible: control.progress < 1
text: control.text
font: control.font
opacity: enabled ? 1 : 0.3
color: control.palette.buttonText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
ClippedText {
clip: control.progress > 0
clipX: -control.leftPadding
clipWidth: control.progress * control.width
visible: control.progress > 0
text: control.text
font: control.font
opacity: enabled ? 1 : 0.3
color: control.palette.brightText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
}
background: Rectangle {
implicitWidth: 100
implicitHeight: 40
color: Color.blend(control.palette.button, control.palette.mid, control.down ? 0.5 : 0.0)
border.color: control.palette.highlight
border.width: control.visualFocus ? 2 : 0
PaddedRectangle {
padding: control.visualFocus ? 2 : 0
width: control.progress * parent.width
height: parent.height
color: Color.blend(control.palette.dark, control.palette.mid, control.down ? 0.5 : 0.0)
}
}
}
@@ -0,0 +1,49 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Controls.Basic.impl
import QtQuick.Templates as T
T.Dial {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
background: DialImpl {
implicitWidth: 184
implicitHeight: 184
color: control.visualFocus ? control.palette.highlight : control.palette.dark
progress: control.position
opacity: control.enabled ? 1 : 0.3
startAngle: control.startAngle
endAngle: control.endAngle
}
handle: ColorImage {
x: control.background.x + control.background.width / 2 - width / 2
y: control.background.y + control.background.height / 2 - height / 2
width: 14
height: 10
defaultColor: "#353637"
color: control.visualFocus ? control.palette.highlight : control.palette.dark
source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/dial-indicator.png"
antialiasing: true
opacity: control.enabled ? 1 : 0.3
transform: [
Translate {
y: -Math.min(control.background.width, control.background.height) * 0.4
+ (control.handle ? control.handle.height / 2 : 0)
},
Rotation {
angle: control.angle
origin.x: control.handle ? control.handle.width / 2 : 0
origin.y: control.handle ? control.handle.height / 2 : 0
}
]
}
}
@@ -0,0 +1,52 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.Dialog {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding,
implicitHeaderWidth,
implicitFooterWidth)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding
+ (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
padding: 12
background: Rectangle {
color: control.palette.window
border.color: control.palette.dark
}
header: Label {
text: control.title
visible: parent?.parent === Overlay.overlay && control.title
elide: Label.ElideRight
font.bold: true
padding: 12
background: Rectangle {
x: 1; y: 1
width: parent.width - 2
height: parent.height - 1
color: control.palette.window
}
}
footer: DialogButtonBox {
visible: count > 0
}
T.Overlay.modal: Rectangle {
color: Color.transparent(control.palette.shadow, 0.5)
}
T.Overlay.modeless: Rectangle {
color: Color.transparent(control.palette.shadow, 0.12)
}
}
@@ -0,0 +1,40 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.DialogButtonBox {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
(control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
contentWidth: (contentItem as ListView)?.contentWidth
spacing: 1
padding: 12
alignment: count === 1 ? Qt.AlignRight : undefined
delegate: Button {
width: control.count === 1 ? control.availableWidth / 2 : undefined
}
contentItem: ListView {
implicitWidth: contentWidth
model: control.contentModel
spacing: control.spacing
orientation: ListView.Horizontal
boundsBehavior: Flickable.StopAtBounds
snapMode: ListView.SnapToItem
}
background: Rectangle {
implicitHeight: 40
x: 1; y: 1
width: parent.width - 2
height: parent.height - 2
color: control.palette.window
}
}
@@ -0,0 +1,45 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Drawer {
id: control
parent: T.Overlay.overlay
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
topPadding: control.edge === Qt.BottomEdge
leftPadding: control.edge === Qt.RightEdge
rightPadding: control.edge === Qt.LeftEdge
bottomPadding: control.edge === Qt.TopEdge
enter: Transition { SmoothedAnimation { velocity: 5 } }
exit: Transition { SmoothedAnimation { velocity: 5 } }
background: Rectangle {
color: control.palette.window
Rectangle {
readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge
width: horizontal ? 1 : parent.width
height: horizontal ? parent.height : 1
color: control.palette.dark
x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0
y: control.edge === Qt.TopEdge ? parent.height - 1 : 0
}
}
T.Overlay.modal: Rectangle {
color: Color.transparent(control.palette.shadow, 0.5)
}
T.Overlay.modeless: Rectangle {
color: Color.transparent(control.palette.shadow, 0.12)
}
}
@@ -0,0 +1,22 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Frame {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
padding: 12
background: Rectangle {
color: "transparent"
border.color: control.palette.mid
}
}
@@ -0,0 +1,40 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.GroupBox {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding,
implicitLabelWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
spacing: 6
padding: 12
topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0)
label: Text {
x: control.leftPadding
width: control.availableWidth
text: control.title
font: control.font
color: control.palette.windowText
elide: Text.ElideRight
verticalAlignment: Text.AlignVCenter
}
background: Rectangle {
y: control.topPadding - control.bottomPadding
width: parent.width
height: parent.height - control.topPadding + control.bottomPadding
color: "transparent"
border.color: control.palette.mid
}
}
@@ -0,0 +1,43 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Templates as T
T.HorizontalHeaderView {
id: control
implicitWidth: syncView ? syncView.width : 0
// The contentHeight of TableView will be zero at start-up, until the delegate
// items have been loaded. This means that even if the implicit height of
// HorizontalHeaderView should be the same as the content height in the end, we
// need to ensure that it has at least a height of 1 at start-up, otherwise
// TableView won't bother loading any delegates at all.
implicitHeight: Math.max(1, contentHeight)
delegate: Rectangle {
id: delegate
required property var model
// Qt6: add cellPadding (and font etc) as public API in headerview
readonly property real cellPadding: 8
implicitWidth: text.implicitWidth + (cellPadding * 2)
implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2))
color: "#f6f6f6"
border.color: "#e4e4e4"
Label {
id: text
text: delegate.model[control.textRole]
width: delegate.width
height: delegate.height
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: "#ff26282a"
}
}
}
@@ -0,0 +1,43 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ItemDelegate {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
padding: 12
spacing: 8
icon.width: 24
icon.height: 24
icon.color: control.palette.text
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.highlighted ? control.palette.highlightedText : control.palette.text
}
background: Rectangle {
implicitWidth: 100
implicitHeight: 40
visible: control.down || control.highlighted || control.visualFocus
color: Color.blend(control.down ? control.palette.midlight : control.palette.light,
control.palette.highlight, control.visualFocus ? 0.15 : 0.0)
}
}
@@ -0,0 +1,13 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Label {
id: control
color: control.palette.windowText
linkColor: control.palette.link
}
@@ -0,0 +1,47 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Menu {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
margins: 0
overlap: 1
delegate: MenuItem { }
contentItem: ListView {
implicitHeight: contentHeight
model: control.contentModel
interactive: Window.window
? contentHeight + control.topPadding + control.bottomPadding > control.height
: false
clip: true
currentIndex: control.currentIndex
ScrollIndicator.vertical: ScrollIndicator {}
}
background: Rectangle {
implicitWidth: 200
implicitHeight: 40
color: control.palette.window
border.color: control.palette.dark
}
T.Overlay.modal: Rectangle {
color: Color.transparent(control.palette.shadow, 0.5)
}
T.Overlay.modeless: Rectangle {
color: Color.transparent(control.palette.shadow, 0.12)
}
}
@@ -0,0 +1,29 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.MenuBar {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
delegate: MenuBarItem { }
contentItem: Row {
spacing: control.spacing
Repeater {
model: control.contentModel
}
}
background: Rectangle {
implicitHeight: 40
color: control.palette.button
}
}
@@ -0,0 +1,43 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.MenuBarItem {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
spacing: 6
padding: 6
leftPadding: 12
rightPadding: 16
icon.width: 24
icon.height: 24
icon.color: control.palette.buttonText
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.palette.buttonText
}
background: Rectangle {
implicitWidth: 40
implicitHeight: 40
color: control.down || control.highlighted ? control.palette.mid : "transparent"
}
}
@@ -0,0 +1,71 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.MenuItem {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
padding: 6
spacing: 6
icon.width: 24
icon.height: 24
icon.color: control.palette.windowText
contentItem: IconLabel {
readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0
readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0
leftPadding: !control.mirrored ? indicatorPadding : arrowPadding
rightPadding: control.mirrored ? indicatorPadding : arrowPadding
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.palette.windowText
}
indicator: ColorImage {
x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding
y: control.topPadding + (control.availableHeight - height) / 2
visible: control.checked
source: control.checkable ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" : ""
color: control.palette.windowText
defaultColor: "#353637"
}
arrow: ColorImage {
x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
y: control.topPadding + (control.availableHeight - height) / 2
visible: control.subMenu
mirror: control.mirrored
source: control.subMenu ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/arrow-indicator.png" : ""
color: control.palette.windowText
defaultColor: "#353637"
}
background: Rectangle {
implicitWidth: 200
implicitHeight: 40
x: 1
y: 1
width: control.width - 2
height: control.height - 2
color: control.down ? control.palette.midlight : control.highlighted ? control.palette.light : "transparent"
}
}
@@ -0,0 +1,24 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.MenuSeparator {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 2
verticalPadding: padding + 4
contentItem: Rectangle {
implicitWidth: 188
implicitHeight: 1
color: control.palette.mid
}
}
@@ -0,0 +1,42 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.AbstractMonthGrid {
id: control
implicitWidth: Math.max(background ? background.implicitWidth : 0,
contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(background ? background.implicitHeight : 0,
contentItem.implicitHeight + topPadding + bottomPadding)
spacing: 6
//! [delegate]
delegate: Text {
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
opacity: model.month === control.month ? 1 : 0
text: model.day
font: control.font
required property var model
}
//! [delegate]
//! [contentItem]
contentItem: Grid {
rows: 6
columns: 7
rowSpacing: control.spacing
columnSpacing: control.spacing
Repeater {
model: control.source
delegate: control.delegate
}
}
//! [contentItem]
}
@@ -0,0 +1,23 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Page {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding,
implicitHeaderWidth,
implicitFooterWidth)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding
+ (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
background: Rectangle {
color: control.palette.window
}
}
@@ -0,0 +1,41 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.PageIndicator {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 6
spacing: 6
delegate: Rectangle {
implicitWidth: 8
implicitHeight: 8
radius: width / 2
color: control.palette.dark
opacity: index === control.currentIndex ? 0.95 : pressed ? 0.7 : 0.45
required property int index
Behavior on opacity { OpacityAnimator { duration: 100 } }
}
contentItem: Row {
spacing: control.spacing
Repeater {
model: control.count
delegate: control.delegate
}
}
}
@@ -0,0 +1,21 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Pane {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
padding: 12
background: Rectangle {
color: control.palette.window
}
}
@@ -0,0 +1,30 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Popup {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
padding: 12
background: Rectangle {
color: control.palette.window
border.color: control.palette.dark
}
T.Overlay.modal: Rectangle {
color: Color.transparent(control.palette.shadow, 0.5)
}
T.Overlay.modeless: Rectangle {
color: Color.transparent(control.palette.shadow, 0.12)
}
}
@@ -0,0 +1,33 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.Basic.impl
T.ProgressBar {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
contentItem: ProgressBarImpl {
implicitHeight: 6
implicitWidth: 116
scale: control.mirrored ? -1 : 1
progress: control.position
indeterminate: control.visible && control.indeterminate
color: control.palette.dark
}
background: Rectangle {
implicitWidth: 200
implicitHeight: 6
y: (control.height - height) / 2
height: 6
color: control.palette.midlight
}
}
@@ -0,0 +1,52 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.RadioButton {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
padding: 6
spacing: 6
// keep in sync with RadioDelegate.qml (shared RadioIndicator.qml was removed for performance reasons)
indicator: Rectangle {
implicitWidth: 28
implicitHeight: 28
x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
y: control.topPadding + (control.availableHeight - height) / 2
radius: width / 2
color: control.down ? control.palette.light : control.palette.base
border.width: control.visualFocus ? 2 : 1
border.color: control.visualFocus ? control.palette.highlight : control.palette.mid
Rectangle {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: 20
height: 20
radius: width / 2
color: control.palette.text
visible: control.checked
}
}
contentItem: CheckLabel {
leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
text: control.text
font: control.font
color: control.palette.windowText
}
}
@@ -0,0 +1,69 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.RadioDelegate {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
padding: 12
spacing: 12
icon.width: 24
icon.height: 24
icon.color: control.palette.text
contentItem: IconLabel {
leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.palette.text
}
// keep in sync with RadioButton.qml (shared RadioIndicator.qml was removed for performance reasons)
indicator: Rectangle {
implicitWidth: 28
implicitHeight: 28
x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
y: control.topPadding + (control.availableHeight - height) / 2
radius: width / 2
color: control.down ? control.palette.light : control.palette.base
border.width: control.visualFocus ? 2 : 1
border.color: control.visualFocus ? control.palette.highlight : control.palette.mid
Rectangle {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: 20
height: 20
radius: width / 2
color: control.palette.text
visible: control.checked
}
}
background: Rectangle {
implicitWidth: 100
implicitHeight: 40
visible: control.down || control.highlighted
color: control.down ? control.palette.midlight : control.palette.light
}
}
@@ -0,0 +1,62 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.RangeSlider {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
first.implicitHandleWidth + leftPadding + rightPadding,
second.implicitHandleWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
first.implicitHandleHeight + topPadding + bottomPadding,
second.implicitHandleHeight + topPadding + bottomPadding)
padding: 6
first.handle: Rectangle {
x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height))
implicitWidth: 28
implicitHeight: 28
radius: width / 2
border.width: activeFocus ? 2 : 1
border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
color: control.first.pressed ? control.palette.light : control.palette.window
}
second.handle: Rectangle {
x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height))
implicitWidth: 28
implicitHeight: 28
radius: width / 2
border.width: activeFocus ? 2 : 1
border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
color: control.second.pressed ? control.palette.light : control.palette.window
}
background: Rectangle {
x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2)
y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0)
implicitWidth: control.horizontal ? 200 : 6
implicitHeight: control.horizontal ? 6 : 200
width: control.horizontal ? control.availableWidth : implicitWidth
height: control.horizontal ? implicitHeight : control.availableHeight
radius: 3
color: control.palette.midlight
scale: control.horizontal && control.mirrored ? -1 : 1
Rectangle {
x: control.horizontal ? control.first.position * parent.width + 3 : 0
y: control.horizontal ? 0 : control.second.visualPosition * parent.height + 3
width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width - 6 : 6
height: control.horizontal ? 6 : control.second.position * parent.height - control.first.position * parent.height - 6
color: control.palette.dark
}
}
}
@@ -0,0 +1,47 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.RoundButton {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 6
spacing: 6
icon.width: 24
icon.height: 24
icon.color: control.checked || control.highlighted ? control.palette.brightText :
control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
icon: control.icon
text: control.text
font: control.font
color: control.checked || control.highlighted ? control.palette.brightText :
control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
}
background: Rectangle {
implicitWidth: 40
implicitHeight: 40
radius: control.radius
opacity: enabled ? 1 : 0.3
visible: !control.flat || control.down || control.checked || control.highlighted
color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button,
control.palette.mid, control.down ? 0.5 : 0.0)
border.color: control.palette.highlight
border.width: control.visualFocus ? 2 : 0
}
}
@@ -0,0 +1,42 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ScrollBar {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 2
visible: control.policy !== T.ScrollBar.AlwaysOff
minimumSize: orientation === Qt.Horizontal ? height / width : width / height
contentItem: Rectangle {
implicitWidth: control.interactive ? 6 : 2
implicitHeight: control.interactive ? 6 : 2
radius: width / 2
color: control.pressed ? control.palette.dark : control.palette.mid
opacity: 0.0
states: State {
name: "active"
when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0)
PropertyChanges { control.contentItem.opacity: 0.75 }
}
transitions: Transition {
from: "active"
SequentialAnimation {
PauseAnimation { duration: 450 }
NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
}
}
}
}
@@ -0,0 +1,42 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ScrollIndicator {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 2
contentItem: Rectangle {
implicitWidth: 2
implicitHeight: 2
color: control.palette.mid
visible: control.size < 1.0
opacity: 0.0
states: State {
name: "active"
when: control.active
PropertyChanges { control.contentItem.opacity: 0.75 }
}
transitions: [
Transition {
from: "active"
SequentialAnimation {
PauseAnimation { duration: 450 }
NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
}
}
]
}
}
@@ -0,0 +1,31 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ScrollView {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
ScrollBar.vertical: ScrollBar {
parent: control
x: control.mirrored ? 0 : control.width - width
y: control.topPadding
height: control.availableHeight
active: control.ScrollBar.horizontal.active
}
ScrollBar.horizontal: ScrollBar {
parent: control
x: control.leftPadding
y: control.height - height
width: control.availableWidth
active: control.ScrollBar.vertical.active
}
}
@@ -0,0 +1,28 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Shapes
import QtQuick.Templates as T
T.SelectionRectangle {
id: control
topLeftHandle: Handle {}
bottomRightHandle: Handle {}
component Handle : Rectangle {
id: handle
width: 28
height: width
radius: width / 2
color: SelectionRectangle.dragging ? control.palette.light : control.palette.window
border.width: 1
border.color: control.enabled ? control.palette.mid : control.palette.midlight
visible: SelectionRectangle.control.active
property Item control: SelectionRectangle.control
}
}
@@ -0,0 +1,49 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Slider {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitHandleWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitHandleHeight + topPadding + bottomPadding)
padding: 6
handle: Rectangle {
x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))
implicitWidth: 28
implicitHeight: 28
radius: width / 2
color: control.pressed ? control.palette.light : control.palette.window
border.width: control.visualFocus ? 2 : 1
border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
}
background: Rectangle {
x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2)
y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0)
implicitWidth: control.horizontal ? 200 : 6
implicitHeight: control.horizontal ? 6 : 200
width: control.horizontal ? control.availableWidth : implicitWidth
height: control.horizontal ? implicitHeight : control.availableHeight
radius: 3
color: control.palette.midlight
scale: control.horizontal && control.mirrored ? -1 : 1
Rectangle {
y: control.horizontal ? 0 : control.visualPosition * parent.height
width: control.horizontal ? control.position * parent.width : 6
height: control.horizontal ? 6 : control.position * parent.height
radius: 3
color: control.palette.dark
}
}
}
@@ -0,0 +1,98 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.SpinBox {
id: control
// Note: the width of the indicators are calculated into the padding
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
up.implicitIndicatorHeight, down.implicitIndicatorHeight)
leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0))
rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0))
validator: IntValidator {
locale: control.locale.name
bottom: Math.min(control.from, control.to)
top: Math.max(control.from, control.to)
}
contentItem: TextInput {
z: 2
text: control.displayText
clip: width < implicitWidth
padding: 6
font: control.font
color: control.palette.text
selectionColor: control.palette.highlight
selectedTextColor: control.palette.highlightedText
horizontalAlignment: Qt.AlignHCenter
verticalAlignment: Qt.AlignVCenter
readOnly: !control.editable
validator: control.validator
inputMethodHints: control.inputMethodHints
Rectangle {
width: parent.width
height: parent.height
visible: control.activeFocus
color: "transparent"
border.color: control.palette.highlight
border.width: 2
}
}
up.indicator: Rectangle {
x: control.mirrored ? 0 : control.width - width
height: control.height
implicitWidth: 40
implicitHeight: 40
color: control.up.pressed ? control.palette.mid : control.palette.button
Rectangle {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: parent.width / 3
height: 2
color: enabled ? control.palette.buttonText : control.palette.mid
}
Rectangle {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: 2
height: parent.width / 3
color: enabled ? control.palette.buttonText : control.palette.mid
}
}
down.indicator: Rectangle {
x: control.mirrored ? parent.width - width : 0
height: control.height
implicitWidth: 40
implicitHeight: 40
color: control.down.pressed ? control.palette.mid : control.palette.button
Rectangle {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: parent.width / 3
height: 2
color: enabled ? control.palette.buttonText : control.palette.mid
}
}
background: Rectangle {
implicitWidth: 140
color: enabled ? control.palette.base : control.palette.button
border.color: control.palette.button
}
}
@@ -0,0 +1,21 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.SplitView {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
handle: Rectangle {
implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width
implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6
color: T.SplitHandle.pressed ? control.palette.mid
: (T.SplitHandle.hovered ? control.palette.midlight : control.palette.button)
}
}
@@ -0,0 +1,33 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.StackView {
id: control
popEnter: Transition {
XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
}
popExit: Transition {
XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic }
}
pushEnter: Transition {
XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
}
pushExit: Transition {
XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic }
}
replaceEnter: Transition {
XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
}
replaceExit: Transition {
XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic }
}
}
@@ -0,0 +1,44 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.SwipeDelegate {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
padding: 12
spacing: 12
icon.width: 24
icon.height: 24
icon.color: control.palette.text
swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } }
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.palette.text
}
background: Rectangle {
implicitWidth: 100
implicitHeight: 40
color: Color.blend(control.down ? control.palette.midlight : control.palette.light,
control.palette.highlight, control.visualFocus ? 0.15 : 0.0)
}
}
@@ -0,0 +1,32 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.SwipeView {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
contentItem: ListView {
model: control.contentModel
interactive: control.interactive
currentIndex: control.currentIndex
focus: control.focus
spacing: control.spacing
orientation: control.orientation
snapMode: ListView.SnapOneItem
boundsBehavior: Flickable.StopAtBounds
highlightRangeMode: ListView.StrictlyEnforceRange
preferredHighlightBegin: 0
preferredHighlightEnd: 0
highlightMoveDuration: 250
maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height)
}
}
@@ -0,0 +1,58 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.Switch {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
padding: 6
spacing: 6
indicator: PaddedRectangle {
implicitWidth: 56
implicitHeight: 28
x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
y: control.topPadding + (control.availableHeight - height) / 2
radius: 8
leftPadding: 0
rightPadding: 0
padding: (height - 16) / 2
color: control.checked ? control.palette.dark : control.palette.midlight
Rectangle {
x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2)))
y: (parent.height - height) / 2
width: 28
height: 28
radius: 16
color: control.down ? control.palette.light : control.palette.window
border.width: control.visualFocus ? 2 : 1
border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
Behavior on x {
enabled: !control.down
SmoothedAnimation { velocity: 200 }
}
}
}
contentItem: CheckLabel {
leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
text: control.text
font: control.font
color: control.palette.windowText
}
}
@@ -0,0 +1,75 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.SwitchDelegate {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
padding: 12
spacing: 12
icon.width: 24
icon.height: 24
icon.color: control.palette.text
indicator: PaddedRectangle {
implicitWidth: 56
implicitHeight: 28
x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
y: control.topPadding + (control.availableHeight - height) / 2
radius: 8
leftPadding: 0
rightPadding: 0
padding: (height - 16) / 2
color: control.checked ? control.palette.dark : control.palette.midlight
Rectangle {
x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2)))
y: (parent.height - height) / 2
width: 28
height: 28
radius: 16
color: control.down ? control.palette.light : control.palette.window
border.width: control.visualFocus ? 2 : 1
border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
Behavior on x {
enabled: !control.down
SmoothedAnimation { velocity: 200 }
}
}
}
contentItem: IconLabel {
leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.palette.text
}
background: Rectangle {
implicitWidth: 100
implicitHeight: 40
visible: control.down || control.highlighted
color: control.down ? control.palette.midlight : control.palette.light
}
}
@@ -0,0 +1,36 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.TabBar {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
spacing: 1
contentItem: ListView {
model: control.contentModel
currentIndex: control.currentIndex
spacing: control.spacing
orientation: ListView.Horizontal
boundsBehavior: Flickable.StopAtBounds
flickableDirection: Flickable.AutoFlickIfNeeded
snapMode: ListView.SnapToItem
highlightMoveDuration: 0
highlightRangeMode: ListView.ApplyRange
preferredHighlightBegin: 40
preferredHighlightEnd: width - 40
}
background: Rectangle {
color: control.palette.window
}
}
@@ -0,0 +1,39 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.TabButton {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 6
spacing: 6
icon.width: 24
icon.height: 24
icon.color: checked ? control.palette.windowText : control.palette.brightText
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
icon: control.icon
text: control.text
font: control.font
color: control.checked ? control.palette.windowText : control.palette.brightText
}
background: Rectangle {
implicitHeight: 40
color: Color.blend(control.checked ? control.palette.window : control.palette.dark,
control.palette.mid, control.down ? 0.5 : 0.0)
}
}
@@ -0,0 +1,41 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.TextArea {
id: control
implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
implicitBackgroundWidth + leftInset + rightInset,
placeholder.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
implicitBackgroundHeight + topInset + bottomInset,
placeholder.implicitHeight + topPadding + bottomPadding)
padding: 6
leftPadding: padding + 4
color: control.palette.text
placeholderTextColor: control.palette.placeholderText
selectionColor: control.palette.highlight
selectedTextColor: control.palette.highlightedText
PlaceholderText {
id: placeholder
x: control.leftPadding
y: control.topPadding
width: control.width - (control.leftPadding + control.rightPadding)
height: control.height - (control.topPadding + control.bottomPadding)
text: control.placeholderText
font: control.font
color: control.placeholderTextColor
verticalAlignment: control.verticalAlignment
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
elide: Text.ElideRight
renderType: control.renderType
}
}
@@ -0,0 +1,49 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.TextField {
id: control
implicitWidth: implicitBackgroundWidth + leftInset + rightInset
|| Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding,
placeholder.implicitHeight + topPadding + bottomPadding)
padding: 6
leftPadding: padding + 4
color: control.palette.text
selectionColor: control.palette.highlight
selectedTextColor: control.palette.highlightedText
placeholderTextColor: control.palette.placeholderText
verticalAlignment: TextInput.AlignVCenter
PlaceholderText {
id: placeholder
x: control.leftPadding
y: control.topPadding
width: control.width - (control.leftPadding + control.rightPadding)
height: control.height - (control.topPadding + control.bottomPadding)
text: control.placeholderText
font: control.font
color: control.placeholderTextColor
verticalAlignment: control.verticalAlignment
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
elide: Text.ElideRight
renderType: control.renderType
}
background: Rectangle {
implicitWidth: 200
implicitHeight: 40
border.width: control.activeFocus ? 2 : 1
color: control.palette.base
border.color: control.activeFocus ? control.palette.highlight : control.palette.mid
}
}
@@ -0,0 +1,20 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ToolBar {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
background: Rectangle {
implicitHeight: 40
color: control.palette.button
}
}
@@ -0,0 +1,41 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ToolButton {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: 6
spacing: 6
icon.width: 24
icon.height: 24
icon.color: visualFocus ? control.palette.highlight : control.palette.buttonText
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
icon: control.icon
text: control.text
font: control.font
color: control.visualFocus ? control.palette.highlight : control.palette.buttonText
}
background: Rectangle {
implicitWidth: 40
implicitHeight: 40
opacity: control.down ? 1.0 : 0.5
color: control.down || control.checked || control.highlighted ? control.palette.mid : control.palette.button
}
}
@@ -0,0 +1,24 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ToolSeparator {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
padding: vertical ? 6 : 2
verticalPadding: vertical ? 2 : 6
contentItem: Rectangle {
implicitWidth: control.vertical ? 1 : 30
implicitHeight: control.vertical ? 30 : 1
color: control.palette.mid
}
}
@@ -0,0 +1,35 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ToolTip {
id: control
x: parent ? (parent.width - implicitWidth) / 2 : 0
y: -implicitHeight - 3
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
margins: 6
padding: 6
closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent
contentItem: Text {
text: control.text
font: control.font
wrapMode: Text.Wrap
color: control.palette.toolTipText
}
background: Rectangle {
border.color: control.palette.dark
color: control.palette.toolTipBase
}
}
@@ -0,0 +1,100 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.TreeViewDelegate {
id: control
implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin
implicitHeight: Math.max(indicator ? indicator.height : 0, implicitContentHeight) * 1.25
indentation: indicator ? indicator.width : 12
leftMargin: 4
rightMargin: 4
spacing: 4
topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0
leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth
highlighted: control.selected || control.current
|| ((control.treeView.selectionBehavior === TableView.SelectRows
|| control.treeView.selectionBehavior === TableView.SelectionDisabled)
&& control.row === control.treeView.currentRow)
required property int row
required property var model
readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0)
indicator: Item {
// Create an area that is big enough for the user to
// click on, since the image is a bit small.
readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation)
x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width
y: (control.height - height) / 2
implicitWidth: 20
implicitHeight: 40 // same as Button.qml
ColorImage {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
rotation: control.expanded ? 90 : (control.mirrored ? 180 : 0)
source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/arrow-indicator.png"
color: control.palette.windowText
defaultColor: "#353637"
}
}
background: Rectangle {
implicitHeight: 40 // same as Button.qml
color: control.highlighted
? control.palette.highlight
: (control.treeView.alternatingRows && control.row % 2 !== 0
? control.palette.alternateBase : control.palette.base)
}
contentItem: Label {
clip: false
text: control.model.display
elide: Text.ElideRight
color: control.highlighted ? control.palette.highlightedText : control.palette.buttonText
visible: !control.editing
}
// The edit delegate is a separate component, and doesn't need
// to follow the same strict rules that are applied to a control.
// qmllint disable attached-property-reuse
// qmllint disable controls-attached-property-reuse
// qmllint disable controls-sanity
TableView.editDelegate: FocusScope {
width: parent.width
height: parent.height
readonly property int __role: {
let model = control.treeView.model
let index = control.treeView.index(row, column)
let editText = model.data(index, Qt.EditRole)
return editText !== undefined ? Qt.EditRole : Qt.DisplayRole
}
TextField {
id: textField
x: control.contentItem.x
y: (parent.height - height) / 2
width: control.contentItem.width
text: control.treeView.model.data(control.treeView.index(row, column), __role)
focus: true
}
TableView.onCommit: {
let index = TableView.view.index(row, column)
TableView.view.model.setData(index, textField.text, __role)
}
Component.onCompleted: textField.selectAll()
}
// qmllint enable attached-property-reuse
// qmllint enable controls-attached-property-reuse
// qmllint enable controls-sanity
}
@@ -0,0 +1,48 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Tumbler {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
readonly property real __delegateHeight: availableHeight / visibleItemCount
delegate: Text {
text: modelData
color: control.visualFocus ? control.palette.highlight : control.palette.text
font: control.font
opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
// We use required property here to satisfy qmllint, but that means
// we also need to declare the index for the attached properties
// (see QQuickTumblerAttachedPrivate::init).
required property var modelData
required property int index
}
contentItem: TumblerView {
implicitWidth: 60
implicitHeight: 200
model: control.model
delegate: control.delegate
path: Path {
startX: control.contentItem.width / 2
startY: -control.__delegateHeight / 2
PathLine {
x: control.contentItem.width / 2
y: (control.visibleItemCount + 1) * control.__delegateHeight - control.__delegateHeight / 2
}
}
}
}
@@ -0,0 +1,43 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Templates as T
T.VerticalHeaderView {
id: control
// The contentWidth of TableView will be zero at start-up, until the delegate
// items have been loaded. This means that even if the implicit width of
// VerticalHeaderView should be the same as the content width in the end, we
// need to ensure that it has at least a width of 1 at start-up, otherwise
// TableView won't bother loading any delegates at all.
implicitWidth: Math.max(1, contentWidth)
implicitHeight: syncView ? syncView.height : 0
delegate: Rectangle {
id: delegate
required property var model
// Qt6: add cellPadding (and font etc) as public API in headerview
readonly property real cellPadding: 8
implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2))
implicitHeight: text.implicitHeight + (cellPadding * 2)
color: "#f6f6f6"
border.color: "#e4e4e4"
Label {
id: text
text: delegate.model[control.textRole]
width: delegate.width
height: delegate.height
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: "#ff26282a"
}
}
}
@@ -0,0 +1,40 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.AbstractWeekNumberColumn {
id: control
implicitWidth: Math.max(background ? background.implicitWidth : 0,
contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(background ? background.implicitHeight : 0,
contentItem.implicitHeight + topPadding + bottomPadding)
spacing: 6
leftPadding: 6
rightPadding: 6
font.bold: true
//! [delegate]
delegate: Text {
text: weekNumber
font: control.font
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
required property int weekNumber
}
//! [delegate]
//! [contentItem]
contentItem: Column {
spacing: control.spacing
Repeater {
model: control.source
delegate: control.delegate
}
}
//! [contentItem]
}
@@ -0,0 +1,109 @@
import QtQuick.tooling 1.2
// This file describes the plugin-supplied types contained in the library.
// It is used for QML tooling purposes only.
//
// This file was auto-generated by qmltyperegistrar.
Module {
Component {
file: "private/qquickbasicbusyindicator_p.h"
name: "QQuickBasicBusyIndicator"
accessSemantics: "reference"
defaultProperty: "data"
parentProperty: "parent"
prototype: "QQuickItem"
exports: [
"QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.0",
"QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.1",
"QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.4",
"QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.7",
"QtQuick.Controls.Basic.impl/BusyIndicatorImpl 2.11",
"QtQuick.Controls.Basic.impl/BusyIndicatorImpl 6.0",
"QtQuick.Controls.Basic.impl/BusyIndicatorImpl 6.3",
"QtQuick.Controls.Basic.impl/BusyIndicatorImpl 6.7"
]
exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543]
Property { name: "pen"; type: "QColor"; read: "pen"; write: "setPen"; index: 0; isFinal: true }
Property { name: "fill"; type: "QColor"; read: "fill"; write: "setFill"; index: 1; isFinal: true }
Property { name: "running"; type: "bool"; read: "isRunning"; write: "setRunning"; index: 2 }
}
Component {
file: "private/qquickbasicdial_p.h"
name: "QQuickBasicDial"
accessSemantics: "reference"
prototype: "QQuickPaintedItem"
exports: [
"QtQuick.Controls.Basic.impl/DialImpl 2.0",
"QtQuick.Controls.Basic.impl/DialImpl 2.1",
"QtQuick.Controls.Basic.impl/DialImpl 2.4",
"QtQuick.Controls.Basic.impl/DialImpl 2.7",
"QtQuick.Controls.Basic.impl/DialImpl 2.11",
"QtQuick.Controls.Basic.impl/DialImpl 6.0",
"QtQuick.Controls.Basic.impl/DialImpl 6.3",
"QtQuick.Controls.Basic.impl/DialImpl 6.7"
]
exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543]
Property {
name: "progress"
type: "double"
read: "progress"
write: "setProgress"
index: 0
isFinal: true
}
Property {
name: "startAngle"
type: "double"
read: "startAngle"
write: "setStartAngle"
index: 1
isFinal: true
}
Property {
name: "endAngle"
type: "double"
read: "endAngle"
write: "setEndAngle"
index: 2
isFinal: true
}
Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 3; isFinal: true }
}
Component {
file: "private/qquickbasicprogressbar_p.h"
name: "QQuickBasicProgressBar"
accessSemantics: "reference"
defaultProperty: "data"
parentProperty: "parent"
prototype: "QQuickItem"
exports: [
"QtQuick.Controls.Basic.impl/ProgressBarImpl 2.0",
"QtQuick.Controls.Basic.impl/ProgressBarImpl 2.1",
"QtQuick.Controls.Basic.impl/ProgressBarImpl 2.4",
"QtQuick.Controls.Basic.impl/ProgressBarImpl 2.7",
"QtQuick.Controls.Basic.impl/ProgressBarImpl 2.11",
"QtQuick.Controls.Basic.impl/ProgressBarImpl 6.0",
"QtQuick.Controls.Basic.impl/ProgressBarImpl 6.3",
"QtQuick.Controls.Basic.impl/ProgressBarImpl 6.7"
]
exportMetaObjectRevisions: [512, 513, 516, 519, 523, 1536, 1539, 1543]
Property {
name: "indeterminate"
type: "bool"
read: "isIndeterminate"
write: "setIndeterminate"
index: 0
isFinal: true
}
Property {
name: "progress"
type: "double"
read: "progress"
write: "setProgress"
index: 1
isFinal: true
}
Property { name: "color"; type: "QColor"; read: "color"; write: "setColor"; index: 2; isFinal: true }
}
}
@@ -0,0 +1,8 @@
module QtQuick.Controls.Basic.impl
linktarget Qt6::qtquickcontrols2basicstyleimplplugin
optional plugin qtquickcontrols2basicstyleimplplugin
classname QtQuickControls2BasicStyleImplPlugin
typeinfo plugins.qmltypes
depends QtQuick auto
prefer :/qt-project.org/imports/QtQuick/Controls/Basic/impl/
@@ -0,0 +1,459 @@
import QtQuick.tooling 1.2
// This file describes the plugin-supplied types contained in the library.
// It is used for QML tooling purposes only.
//
// This file was auto-generated by qmltyperegistrar.
Module {
Component {
file: "private/qquickbasicstyle_p.h"
name: "QQuickBasicStyle"
accessSemantics: "reference"
prototype: "QObject"
exports: [
"QtQuick.Controls.Basic/Basic 2.1",
"QtQuick.Controls.Basic/Basic 6.0"
]
isCreatable: false
isSingleton: true
exportMetaObjectRevisions: [513, 1536]
Property {
name: "backgroundColor"
type: "QColor"
read: "backgroundColor"
index: 0
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "overlayModalColor"
type: "QColor"
read: "overlayModalColor"
index: 1
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "overlayDimColor"
type: "QColor"
read: "overlayDimColor"
index: 2
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "textColor"
type: "QColor"
read: "textColor"
index: 3
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "textDarkColor"
type: "QColor"
read: "textDarkColor"
index: 4
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "textLightColor"
type: "QColor"
read: "textLightColor"
index: 5
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "textLinkColor"
type: "QColor"
read: "textLinkColor"
index: 6
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "textSelectionColor"
type: "QColor"
read: "textSelectionColor"
index: 7
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "textDisabledColor"
type: "QColor"
read: "textDisabledColor"
index: 8
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "textDisabledLightColor"
type: "QColor"
read: "textDisabledLightColor"
index: 9
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "textPlaceholderColor"
type: "QColor"
read: "textPlaceholderColor"
index: 10
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "focusColor"
type: "QColor"
read: "focusColor"
index: 11
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "focusLightColor"
type: "QColor"
read: "focusLightColor"
index: 12
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "focusPressedColor"
type: "QColor"
read: "focusPressedColor"
index: 13
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "buttonColor"
type: "QColor"
read: "buttonColor"
index: 14
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "buttonPressedColor"
type: "QColor"
read: "buttonPressedColor"
index: 15
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "buttonCheckedColor"
type: "QColor"
read: "buttonCheckedColor"
index: 16
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "buttonCheckedPressedColor"
type: "QColor"
read: "buttonCheckedPressedColor"
index: 17
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "buttonCheckedFocusColor"
type: "QColor"
read: "buttonCheckedFocusColor"
index: 18
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "toolButtonColor"
type: "QColor"
read: "toolButtonColor"
index: 19
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "tabButtonColor"
type: "QColor"
read: "tabButtonColor"
index: 20
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "tabButtonPressedColor"
type: "QColor"
read: "tabButtonPressedColor"
index: 21
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "tabButtonCheckedPressedColor"
type: "QColor"
read: "tabButtonCheckedPressedColor"
index: 22
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "delegateColor"
type: "QColor"
read: "delegateColor"
index: 23
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "delegatePressedColor"
type: "QColor"
read: "delegatePressedColor"
index: 24
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "delegateFocusColor"
type: "QColor"
read: "delegateFocusColor"
index: 25
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "indicatorPressedColor"
type: "QColor"
read: "indicatorPressedColor"
index: 26
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "indicatorDisabledColor"
type: "QColor"
read: "indicatorDisabledColor"
index: 27
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "indicatorFrameColor"
type: "QColor"
read: "indicatorFrameColor"
index: 28
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "indicatorFramePressedColor"
type: "QColor"
read: "indicatorFramePressedColor"
index: 29
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "indicatorFrameDisabledColor"
type: "QColor"
read: "indicatorFrameDisabledColor"
index: 30
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "frameDarkColor"
type: "QColor"
read: "frameDarkColor"
index: 31
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "frameLightColor"
type: "QColor"
read: "frameLightColor"
index: 32
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "scrollBarColor"
type: "QColor"
read: "scrollBarColor"
index: 33
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "scrollBarPressedColor"
type: "QColor"
read: "scrollBarPressedColor"
index: 34
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "progressBarColor"
type: "QColor"
read: "progressBarColor"
index: 35
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "pageIndicatorColor"
type: "QColor"
read: "pageIndicatorColor"
index: 36
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "separatorColor"
type: "QColor"
read: "separatorColor"
index: 37
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "disabledDarkColor"
type: "QColor"
read: "disabledDarkColor"
index: 38
isReadonly: true
isFinal: true
isConstant: true
}
Property {
name: "disabledLightColor"
type: "QColor"
read: "disabledLightColor"
index: 39
isReadonly: true
isFinal: true
isConstant: true
}
}
Component {
file: "private/qtquickcontrols2basicforeign_p.h"
name: "QQuickOverlay"
accessSemantics: "reference"
defaultProperty: "data"
parentProperty: "parent"
prototype: "QQuickItem"
exports: [
"QtQuick.Controls.Basic/Overlay 2.3",
"QtQuick.Controls.Basic/Overlay 2.4",
"QtQuick.Controls.Basic/Overlay 2.7",
"QtQuick.Controls.Basic/Overlay 2.11",
"QtQuick.Controls.Basic/Overlay 6.0",
"QtQuick.Controls.Basic/Overlay 6.3",
"QtQuick.Controls.Basic/Overlay 6.7"
]
isCreatable: false
exportMetaObjectRevisions: [515, 516, 519, 523, 1536, 1539, 1543]
attachedType: "QQuickOverlayAttached"
Property {
name: "modal"
type: "QQmlComponent"
isPointer: true
read: "modal"
write: "setModal"
notify: "modalChanged"
index: 0
isFinal: true
}
Property {
name: "modeless"
type: "QQmlComponent"
isPointer: true
read: "modeless"
write: "setModeless"
notify: "modelessChanged"
index: 1
isFinal: true
}
Signal { name: "modalChanged" }
Signal { name: "modelessChanged" }
Signal { name: "pressed" }
Signal { name: "released" }
}
Component {
file: "private/qtquickcontrols2basicforeign_p.h"
name: "QQuickSplitHandleAttached"
accessSemantics: "reference"
prototype: "QObject"
exports: [
"QtQuick.Controls.Basic/SplitHandle 2.13",
"QtQuick.Controls.Basic/SplitHandle 6.0"
]
isCreatable: false
exportMetaObjectRevisions: [525, 1536]
attachedType: "QQuickSplitHandleAttached"
Property {
name: "hovered"
type: "bool"
read: "isHovered"
notify: "hoveredChanged"
index: 0
isReadonly: true
isFinal: true
}
Property {
name: "pressed"
type: "bool"
read: "isPressed"
notify: "pressedChanged"
index: 1
isReadonly: true
isFinal: true
}
Signal { name: "hoveredChanged" }
Signal { name: "pressedChanged" }
}
}
@@ -0,0 +1,131 @@
module QtQuick.Controls.Basic
linktarget Qt6::qtquickcontrols2basicstyleplugin
plugin qtquickcontrols2basicstyleplugin
classname QtQuickControls2BasicStylePlugin
typeinfo plugins.qmltypes
depends QtQuick auto
depends QtQuick.Templates auto
prefer :/qt-project.org/imports/QtQuick/Controls/Basic/
AbstractButton 6.0 AbstractButton.qml
AbstractButton 2.0 AbstractButton.qml
Action 2.3 Action.qml
Action 6.0 Action.qml
ActionGroup 2.3 ActionGroup.qml
ActionGroup 6.0 ActionGroup.qml
ApplicationWindow 6.0 ApplicationWindow.qml
ApplicationWindow 2.0 ApplicationWindow.qml
BusyIndicator 6.0 BusyIndicator.qml
BusyIndicator 2.0 BusyIndicator.qml
Button 6.0 Button.qml
Button 2.0 Button.qml
ButtonGroup 6.0 ButtonGroup.qml
ButtonGroup 2.0 ButtonGroup.qml
CheckBox 6.0 CheckBox.qml
CheckBox 2.0 CheckBox.qml
CheckDelegate 6.0 CheckDelegate.qml
CheckDelegate 2.0 CheckDelegate.qml
ComboBox 6.0 ComboBox.qml
ComboBox 2.0 ComboBox.qml
Container 6.0 Container.qml
Container 2.0 Container.qml
Control 6.0 Control.qml
Control 2.0 Control.qml
DelayButton 2.2 DelayButton.qml
DelayButton 6.0 DelayButton.qml
Dial 6.0 Dial.qml
Dial 2.0 Dial.qml
Dialog 2.1 Dialog.qml
Dialog 6.0 Dialog.qml
DialogButtonBox 2.1 DialogButtonBox.qml
DialogButtonBox 6.0 DialogButtonBox.qml
Drawer 6.0 Drawer.qml
Drawer 2.0 Drawer.qml
Frame 6.0 Frame.qml
Frame 2.0 Frame.qml
GroupBox 6.0 GroupBox.qml
GroupBox 2.0 GroupBox.qml
HorizontalHeaderView 2.15 HorizontalHeaderView.qml
HorizontalHeaderView 6.0 HorizontalHeaderView.qml
ItemDelegate 6.0 ItemDelegate.qml
ItemDelegate 2.0 ItemDelegate.qml
Label 6.0 Label.qml
Label 2.0 Label.qml
Menu 6.0 Menu.qml
Menu 2.0 Menu.qml
MenuBar 2.3 MenuBar.qml
MenuBar 6.0 MenuBar.qml
MenuBarItem 2.3 MenuBarItem.qml
MenuBarItem 6.0 MenuBarItem.qml
MenuItem 6.0 MenuItem.qml
MenuItem 2.0 MenuItem.qml
MenuSeparator 2.1 MenuSeparator.qml
MenuSeparator 6.0 MenuSeparator.qml
Page 6.0 Page.qml
Page 2.0 Page.qml
PageIndicator 6.0 PageIndicator.qml
PageIndicator 2.0 PageIndicator.qml
Pane 6.0 Pane.qml
Pane 2.0 Pane.qml
Popup 6.0 Popup.qml
Popup 2.0 Popup.qml
ProgressBar 6.0 ProgressBar.qml
ProgressBar 2.0 ProgressBar.qml
RadioButton 6.0 RadioButton.qml
RadioButton 2.0 RadioButton.qml
RadioDelegate 6.0 RadioDelegate.qml
RadioDelegate 2.0 RadioDelegate.qml
RangeSlider 6.0 RangeSlider.qml
RangeSlider 2.0 RangeSlider.qml
RoundButton 2.1 RoundButton.qml
RoundButton 6.0 RoundButton.qml
ScrollBar 6.0 ScrollBar.qml
ScrollBar 2.0 ScrollBar.qml
ScrollIndicator 6.0 ScrollIndicator.qml
ScrollIndicator 2.0 ScrollIndicator.qml
ScrollView 2.2 ScrollView.qml
ScrollView 6.0 ScrollView.qml
SelectionRectangle 6.2 SelectionRectangle.qml
Slider 6.0 Slider.qml
Slider 2.0 Slider.qml
SpinBox 6.0 SpinBox.qml
SpinBox 2.0 SpinBox.qml
SplitView 2.13 SplitView.qml
SplitView 6.0 SplitView.qml
StackView 6.0 StackView.qml
StackView 2.0 StackView.qml
SwipeDelegate 6.0 SwipeDelegate.qml
SwipeDelegate 2.0 SwipeDelegate.qml
Switch 6.0 Switch.qml
Switch 2.0 Switch.qml
SwitchDelegate 6.0 SwitchDelegate.qml
SwitchDelegate 2.0 SwitchDelegate.qml
SwipeView 6.0 SwipeView.qml
SwipeView 2.0 SwipeView.qml
TabBar 6.0 TabBar.qml
TabBar 2.0 TabBar.qml
TabButton 6.0 TabButton.qml
TabButton 2.0 TabButton.qml
TextArea 6.0 TextArea.qml
TextArea 2.0 TextArea.qml
TextField 6.0 TextField.qml
TextField 2.0 TextField.qml
ToolBar 6.0 ToolBar.qml
ToolBar 2.0 ToolBar.qml
ToolButton 6.0 ToolButton.qml
ToolButton 2.0 ToolButton.qml
ToolSeparator 2.1 ToolSeparator.qml
ToolSeparator 6.0 ToolSeparator.qml
ToolTip 6.0 ToolTip.qml
ToolTip 2.0 ToolTip.qml
Tumbler 6.0 Tumbler.qml
Tumbler 2.0 Tumbler.qml
VerticalHeaderView 2.15 VerticalHeaderView.qml
VerticalHeaderView 6.0 VerticalHeaderView.qml
singleton Calendar 6.3 Calendar.qml
CalendarModel 6.3 CalendarModel.qml
DayOfWeekRow 6.3 DayOfWeekRow.qml
MonthGrid 6.3 MonthGrid.qml
WeekNumberColumn 6.3 WeekNumberColumn.qml
TreeViewDelegate 6.0 TreeViewDelegate.qml
TreeViewDelegate 2.0 TreeViewDelegate.qml
@@ -0,0 +1,12 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ApplicationWindow {
id: window
color: window.palette.window
}
@@ -0,0 +1,65 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Shapes
T.BusyIndicator {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
contentItem: Item {
implicitWidth: 32
implicitHeight: 32
x: (control.availableWidth - width) / 2
y: (control.availableHeight - height) / 2
property Shape ring: Shape {
parent: control.contentItem
x: (parent.width - width) / 2
y: (parent.height - height) / 2
implicitWidth: parent.implicitWidth
implicitHeight: parent.implicitHeight
width: Math.min(control.contentItem.width, control.contentItem.height)
height: width
preferredRendererType: Shape.CurveRenderer
antialiasing: true
ShapePath {
fillColor: "transparent"
strokeColor: control.palette.accent
strokeWidth: control.contentItem.ring.width >= 64 ? 6 : control.contentItem.ring.width <= 16 ? 1 : 3
capStyle: ShapePath.RoundCap
PathAngleArc {
centerX: control.contentItem.ring.width / 2
centerY: control.contentItem.ring.height / 2
radiusX: control.contentItem.ring.width / 2 - 2
radiusY: radiusX
startAngle: -90
sweepAngle: 120
SequentialAnimation on startAngle {
loops: Animation.Infinite
running: control.visible && control.running
NumberAnimation { from: 0; to: 450; duration: 1000 }
NumberAnimation { from: 450; to: 1080; duration: 1000 }
}
SequentialAnimation on sweepAngle {
loops: Animation.Infinite
running: control.visible && control.running
NumberAnimation { from: 0; to: 180; duration: 1000 }
NumberAnimation { from: 180; to: 0; duration: 1000 }
}
}
}
}
}
}
@@ -0,0 +1,80 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Controls.FluentWinUI3.impl
import QtQuick.Templates as T
T.Button {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
icon.width: config.icon.width
icon.height: config.icon.height
icon.color: __buttonText
readonly property color __buttonText: {
if (control.down) {
return (control.checked || control.highlighted)
? Application.styleHints.colorScheme == Qt.Light
? Color.transparent("white", 0.7) : Color.transparent("black", 0.5)
: (Application.styleHints.colorScheme === Qt.Light
? Color.transparent(control.palette.buttonText, 0.62)
: Color.transparent(control.palette.buttonText, 0.7725))
} else if (control.checked || control.highlighted) {
return (Application.styleHints.colorScheme === Qt.Dark && !control.enabled)
? Color.transparent("white", 0.5302)
: (Application.styleHints.colorScheme === Qt.Dark ? "black" : "white")
} else {
return control.palette.buttonText
}
}
readonly property string __currentState: [
(control.checked || control.highlighted) && "checked",
!control.enabled && "disabled",
control.enabled && !control.down && control.hovered && "hovered",
control.down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: (control.flat && Config.controls.flatbutton
? Config.controls.flatbutton[__currentState]
: Config.controls.button[__currentState]) || {}
readonly property Item __focusFrameTarget: control
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.config.label.textVAlignment | control.config.label.textHAlignment
icon: control.icon
text: control.text
font: control.font
color: control.icon.color
}
background: ButtonBackground {
control: control
implicitHeight: control.config.background.height
implicitWidth: control.config.background.width
radius: control.config.background.topOffset
subtle: control.flat
}
}
@@ -0,0 +1,64 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Controls.FluentWinUI3.impl
import QtQuick.Templates as T
T.CheckBox {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
readonly property string __currentState: [
control.checkState === Qt.Checked && "checked",
!control.enabled && "disabled",
control.enabled && !control.down && control.hovered && "hovered",
control.checkState === Qt.PartiallyChecked && "partiallyChecked",
control.down && "pressed",
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.checkbox[__currentState] || {}
readonly property bool mirroredIndicator: control.mirrored !== (config.mirrored || false)
readonly property Item __focusFrameTarget: control
indicator: CheckIndicator {
x: control.text ? (control.mirroredIndicator ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
y: control.topPadding + (control.availableHeight - height) / 2
control: control
filePath: Qt.resolvedUrl(control.config.indicator.filePath)
}
contentItem: Text {
leftPadding: control.indicator && !control.mirroredIndicator ? control.indicator.width + control.spacing : 0
rightPadding: control.indicator && control.mirroredIndicator ? control.indicator.width + control.spacing : 0
text: control.text
font: control.font
color: control.palette.text
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
}
background: StyleImage {
imageConfig: control.config.background
}
}
@@ -0,0 +1,89 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
import QtQuick.Controls.FluentWinUI3.impl
T.CheckDelegate {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
spacing: 10
topPadding: config.topPadding || 0 + verticalOffset
leftPadding: config.leftPadding || 0 + __horizontalOffset
rightPadding: config.rightPadding || 0 + __horizontalOffset
bottomPadding: config.bottomPadding || 0 + __verticalOffset
icon.width: 16
icon.height: 16
icon.color: control.down ? __pressedText : control.palette.buttonText
readonly property int __horizontalOffset: 4
readonly property int __verticalOffset: 2
readonly property color __pressedText: Application.styleHints.colorScheme == Qt.Light
? Qt.rgba(control.palette.buttonText.r, control.palette.buttonText.g, control.palette.buttonText.b, 0.62)
: Qt.rgba(control.palette.buttonText.r, control.palette.buttonText.g, control.palette.buttonText.b, 0.7725)
readonly property string __currentState: [
!control.enabled && "disabled",
control.highlighted && "highlighted",
control.enabled && !control.down && control.hovered && "hovered",
control.down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.itemdelegate[__currentState] || {}
readonly property Item __focusFrameTarget: control
indicator: CheckIndicator {
readonly property string currentState: [
control.checkState === Qt.Checked && "checked",
!control.enabled && control.checkState !== Qt.Unchecked && "disabled",
control.enabled && control.checkState !== Qt.Unchecked && !control.down && control.hovered && "hovered",
control.checkState === Qt.PartiallyChecked && "partiallyChecked",
control.checkState !== Qt.Unchecked && control.down && "pressed",
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.checkbox[currentState] || {}
x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
y: control.topPadding + (control.availableHeight - height) / 2
control: control
filePath: Qt.resolvedUrl(config.indicator.filePath)
}
contentItem: IconLabel {
leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing
rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.icon.color
}
background: Item {
implicitWidth: 160
implicitHeight: 40
property Item backgroundImage: StyleImage {
parent: control.background
imageConfig: control.config.background
implicitWidth: parent.width - control.__horizontalOffset * 2
implicitHeight: parent.height - control.__verticalOffset * 2
x: control.__horizontalOffset
y: control.__verticalOffset
}
}
}
@@ -0,0 +1,146 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
import QtQuick.Controls.FluentWinUI3.impl
T.ComboBox {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
spacing: config.contentItem.spacing || 0
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: (config.leftPadding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)) || 0
rightPadding: (config.rightPadding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)) || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
readonly property string __currentState: [
!control.enabled && "disabled",
control.enabled && !control.pressed && control.hovered && "hovered",
control.down && control.popup.visible && "open",
control.pressed && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: (control.editable && control.down && control.popup.visible // editable combobox differs from normal one only in opened state
? Config.controls.editablecombobox[__currentState]
: Config.controls.combobox[__currentState]) || {}
readonly property Item __focusFrameTarget: control.editable ? null : control
delegate: ItemDelegate {
required property var model
required property int index
width: ListView.view.width
text: model[control.textRole]
palette.highlightedText: control.palette.highlightedText
highlighted: control.highlightedIndex === index
hoverEnabled: control.hoverEnabled
}
indicator: Image {
x: control.mirrored ? control.config.leftPadding : control.width - width - control.config.rightPadding
y: (control.topPadding + (control.availableHeight - height) / 2) + (control.pressed ? 1 : 0)
source: Qt.resolvedUrl(control.config.indicator.filePath)
Behavior on y {
NumberAnimation{ easing.type: Easing.OutCubic; duration: 167 }
}
}
contentItem: T.TextField {
text: control.editable ? control.editText : control.displayText
topPadding: control.config.label_contentItem.topPadding || 0
leftPadding: control.config.label_contentItem.leftPadding || 0
rightPadding: control.config.label_contentItem.rightPadding || 0
bottomPadding: control.config.label_contentItem.bottomPadding || 0
implicitWidth: (implicitBackgroundWidth + leftInset + rightInset)
|| contentWidth + leftPadding + rightPadding
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
enabled: control.editable
autoScroll: control.editable
readOnly: control.down
inputMethodHints: control.inputMethodHints
validator: control.validator
selectByMouse: control.selectTextByMouse
readonly property color __pressedText: Application.styleHints.colorScheme == Qt.Light
? Qt.rgba(control.palette.text.r, control.palette.text.g, control.palette.text.b, 0.62)
: Qt.rgba(control.palette.text.r, control.palette.text.g, control.palette.text.b, 0.7725)
color: control.down ? __pressedText : control.palette.text
selectionColor: control.palette.highlight
selectedTextColor: control.palette.highlightedText
horizontalAlignment: control.config.label_text.textHAlignment
verticalAlignment: control.config.label_text.textVAlignment
readonly property Item __focusFrameControl: control
}
background: StyleImage {
imageConfig: control.config.background
Item {
visible: control.editable && ((control.down && control.popup.visible) || control.activeFocus)
width: parent.width
height: 2
y: parent.height - height
FocusStroke {
width: parent.width
height: parent.height
radius: control.down && control.popup.visible ? 0 : control.config.background.bottomOffset
color: control.palette.accent
}
}
}
popup: T.Popup {
topPadding: control.config.popup_contentItem.topPadding || 0
leftPadding: control.config.popup_contentItem.leftPadding || 0
rightPadding: control.config.popup_contentItem.rightPadding || 0
bottomPadding: control.config.popup_contentItem.bottomPadding || 0
contentItem: ListView {
clip: true
implicitHeight: contentHeight
highlightMoveDuration: 0
model: control.delegateModel
currentIndex: control.highlightedIndex
}
y: control.editable ? control.height
: -0.25 * Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
height: Math.min(contentItem.implicitHeight + topPadding + bottomPadding, control.Window.height - topMargin - bottomMargin)
width: control.width
topMargin: 8
bottomMargin: 8
palette: control.palette
enter: Transition {
NumberAnimation { property: "height"; from: control.popup.height / 3; to: control.popup.height; easing.type: Easing.OutCubic; duration: 250 }
}
background: StyleImage {
imageConfig: control.config.popup_background.filePath ? control.config.popup_background : Config.controls.popup["normal"].background // fallback to regular popup
}
}
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,106 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
import QtQuick.Controls.FluentWinUI3.impl
T.DelayButton {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
icon.width: config.icon.width
icon.height: config.icon.height
icon.color: __buttonText
readonly property color __buttonText: {
if (control.down) {
return (control.checked)
? Application.styleHints.colorScheme == Qt.Light
? Color.transparent("white", 0.7) : Color.transparent("black", 0.5)
: (Application.styleHints.colorScheme === Qt.Light
? Color.transparent(control.palette.buttonText, 0.62)
: Color.transparent(control.palette.buttonText, 0.7725))
} else if (control.checked) {
return (Application.styleHints.colorScheme === Qt.Dark && !control.enabled)
? Color.transparent("white", 0.5302)
: (Application.styleHints.colorScheme === Qt.Dark ? "black" : "white")
} else {
return control.palette.buttonText
}
}
readonly property string __currentState: [
control.checked && "checked",
!control.enabled && "disabled",
control.enabled && !control.down && control.hovered && "hovered",
control.down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.button[__currentState] || {}
readonly property Item __focusFrameTarget: control
transition: Transition {
NumberAnimation {
duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress)
}
}
contentItem: ItemGroup {
ClippedText {
clip: control.progress > 0
clipX: -control.leftPadding + control.progress * control.width
clipWidth: (1.0 - control.progress) * control.width
visible: control.progress < 1
text: control.text
font: control.font
color: control.palette.buttonText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
ClippedText {
clip: control.progress > 0
clipX: -control.leftPadding
clipWidth: control.progress * control.width
visible: control.progress > 0
text: control.text
font: control.font
color: control.palette.brightText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
}
background: ButtonBackground {
control: control
implicitHeight: control.config.background.height
implicitWidth: control.config.background.width
radius: control.config.background.topOffset
subtle: false
Rectangle {
width: control.progress * parent.width
height: parent.height
radius: parent.radius
color: control.down ? control.palette.accent : "transparent"
visible: !control.checked && control.enabled
}
}
}
@@ -0,0 +1,86 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
import QtQuick.Effects
T.Dialog {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding,
implicitHeaderWidth,
implicitFooterWidth)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding
+ (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
leftInset: -32
topInset: -32
rightInset: -32
bottomInset: -32
padding: 24
topPadding: 12
bottomPadding: 23
enter: Transition {
NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.Linear; duration: 83 }
NumberAnimation { property: "scale"; from: control.modal ? 1.05 : 1; to: 1; easing.type: Easing.OutCubic; duration: 167 }
}
exit: Transition {
NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.Linear; duration: 83 }
NumberAnimation { property: "scale"; from: 1; to: control.modal ? 1.05 : 1; easing.type: Easing.OutCubic; duration: 167 }
}
background: Item {
MultiEffect {
x: -control.leftInset
y: -control.topInset
width: source.width
height: source.height
source: Rectangle {
width: control.background.width + control.leftInset + control.rightInset
height: control.background.height + control.topInset + control.bottomInset
color: Application.styleHints.colorScheme === Qt.Light ? "white" : Qt.tint(control.palette.window, Color.transparent("white", 0.05))
border.color: "#66757575"
radius: 8
}
shadowScale: 1
shadowOpacity: 0.19
shadowColor: control.palette.shadow
shadowEnabled: true
shadowHorizontalOffset: 0
shadowVerticalOffset: 32
blurMax: 64
}
}
header: Label {
text: control.title
topPadding: control.padding
leftPadding: control.padding
rightPadding: control.padding
visible: control.title && parent?.parent === Overlay.overlay
elide: Label.ElideRight
font.bold: true
font.pixelSize: 20
font.weight: Font.DemiBold
}
footer: DialogButtonBox {
visible: count > 0
}
T.Overlay.modal: Rectangle {
color: Color.transparent(control.palette.shadow, 0.3)
}
T.Overlay.modeless: Rectangle {
color: "transparent"
}
}
@@ -0,0 +1,52 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.DialogButtonBox {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
spacing: 8
padding: 24
alignment: count === 1 ? Qt.AlignRight : undefined
delegate: Button {
highlighted: DialogButtonBox.buttonRole === DialogButtonBox.AcceptRole || DialogButtonBox.buttonRole === DialogButtonBox.YesRole
}
contentItem: ListView {
implicitWidth: contentWidth
model: control.contentModel
spacing: control.spacing
orientation: ListView.Horizontal
boundsBehavior: Flickable.StopAtBounds
snapMode: ListView.SnapToItem
}
background: Item {
implicitHeight: 81
Rectangle {
implicitHeight: 1
color: Application.styleHints.colorScheme === Qt.Light ? "#0F000000" : "#15FFFFFF"
}
Rectangle {
implicitHeight: 80
x: 1; y: 1
width: parent.width - 2
height: parent.height - 2
color: control.palette.window
topLeftRadius: 0
bottomLeftRadius: 7
bottomRightRadius: 7
topRightRadius: 0
}
}
}
@@ -0,0 +1,50 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
Rectangle {
function moveToItem(item) {
if (!item) {
targetItem = null;
parent = null;
return;
}
parent = item.parent
targetItem = item
}
property Item targetItem
property real innerFrameSize: 1
property real outerFrameSize: 3
property real frameRadius: 4.0
x: targetItem ? targetItem.x - outerFrameSize : 0
y: targetItem ? targetItem.y - outerFrameSize : 0
// Stack on top of all siblings of the targetItem
z: 100
width: targetItem ? targetItem.width + outerFrameSize * 2 : 0
height: targetItem ? targetItem.height + outerFrameSize * 2 : 0
radius: frameRadius + outerFrameSize
visible: targetItem && targetItem.visible
color: "transparent"
border.color: Application.styleHints.colorScheme === Qt.Light ? "black" : "white"
border.width: outerFrameSize - (Application.styleHints.colorScheme === Qt.Light ? innerFrameSize : 0)
Rectangle {
id: innerFocusFrame
z: 10
x: outerFrameSize - innerFrameSize
y: outerFrameSize - innerFrameSize
width: targetItem ? targetItem.width + innerFrameSize * 2 : 0
height: targetItem ? targetItem.height + innerFrameSize * 2 : 0
radius: frameRadius + innerFrameSize
visible: targetItem && targetItem.visible
color: "transparent"
border.color: Application.styleHints.colorScheme === Qt.Light ? "white" : "black"
border.width: innerFrameSize
}
}
@@ -0,0 +1,34 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Frame {
id: control
implicitWidth: Math.max((background.minimumWidth || implicitBackgroundWidth)
+ leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max((background.minimumHeight || implicitBackgroundHeight)
+ topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
readonly property string __currentState: !control.enabled ? "disabled" : "normal";
readonly property var config: Config.controls.frame[__currentState] || {}
background: StyleImage {
imageConfig: control.config.background
}
}
@@ -0,0 +1,64 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.GroupBox {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding,
implicitLabelWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
readonly property real __deltaY: (config.background.y - config.label.y) || 0
readonly property real __deltaX: (config.background.x - config.label.x) || 0
spacing: (__deltaY - config.label.height) || 0
topPadding: (config.topPadding || 0) + (spacing >= 0 ? (label.height + spacing) : __deltaY)
bottomPadding: config.bottomPadding || 0
leftPadding: (config.leftPadding || 0) + (__deltaX >= 0 ? __deltaX : 0)
rightPadding: config.rightPadding || 0
topInset: __deltaY > 0 ? __deltaY : 0
bottomInset: -config.bottomInset || 0
leftInset: __deltaX > 0 ? __deltaX : 0
rightInset: -config.rightInset || 0
readonly property string __currentState: [
!control.enabled && "disabled",
control.enabled && control.hovered && "hovered",
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.groupbox[__currentState] || {}
label: T.Label {
x: control.__deltaX > 0 ? 0 : -__deltaX
y: control.__deltaY > 0 ? 0 : -__deltaY
topPadding: control.config.label_contentItem.topPadding || 0
leftPadding: control.config.label_contentItem.leftPadding || 0
rightPadding: control.config.label_contentItem.rightPadding || 0
bottomPadding: control.config.label_contentItem.bottomPadding || 0
height: Math.max(implicitHeight, config.label.height)
text: control.title
font: control.font
color: control.palette.windowText
elide: Text.ElideRight
horizontalAlignment: control.config.label_text.textHAlignment
verticalAlignment: control.config.label_text.textVAlignment
background: StyleImage {
imageConfig: control.config.label_background
}
}
background: StyleImage {
imageConfig: control.config.background.filePath ? control.config.background : Config.controls.frame["normal"].background // fallback to regular frame background
height: parent.height - control.topPadding + control.bottomPadding
}
}
@@ -0,0 +1,92 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.ItemDelegate {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0 + verticalOffset
leftPadding: config.leftPadding || 0 + __horizontalOffset
rightPadding: config.rightPadding || 0 + __horizontalOffset
bottomPadding: config.bottomPadding || 0 + __verticalOffset
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
icon.width: 16
icon.height: 16
icon.color: control.down ? __pressedText : control.palette.buttonText
readonly property int __horizontalOffset: 4
readonly property int __verticalOffset: 2
readonly property color __pressedText: Application.styleHints.colorScheme == Qt.Light
? Qt.rgba(control.palette.buttonText.r, control.palette.buttonText.g, control.palette.buttonText.b, 0.62)
: Qt.rgba(control.palette.buttonText.r, control.palette.buttonText.g, control.palette.buttonText.b, 0.7725)
readonly property string __currentState: [
!control.enabled && "disabled",
control.highlighted && "highlighted",
control.enabled && !control.down && control.hovered && "hovered",
control.down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.itemdelegate[__currentState] || {}
readonly property Item __focusFrameTarget: control
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.icon.color
}
background: Item {
implicitWidth: 160
implicitHeight: 40
property Item backgroundImage: StyleImage {
parent: control.background
imageConfig: control.config.background
implicitWidth: parent.width - control.__horizontalOffset * 2
implicitHeight: parent.height - control.__verticalOffset * 2
x: control.__horizontalOffset
y: control.__verticalOffset
}
property Rectangle selector: Rectangle {
parent: control.background.backgroundImage
y: (parent.height - height) / 2
width: 3
height: (control.highlighted || control.activeFocus)
? control.down ? 10 : 16
: 0
radius: width * 0.5
color: control.palette.accent
visible: control.highlighted || control.activeFocus
Behavior on height {
NumberAnimation {
duration: 187
easing.type: Easing.OutCubic
}
}
}
}
}
@@ -0,0 +1,62 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
import QtQuick.Effects
T.Menu {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
leftPadding: 5
topPadding: 5
rightPadding: 5
bottomPadding: 5
margins: 0
overlap: 4
delegate: MenuItem { }
contentItem: ListView {
implicitHeight: contentHeight
model: control.contentModel
interactive: Window.window
? contentHeight + control.topPadding + control.bottomPadding > control.height
: false
currentIndex: control.currentIndex
spacing: 4
clip: true
ScrollIndicator.vertical: ScrollIndicator {}
}
enter: Transition {
NumberAnimation {
property: "height"
from: control.implicitHeight * 0.33
to: control.implicitHeight
easing.type: Easing.OutCubic
duration: 250
}
}
background: StyleImage {
implicitWidth: 200
implicitHeight: 30
imageConfig: Config.controls.popup["normal"].background
}
T.Overlay.modal: Rectangle {
color: "transparent"
}
T.Overlay.modeless: Rectangle {
color: "transparent"
}
}
@@ -0,0 +1,37 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.MenuBar {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
readonly property var config: Config.controls.toolbar["normal"] || {}
delegate: MenuBarItem { }
contentItem: Row {
spacing: control.spacing
Repeater {
model: control.contentModel
}
}
background: StyleImage {
imageConfig: control.config.background
}
}
@@ -0,0 +1,65 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
import QtQuick.Controls.FluentWinUI3.impl
T.MenuBarItem {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
icon.width: config.icon.width
icon.height: config.icon.height
icon.color: !control.down ? control.palette.buttonText : Application.styleHints.colorScheme === Qt.Light
? Qt.rgba(control.palette.buttonText.r, control.palette.buttonText.g, control.palette.buttonText.b, 0.62)
: Qt.rgba(control.palette.buttonText.r, control.palette.buttonText.g, control.palette.buttonText.b, 0.7725)
readonly property string __currentState: [
!control.enabled && "disabled",
control.enabled && !control.down && (control.hovered || control.highlighted) && "hovered",
down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.toolbutton[__currentState] || {}
readonly property Item __focusFrameTarget: control
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.icon.color
}
background: ButtonBackground {
control: control
implicitHeight: 30
implicitWidth: 30
radius: control.config.background.topOffset
subtle: !control.checked || control.flat
accented: control.checked
}
}
@@ -0,0 +1,87 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.MenuItem {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
leftPadding: 12
rightPadding: 12
topPadding: 3
bottomPadding: 3
spacing: 6
icon.width: 16
icon.height: 16
icon.color: control.palette.text
implicitTextPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0
contentItem: IconLabel {
readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0
leftPadding: !control.mirrored ? control.textPadding : arrowPadding
rightPadding: control.mirrored ? control.textPadding : arrowPadding
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.icon.color
}
arrow: ColorImage {
x: control.mirrored ? control.padding : control.width - width - control.padding
y: control.topPadding + (control.availableHeight - height) / 2
width: 20
visible: control.subMenu
rotation: control.mirrored ? -180 : 0
color: control.palette.text
source: Qt.resolvedUrl("icons/menuarrow.png")
fillMode: Image.Pad
}
indicator: Item {
implicitWidth: 14
implicitHeight: 10
x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding
y: control.topPadding + (control.availableHeight - height) / 2
visible: control.checkable
ColorImage {
y: (parent.height - height) / 2
color: control.palette.text
source: Qt.resolvedUrl("icons/checkmark.png")
visible: control.checkState === Qt.Checked
|| (control.checked && control.checkState === undefined)
}
}
background: Rectangle {
implicitWidth: 200
implicitHeight: 30
radius: 4
readonly property real alpha: control.down
? Application.styleHints.colorScheme === Qt.Light ? 0.0241 : 0.0419
: control.hovered ? Application.styleHints.colorScheme === Qt.Light ? 0.0373 : 0.0605 : 0
color: Application.styleHints.colorScheme === Qt.Light ? Qt.rgba(0, 0, 0, alpha) : Qt.rgba(1, 1, 1, alpha)
visible: control.down || control.highlighted
}
}
@@ -0,0 +1,23 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
T.MenuSeparator {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
horizontalPadding: 0
verticalPadding: 2
contentItem: Rectangle {
implicitWidth: 188
implicitHeight: 1
color: Application.styleHints.colorScheme === Qt.Light ? "#0F000000" : "#15FFFFFF"
}
}
@@ -0,0 +1,68 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.PageIndicator {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
readonly property string __currentState: [
!control.enabled && "disabled",
control.enabled && control.hovered && "hovered",
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.pageindicator[__currentState] || {}
delegate: StyleImage {
required property int index
property alias hovered: hoverHandler.hovered
readonly property string __currentState: [
!control.enabled && "disabled",
control.enabled && (index === control.currentIndex || pressed) && "delegate",
control.enabled && index === control.currentIndex && "current",
control.enabled && hovered && !pressed && "hovered",
control.enabled && control.interactive && pressed && "pressed",
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.pageindicatordelegate[__currentState].indicator || {}
imageConfig: config
HoverHandler {
id: hoverHandler
enabled: control.interactive
}
}
contentItem: Row {
spacing: control.spacing
Repeater {
model: control.count
delegate: control.delegate
}
}
background: StyleImage {
imageConfig: control.config.background
}
}
@@ -0,0 +1,52 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Popup {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
readonly property string __currentState: "normal"
readonly property var config: Config.controls.popup[__currentState] || {}
enter: Transition {
NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.Linear; duration: 83 }
NumberAnimation { property: "scale"; from: control.modal ? 1.05 : 1; to: 1; easing.type: Easing.OutCubic; duration: 167 }
}
exit: Transition {
NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.Linear; duration: 83 }
NumberAnimation { property: "scale"; from: 1; to: control.modal ? 1.05 : 1; easing.type: Easing.OutCubic; duration: 167 }
}
background: StyleImage {
implicitWidth: 320
implicitHeight: 72
imageConfig: control.config.background
}
T.Overlay.modal: Rectangle {
color: Color.transparent(control.palette.shadow, 0.3)
}
T.Overlay.modeless: Rectangle {
color: "transparent"
}
}
@@ -0,0 +1,117 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
import QtQuick.Effects
T.ProgressBar {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
readonly property string __currentState: [
!control.enabled && "disabled",
control.indeterminate && "indeterminate"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.progressbar[__currentState] || {}
contentItem: Item {
implicitWidth: control.indeterminate ? parent.availableWidth : progress.implicitWidth
implicitHeight: control.indeterminate ? control.config.track.height : progress.implicitHeight
scale: control.mirrored ? -1 : 1
clip: control.indeterminate
readonly property Rectangle progress: Rectangle {
x: control.background.groove?.x - 1
y: control.background.groove?.y - 1
parent: control.contentItem
visible: !control.indeterminate && control.value
implicitWidth: control.config.track.width
implicitHeight: control.config.track.height
width: control.position * parent.width
height: control.config.track.height
radius: control.config.track.height * 0.5
color: control.palette.accent
}
readonly property Rectangle animatedProgress: Rectangle {
parent: control.contentItem
implicitWidth: parent.width
implicitHeight: control.config.track.height
radius: control.config.track.height * 0.5
clip: true
visible: false
color: "transparent"
Rectangle {
width: 0.5 * parent.width
height: control.config.track.height
radius: control.config.track.height * 0.5
color: control.palette.accent
SequentialAnimation on x {
loops: Animation.Infinite
running: control.indeterminate && control.visible
NumberAnimation {
from: -control.contentItem.animatedProgress.width
to: control.contentItem.width
easing.type: Easing.InOutCubic
duration: control.width * 8
}
NumberAnimation {
from: -control.contentItem.animatedProgress.width * 0.5
to: control.contentItem.width
easing.type: Easing.InOutCubic
duration: control.width * 5
}
}
}
}
readonly property Rectangle mask: Rectangle {
parent: control.contentItem
width: control.availableWidth
height: control.contentItem.animatedProgress.height
radius: control.contentItem.animatedProgress.radius
visible: false
color: control.palette.accent
layer.enabled: true
antialiasing: false
}
MultiEffect {
visible: control.indeterminate
source: control.contentItem.animatedProgress
width: control.contentItem.animatedProgress.width
height: control.contentItem.animatedProgress.height
maskEnabled: true
maskSource: control.contentItem.mask
}
}
background: Item {
implicitWidth: groove.width
property Item groove: StyleImage {
imageConfig: control.config.groove
visible: !control.indeterminate
parent: control.background
height: implicitHeight
width: parent.width
x: (parent.width - width) / 2
y: (parent.height - height) / 2
}
}
}
@@ -0,0 +1,63 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Controls.FluentWinUI3.impl
import QtQuick.Templates as T
T.RadioButton {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
readonly property string __currentState: [
control.checked && "checked",
!control.enabled && "disabled",
control.enabled && !control.down && control.hovered && "hovered",
control.down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.radiobutton[__currentState] || {}
readonly property bool mirroredIndicator: control.mirrored !== (config.mirrored || false)
readonly property Item __focusFrameTarget: control
indicator: RadioIndicator {
x: control.text ? (control.mirroredIndicator ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
y: control.topPadding + (control.availableHeight - height) / 2
control: control
filePath: Qt.resolvedUrl(control.config.indicator.filePath)
}
contentItem: Text {
leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
text: control.text
font: control.font
color: control.palette.text
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
}
background: StyleImage {
imageConfig: control.config.background
}
}
@@ -0,0 +1,88 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
import QtQuick.Controls.FluentWinUI3.impl
T.RadioDelegate {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
spacing: 10
topPadding: config.topPadding || 0 + verticalOffset
leftPadding: config.leftPadding || 0 + __horizontalOffset
rightPadding: config.rightPadding || 0 + __horizontalOffset
bottomPadding: config.bottomPadding || 0 + __verticalOffset
icon.width: 16
icon.height: 16
icon.color: control.down ? __pressedText : control.palette.buttonText
readonly property int __horizontalOffset: 4
readonly property int __verticalOffset: 2
readonly property color __pressedText: Application.styleHints.colorScheme == Qt.Light
? Qt.rgba(control.palette.buttonText.r, control.palette.buttonText.g, control.palette.buttonText.b, 0.62)
: Qt.rgba(control.palette.buttonText.r, control.palette.buttonText.g, control.palette.buttonText.b, 0.7725)
readonly property string __currentState: [
!control.enabled && "disabled",
control.highlighted && "highlighted",
control.enabled && !control.down && control.hovered && "hovered",
control.down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.itemdelegate[__currentState] || {}
readonly property Item __focusFrameTarget: control
indicator: RadioIndicator {
readonly property string currentState: [
control.checked && "checked",
!control.enabled && control.checked && "disabled",
control.enabled && control.checked && !control.down && control.hovered && "hovered",
control.down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.radiobutton[currentState] || {}
x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
y: control.topPadding + (control.availableHeight - height) / 2
control: control
filePath: Qt.resolvedUrl(config.indicator.filePath)
}
contentItem: IconLabel {
leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing
rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.icon.color
}
background: Item {
implicitWidth: 160
implicitHeight: 40
property Item backgroundImage: StyleImage {
parent: control.background
imageConfig: control.config.background
implicitWidth: parent.width - control.__horizontalOffset * 2
implicitHeight: parent.height - control.__verticalOffset * 2
x: control.__horizontalOffset
y: control.__verticalOffset
}
}
}
@@ -0,0 +1,206 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.RangeSlider {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
first.implicitHandleWidth + leftPadding + rightPadding,
second.implicitHandleWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
first.implicitHandleHeight + topPadding + bottomPadding,
second.implicitHandleHeight + topPadding + bottomPadding)
topPadding: horizontal ? config.topPadding : config.leftPadding || 0
leftPadding: horizontal ? config.leftPadding : config.bottomPadding || 0
rightPadding: horizontal ? config.rightPadding : config.topPadding || 0
bottomPadding: horizontal ? config.bottomPadding : config.rightPadding || 0
readonly property string __controlState: [
!control.enabled && "disabled",
control.enabled && control.hovered && !(first.pressed || second.pressed) && "hovered",
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.rangeslider[__controlState] || {}
readonly property real __steps: Math.abs(to - from) / stepSize
readonly property bool __isDiscrete: stepSize >= Number.EPSILON
&& Math.abs(Math.round(__steps) - __steps) < Number.EPSILON
property string __firstHandleState: [
!control.enabled && "disabled",
first.hovered && !first.pressed && "hovered",
first.pressed && "handle_pressed",
].filter(Boolean).join("_") || "normal"
readonly property var firstHandleConfig: Config.controls.rangeslider[__firstHandleState] || {}
property string __secondHandleState: [
!control.enabled && "disabled",
second.hovered && !second.pressed && "hovered",
second.pressed && "handle_pressed",
].filter(Boolean).join("_") || "normal"
readonly property var secondHandleConfig: Config.controls.rangeslider[__secondHandleState] || {}
readonly property Item __focusFrameControl: control
readonly property Item __focusFrameTarget: control
first.handle: StyleImage {
x: Math.round(control.leftPadding + (control.horizontal
? control.first.visualPosition * (control.availableWidth - width)
: (control.availableWidth - width) / 2))
y: Math.round(control.topPadding + (control.horizontal
? (control.availableHeight - height) / 2
: control.first.visualPosition * (control.availableHeight - height)))
imageConfig: control.firstHandleConfig.first_handle
readonly property Item __focusFrameTarget: control
property Rectangle indicator: Rectangle {
property real diameter: !control.enabled ? 10 : control.first.pressed ? 8 : control.first.hovered ? 14 : 10
parent: control.first.handle
width: diameter
height: diameter
radius: diameter * 0.5
x: (control.secondHandleConfig.first_handle.width - width) / 2
y: (control.secondHandleConfig.first_handle.height - height) / 2
color: control.enabled ? (control.first.hovered ? Qt.rgba(control.palette.accent.r, control.palette.accent.g, control.palette.accent.b, 0.9020)
: control.first.pressed ? Qt.rgba(control.palette.accent.r, control.palette.accent.g, control.palette.accent.b, 0.8)
: control.palette.accent)
: control.palette.accent
Behavior on diameter {
// From WindowsUI 3 Animation Values
NumberAnimation {
duration: 167
easing.type: Easing.OutCubic
}
}
}
}
second.handle: StyleImage {
x: Math.round(control.leftPadding + (control.horizontal
? control.second.visualPosition * (control.availableWidth - width)
: (control.availableWidth - width) / 2))
y: Math.round(control.topPadding + (control.horizontal
? (control.availableHeight - height) / 2
: control.second.visualPosition * (control.availableHeight - height)))
imageConfig: control.secondHandleConfig.second_handle
readonly property Item __focusFrameTarget: control
property Rectangle indicator: Rectangle {
property real diameter: control.second.pressed ? 8 : control.second.hovered ? 14 : 10
parent: control.second.handle
width: diameter
height: diameter
radius: diameter * 0.5
x: (control.secondHandleConfig.second_handle.width - width) / 2
y: (control.secondHandleConfig.second_handle.height - height) / 2
color: control.enabled ? (control.second.hovered ? Qt.rgba(control.palette.accent.r, control.palette.accent.g, control.palette.accent.b, 0.9020)
: control.second.pressed ? Qt.rgba(control.palette.accent.r, control.palette.accent.g, control.palette.accent.b, 0.8)
: control.palette.accent)
: control.palette.accent
Behavior on diameter {
// From WindowsUI 3 Animation Values
NumberAnimation{
duration: 167
easing.type: Easing.OutCubic
}
}
}
}
background: Item {
implicitWidth: control.horizontal
? (_background.implicitWidth || _background.groove.implicitWidth)
: (_background.implicitHeight || _background.groove.implicitHeight)
implicitHeight: control.horizontal
? (_background.implicitHeight || _background.groove.implicitHeight)
: (_background.implicitWidth || _background.groove.implicitWidth)
property Item _background: StyleImage {
parent: control.background
width: parent.width
height: parent.width
imageConfig: control.config.background
property Item groove: StyleImage {
parent: control.background._background
x: control.leftPadding - control.leftInset + (control.horizontal
? control.firstHandleConfig.first_handle.width / 2
: (control.availableWidth - width) / 2)
y: control.topPadding - control.rightInset + (control.horizontal
? ((control.availableHeight - height) / 2)
: control.firstHandleConfig.first_handle.height / 2)
width: control.horizontal
? control.availableWidth
- (control.firstHandleConfig.first_handle.width / 2) - (control.secondHandleConfig.second_handle.width / 2)
: implicitWidth
height: control.horizontal
? implicitHeight
: control.availableHeight
- (control.firstHandleConfig.first_handle.width / 2) - (control.secondHandleConfig.second_handle.width / 2)
imageConfig: control.config.groove
horizontal: control.horizontal
property Rectangle track: Rectangle {
parent: control.background._background.groove
x: control.horizontal ? parent.width * control.first.position : 0
y: control.horizontal ? 0 : parent.height - (parent.height * control.second.position)
implicitWidth: control.horizontal ? control.config.track.width : control.config.track.height
implicitHeight: control.horizontal ? control.config.track.height : control.config.track.width
width: control.horizontal
? parent.width * (control.second.position - control.first.position)
: parent.width
height: control.horizontal
? parent.height
: parent.height * (control.second.position - control.first.position)
radius: control.config.track.height * 0.5
color: control.palette.accent
}
}
property Repeater ticksTop: Repeater {
parent: control.background._background.groove
model: control.__isDiscrete ? Math.floor(control.__steps) + 1 : 0
delegate: Rectangle {
width: control.horizontal ? 1 : 4
height: control.horizontal ? 4 : 1
x: control.horizontal
? 6 + index * (parent.width - 2 * 6 - width) / (control.background._background.ticksTop.model - 1)
: -4 - width
y: control.horizontal
? -4 - height
: 6 + index * (parent.height - 2 * 6 - height) / (control.background._background.ticksTop.model - 1)
color: Application.styleHints.colorScheme == Qt.Light ? "#9C000000" : "#9AFFFFFF"
required property int index
}
}
property Repeater ticksBottom: Repeater {
parent: control.background._background.groove
model: control.__isDiscrete ? Math.floor(control.__steps) + 1 : 0
delegate: Rectangle {
width: control.horizontal ? 1 : 4
height: control.horizontal ? 4 : 1
x: control.horizontal
? 6 + index * (parent.width - 2 * 6 - width) / (control.background._background.ticksBottom.model - 1)
: parent.width + 4
y: control.horizontal
? parent.height + 4
: 6 + index * (parent.height - 2 * 6 - height) / (control.background._background.ticksBottom.model - 1)
color: Application.styleHints.colorScheme == Qt.Light ? "#9C000000" : "#9AFFFFFF"
required property int index
}
}
}
}
}
@@ -0,0 +1,75 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Controls.FluentWinUI3.impl
import QtQuick.Templates as T
T.RoundButton {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0
bottomPadding: config.bottomPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
icon.width: config.icon.width
icon.height: config.icon.height
icon.color: __buttonText
readonly property color __buttonText: {
if (control.down) {
return (control.checked || control.highlighted)
? Application.styleHints.colorScheme == Qt.Light
? Color.transparent("white", 0.7) : Color.transparent("black", 0.5)
: (Application.styleHints.colorScheme === Qt.Light
? Color.transparent(control.palette.buttonText, 0.62)
: Color.transparent(control.palette.buttonText, 0.7725))
} else if (control.checked || control.highlighted) {
return (Application.styleHints.colorScheme === Qt.Dark && !control.enabled)
? Color.transparent("white", 0.5302)
: (Application.styleHints.colorScheme === Qt.Dark ? "black" : "white")
} else {
return control.palette.buttonText
}
}
readonly property string __currentState: [
(control.checked || control.highlighted) && "checked",
!control.enabled && "disabled",
control.enabled && !control.down && control.hovered && "hovered",
control.down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: (control.flat && Config.controls.flatbutton
? Config.controls.flatbutton[__currentState]
: Config.controls.button[__currentState]) || {}
readonly property Item __focusFrameTarget: control
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
icon: control.icon
text: control.text
font: control.font
color: control.icon.color
}
background: ButtonBackground {
control: control
implicitHeight: control.config.background.height
implicitWidth: implicitWidth
radius: control.radius
}
}
@@ -0,0 +1,148 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
T.Slider {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitHandleWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitHandleHeight + topPadding + bottomPadding)
topPadding: horizontal ? config.topPadding : config.leftPadding || 0
leftPadding: horizontal ? config.leftPadding : config.bottomPadding || 0
rightPadding: horizontal ? config.rightPadding : config.topPadding || 0
bottomPadding: horizontal ? config.bottomPadding : config.rightPadding || 0
readonly property string __currentState: [
!control.enabled && "disabled",
control.enabled && !control.pressed && control.hovered && "hovered",
control.pressed && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.slider[__currentState] || {}
readonly property Item __focusFrameTarget: control
readonly property real __steps: Math.abs(to - from) / stepSize
readonly property bool __isDiscrete: stepSize >= Number.EPSILON
&& Math.abs(Math.round(__steps) - __steps) < Number.EPSILON
handle: StyleImage {
x: Math.round(control.leftPadding + (control.horizontal
? control.visualPosition * (control.availableWidth - width)
: (control.availableWidth - width) / 2))
y: Math.round(control.topPadding + (control.horizontal
? (control.availableHeight - height) / 2
: control.visualPosition * (control.availableHeight - height)))
imageConfig: control.config.handle
property Rectangle indicator: Rectangle {
property real diameter: !control.enabled ? 10 : control.pressed ? 8 : control.hovered ? 14 : 10
parent: control.handle
width: diameter
height: diameter
radius: diameter * 0.5
x: (control.config.handle.width - width) / 2
y: (control.config.handle.height - height) / 2
color: control.enabled ? (control.hovered ? Qt.rgba(control.palette.accent.r, control.palette.accent.g, control.palette.accent.b, 0.9020)
: control.pressed ? Qt.rgba(control.palette.accent.r, control.palette.accent.g, control.palette.accent.b, 0.8)
: control.palette.accent)
: control.palette.accent
Behavior on diameter {
// From WindowsUI 3 Animation Values
NumberAnimation{
duration: 167
easing.type: Easing.OutCubic
}
}
}
}
background: Item {
implicitWidth: control.horizontal
? (_background.implicitWidth || _background.groove.implicitWidth)
: (_background.implicitHeight || _background.groove.implicitHeight)
implicitHeight: control.horizontal
? (_background.implicitHeight || _background.groove.implicitHeight)
: (_background.implicitWidth || _background.groove.implicitWidth)
property Item _background: StyleImage {
parent: control.background
width: parent.width
height: parent.height
imageConfig: control.config.background
property Item groove: StyleImage {
parent: control.background._background
x: control.leftPadding - control.leftInset + (control.horizontal
? control.config.handle.width / 2
: (control.availableWidth - width) / 2)
y: control.topPadding - control.topInset + (control.horizontal
? ((control.availableHeight - height) / 2)
: control.config.handle.height / 2)
width: control.horizontal
? control.availableWidth - control.config.handle.width
: implicitWidth
height: control.horizontal
? implicitHeight
: control.availableHeight - control.config.handle.width
imageConfig: control.config.groove
horizontal: control.horizontal
property Rectangle track: Rectangle {
parent: control.background._background.groove
y: control.horizontal ? 0 : parent.height - (parent.height * control.position)
implicitWidth: control.horizontal ? control.config.track.width : control.config.track.height
implicitHeight: control.horizontal ? control.config.track.height : control.config.track.width
width: control.horizontal ? parent.width * control.position : parent.width
height: control.horizontal ? parent.height : parent.height * control.position
radius: control.config.track.height * 0.5
color: control.palette.accent
}
}
property Repeater ticksTop: Repeater {
parent: control.background._background.groove
model: control.__isDiscrete ? Math.floor(control.__steps) + 1 : 0
delegate: Rectangle {
width: control.horizontal ? 1 : 4
height: control.horizontal ? 4 : 1
x: control.horizontal
? 6 + index * (parent.width - 2 * 6 - width) / (control.background._background.ticksTop.model - 1)
: -4 - width
y: control.horizontal
? -4 - height
: 6 + index * (parent.height - 2 * 6 - height) / (control.background._background.ticksTop.model - 1)
color: Application.styleHints.colorScheme == Qt.Light ? "#9C000000" : "#9AFFFFFF"
required property int index
}
}
property Repeater ticksBottom: Repeater {
parent: control.background._background.groove
model: control.__isDiscrete ? Math.floor(control.__steps) + 1 : 0
delegate: Rectangle {
width: control.horizontal ? 1 : 4
height: control.horizontal ? 4 : 1
x: control.horizontal
? 6 + index * (parent.width - 2 * 6 - width) / (control.background._background.ticksBottom.model - 1)
: parent.width + 4
y: control.horizontal
? parent.height + 4
: 6 + index * (parent.height - 2 * 6 - height) / (control.background._background.ticksBottom.model - 1)
color: Application.styleHints.colorScheme == Qt.Light ? "#9C000000" : "#9AFFFFFF"
required property int index
}
}
}
}
}
@@ -0,0 +1,106 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Templates as T
import QtQuick.Controls.FluentWinUI3.impl
T.SpinBox {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
up.implicitIndicatorHeight, down.implicitIndicatorHeight)
property string __controlState: [
enabled && (down.hovered || down.pressed) && "down",
enabled && (up.hovered || up.pressed) && !(down.hovered || down.pressed) && "up",
enabled && (hovered || down.hovered || up.hovered) && !(down.pressed || up.pressed) && "hovered",
enabled && (down.pressed || up.pressed) && "pressed",
!enabled && "disabled"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.spinbox[__controlState] || {}
readonly property var downConfig: value == from ? Config.controls.spinbox["atlimit"] : config
readonly property var upConfig: value == to ? Config.controls.spinbox["atlimit"] : config
spacing: config.contentItem.spacing || 0
leftPadding: ((!mirrored ? config.leftPadding : config.rightPadding) || 0) + (mirrored ? (up.indicator ? up.indicator.width * 2 : 0) : 0)
rightPadding: ((!mirrored ? config.rightPadding : config.leftPadding) || 0) + (!mirrored ? (up.indicator ? up.indicator.width * 2 : 0) : 0)
topPadding: config.topPadding || 0
bottomPadding: config?.bottomPadding || 0
topInset: -config.topInset || 0
bottomInset: -config.bottomInset || 0
leftInset: -config.leftInset || 0
rightInset: -config.rightInset || 0
validator: IntValidator {
locale: control.locale.name
bottom: Math.min(control.from, control.to)
top: Math.max(control.from, control.to)
}
contentItem: TextInput {
clip: width < implicitWidth
text: control.displayText
opacity: control.enabled ? 1 : 0.3
font: control.font
color: control.palette.text
selectionColor: control.palette.highlight
selectedTextColor: control.palette.highlightedText
horizontalAlignment: control.mirrored ? Text.AlignRight : Text.AlignLeft
verticalAlignment: Text.AlignVCenter
readOnly: !control.editable
validator: control.validator
inputMethodHints: control.inputMethodHints
}
down.indicator: StyleImage {
x: !control.mirrored ? control.up.indicator ? (control.up.indicator.x - width) : 0
: control.config.rightPadding
y: control.topPadding
height: control.availableHeight
imageConfig: control.downConfig.indicator_down_background
StyleImage {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
imageConfig: control.downConfig.indicator_down_icon
}
}
up.indicator: StyleImage {
x: control.mirrored ? control.config.rightPadding + (control.down.indicator ? control.down.indicator.width : 0)
: control.width - width - control.config.rightPadding
y: control.topPadding
height: control.availableHeight
imageConfig: control.upConfig.indicator_up_background
StyleImage {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
imageConfig: control.upConfig.indicator_up_icon
}
}
background: StyleImage {
imageConfig: control.config.background
Item {
visible: control.activeFocus
width: parent.width
height: 2
y: parent.height - height
FocusStroke {
width: parent.width
height: parent.height
radius: control.config.background.bottomOffset
color: control.palette.accent
}
}
}
}
@@ -0,0 +1,54 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
// This item will resize the child image in such a way that any drop shadow
// or blur (or other effects) will be drawn outside its own bounds.
// The effect is that users of this item won't have to take e.g shadows
// into account when positioning it, as such effects will only be visual, and
// not be a part of the geometry.
Item {
id: root
implicitWidth: horizontal ? imageConfig.width : imageConfig.height
implicitHeight: horizontal ? imageConfig.height : imageConfig.width
required property var imageConfig
// Set horizontal to false if you want the image to be rotated 90 degrees
// Doing so will rotate the image, but also flip it, to make sure that
// the shadow ends up on the correct side. The implicit geometry of the
// item will also be adjusted to match the rotated image.
property bool horizontal: true
// The minimum size of the image should be at least 1px tall and wide, even without any offsets
property real minimumWidth: Math.max(1, imageConfig.leftOffset + imageConfig.rightOffset)
property real minimumHeight: Math.max(1, imageConfig.topOffset + imageConfig.bottomOffset)
BorderImage {
x: -imageConfig.leftShadow
y: -imageConfig.topShadow
width: Math.max(root.minimumWidth, (root.horizontal ? root.width : root.height))
+ imageConfig.leftShadow + imageConfig.rightShadow
height: Math.max(root.minimumHeight, (root.horizontal ? root.height : root.width))
+ imageConfig.topShadow + imageConfig.bottomShadow
source: Qt.resolvedUrl(imageConfig.filePath)
border {
top: Math.min(height / 2, imageConfig.topOffset + imageConfig.topShadow)
left: Math.min(width / 2, imageConfig.leftOffset + imageConfig.leftShadow)
bottom: Math.min(height / 2, imageConfig.bottomOffset + imageConfig.bottomShadow)
right: Math.min(width / 2, imageConfig.rightOffset + imageConfig.rightShadow)
}
transform: [
Rotation {
angle: root.horizontal ? 0 : 90
},
Scale {
xScale: root.horizontal ? 1 : -1
}
]
}
}
@@ -0,0 +1,66 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls.impl
T.SwipeDelegate {
id: control
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
spacing: config.spacing || 0
topPadding: config.topPadding || 0
leftPadding: config.leftPadding || 0
rightPadding: config.rightPadding || 0
bottomPadding: config.bottomPadding || 0
icon.width: 16
icon.height: 16
icon.color: control.down ? __pressedText : control.palette.buttonText
readonly property color __pressedText: Application.styleHints.colorScheme === Qt.Light
? Color.transparent(control.palette.buttonText, 0.62)
: Color.transparent(control.palette.buttonText, 0.7725)
readonly property string __currentState: [
!control.enabled && "disabled",
control.highlighted && "highlighted",
control.enabled && !control.down && control.hovered && "hovered",
control.down && "pressed"
].filter(Boolean).join("_") || "normal"
readonly property var config: Config.controls.itemdelegate[__currentState] || {}
readonly property Item __focusFrameTarget: control
swipe.transition: Transition { SmoothedAnimation { duration: 167; easing.type: Easing.OutCubic } }
contentItem: IconLabel {
spacing: control.spacing
mirrored: control.mirrored
display: control.display
alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
icon: control.icon
text: control.text
font: control.font
color: control.icon.color
}
background: Rectangle {
implicitWidth: control.config.background.width
implicitHeight: control.config.background.height
readonly property bool lightScheme: Application.styleHints.colorScheme === Qt.Light
readonly property color bakcgroundColorTint: control.down
? lightScheme ? Color.transparent("black", 0.02) : Color.transparent("white", 0.04)
: control.hovered || control.highlighted
? lightScheme ? Color.transparent("black", 0.04) : Color.transparent("white", 0.06)
: "transparent"
color: Qt.tint(control.palette.window, bakcgroundColorTint)
}
}
Loaded 100 of 6110 files, more files were not shown because too many files have changed in this diff. Show more