diff options
Diffstat (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Settings/Widgets/SettingsSliderRow.qml')
| -rw-r--r-- | raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Settings/Widgets/SettingsSliderRow.qml | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Settings/Widgets/SettingsSliderRow.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Settings/Widgets/SettingsSliderRow.qml new file mode 100644 index 0000000..b1ada84 --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Settings/Widgets/SettingsSliderRow.qml @@ -0,0 +1,148 @@ +pragma ComponentBehavior: Bound + +import QtQuick +import qs.Common +import qs.Services +import qs.Widgets + +Item { + id: root + + LayoutMirroring.enabled: I18n.isRtl + LayoutMirroring.childrenInherit: true + + property string tab: "" + property var tags: [] + property string settingKey: "" + + property string text: "" + property string description: "" + + readonly property bool isHighlighted: settingKey !== "" && SettingsSearchService.highlightSection === settingKey + + function findParentFlickable() { + let p = root.parent; + while (p) { + if (p.hasOwnProperty("contentY") && p.hasOwnProperty("contentItem")) + return p; + p = p.parent; + } + return null; + } + + Component.onCompleted: { + if (!settingKey) + return; + let flickable = findParentFlickable(); + if (flickable) + SettingsSearchService.registerCard(settingKey, root, flickable); + } + + Component.onDestruction: { + if (settingKey) + SettingsSearchService.unregisterCard(settingKey); + } + + Rectangle { + anchors.fill: parent + radius: Theme.cornerRadius + color: Theme.withAlpha(Theme.primary, root.isHighlighted ? 0.2 : 0) + visible: root.isHighlighted + + Behavior on color { + ColorAnimation { + duration: Theme.shortDuration + easing.type: Theme.standardEasing + } + } + } + property alias value: slider.value + property alias minimum: slider.minimum + property alias maximum: slider.maximum + property alias step: slider.step + property alias unit: slider.unit + property alias wheelEnabled: slider.wheelEnabled + property alias thumbOutlineColor: slider.thumbOutlineColor + property int defaultValue: -1 + + signal sliderValueChanged(int newValue) + signal sliderDragFinished(int finalValue) + width: parent?.width ?? 0 + height: headerRow.height + Theme.spacingXS + slider.height + + Column { + id: contentColumn + width: parent.width - Theme.spacingM * 2 + x: Theme.spacingM + anchors.verticalCenter: parent.verticalCenter + spacing: Theme.spacingXS + + Row { + id: headerRow + width: parent.width + height: labelColumn.height + spacing: Theme.spacingS + + Column { + id: labelColumn + anchors.verticalCenter: parent.verticalCenter + spacing: Theme.spacingXS + width: parent.width - resetButtonContainer.width - Theme.spacingS + + StyledText { + text: root.text + font.pixelSize: Theme.fontSizeMedium + font.weight: Font.Medium + color: Theme.surfaceText + visible: root.text !== "" + width: parent.width + horizontalAlignment: Text.AlignLeft + } + + StyledText { + text: root.description + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + wrapMode: Text.WordWrap + width: parent.width + visible: root.description !== "" + horizontalAlignment: Text.AlignLeft + } + } + + Item { + id: resetButtonContainer + width: root.defaultValue >= 0 ? 36 : 0 + height: 36 + anchors.verticalCenter: parent.verticalCenter + + DankActionButton { + id: resetButton + anchors.centerIn: parent + buttonSize: 36 + iconName: "restart_alt" + iconSize: 20 + visible: root.defaultValue >= 0 && slider.value !== root.defaultValue + backgroundColor: Theme.surfaceContainerHigh + iconColor: Theme.surfaceVariantText + onClicked: { + slider.value = root.defaultValue; + root.sliderValueChanged(root.defaultValue); + root.sliderDragFinished(root.defaultValue); + } + } + } + } + + DankSlider { + id: slider + width: parent.width + height: 32 + showValue: true + wheelEnabled: false + thumbOutlineColor: Theme.surfaceContainerHigh + onSliderValueChanged: newValue => root.sliderValueChanged(newValue) + onSliderDragFinished: finalValue => root.sliderDragFinished(finalValue) + } + } +} |