mirror of
https://github.com/end-4/dots-hyprland.git
synced 2026-06-05 14:59:27 -05:00
159 lines
5.1 KiB
QML
159 lines
5.1 KiB
QML
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
import qs.modules.common
|
|
import qs.modules.common.functions
|
|
import qs.modules.waffle.looks
|
|
|
|
// Generic button with background
|
|
Button {
|
|
id: root
|
|
|
|
property color colBackground: ColorUtils.transparentize(Looks.colors.bg1)
|
|
property color colBackgroundHover: Looks.colors.bg2Hover
|
|
property color colBackgroundActive: Looks.colors.bg2Active
|
|
property color colBackgroundToggled: Looks.colors.accent
|
|
property color colBackgroundToggledHover: Looks.colors.accentHover
|
|
property color colBackgroundToggledActive: Looks.colors.accentActive
|
|
property color colForeground: Looks.colors.fg
|
|
property color colForegroundToggled: Looks.colors.accentFg
|
|
property color colForegroundDisabled: ColorUtils.transparentize(Looks.colors.subfg, 0.4)
|
|
property alias backgroundOpacity: backgroundRect.opacity
|
|
property color color: {
|
|
if (!root.enabled) return colBackground;
|
|
if (root.checked) {
|
|
if (root.down) {
|
|
return root.colBackgroundToggledActive;
|
|
} else if (root.hovered) {
|
|
return root.colBackgroundToggledHover;
|
|
} else {
|
|
return root.colBackgroundToggled;
|
|
}
|
|
}
|
|
if (root.down) {
|
|
return root.colBackgroundActive;
|
|
} else if (root.hovered) {
|
|
return root.colBackgroundHover;
|
|
} else {
|
|
return root.colBackground;
|
|
}
|
|
}
|
|
property color fgColor: {
|
|
if (!root.enabled) return root.colForegroundDisabled
|
|
if (root.checked) return root.colForegroundToggled
|
|
if (root.enabled) return root.colForeground
|
|
return root.colForeground
|
|
}
|
|
property alias horizontalAlignment: buttonText.horizontalAlignment
|
|
font {
|
|
family: Looks.font.family.ui
|
|
pixelSize: Looks.font.pixelSize.large
|
|
weight: Looks.font.weight.regular
|
|
}
|
|
|
|
// Hover stuff
|
|
signal hoverTimedOut
|
|
property bool shouldShowTooltip: false
|
|
ToolTip.delay: 400
|
|
property Timer hoverTimer: Timer {
|
|
id: hoverTimer
|
|
running: root.hovered
|
|
interval: root.ToolTip.delay
|
|
onTriggered: {
|
|
root.hoverTimedOut();
|
|
}
|
|
}
|
|
onHoverTimedOut: {
|
|
root.shouldShowTooltip = true;
|
|
}
|
|
onHoveredChanged: {
|
|
if (!root.hovered) {
|
|
root.shouldShowTooltip = false;
|
|
root.hoverTimer.stop();
|
|
}
|
|
}
|
|
|
|
property alias monochromeIcon: buttonIcon.monochrome
|
|
property alias buttonSpacing: contentLayout.spacing
|
|
property bool forceShowIcon: false
|
|
|
|
property var altAction: () => {}
|
|
property var middleClickAction: () => {}
|
|
|
|
property real inset: 0
|
|
topInset: inset
|
|
bottomInset: inset
|
|
leftInset: inset
|
|
rightInset: inset
|
|
property alias radius: backgroundRect.radius
|
|
property alias topLeftRadius: backgroundRect.topLeftRadius
|
|
property alias topRightRadius: backgroundRect.topRightRadius
|
|
property alias bottomLeftRadius: backgroundRect.bottomLeftRadius
|
|
property alias bottomRightRadius: backgroundRect.bottomRightRadius
|
|
property alias border: backgroundRect.border
|
|
horizontalPadding: 10
|
|
verticalPadding: 6
|
|
implicitHeight: contentItem.implicitHeight + verticalPadding * 2 + topInset + bottomInset
|
|
implicitWidth: contentItem.implicitWidth + horizontalPadding * 2 + leftInset + rightInset
|
|
|
|
background: Rectangle {
|
|
id: backgroundRect
|
|
radius: Looks.radius.medium
|
|
color: root.color
|
|
Behavior on color {
|
|
animation: Looks.transition.color.createObject(this)
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.RightButton | Qt.MiddleButton
|
|
onClicked: event => {
|
|
if (event.button === Qt.LeftButton)
|
|
root.clicked();
|
|
if (event.button === Qt.RightButton)
|
|
root.altAction();
|
|
if (event.button === Qt.MiddleButton)
|
|
root.middleClickAction();
|
|
}
|
|
}
|
|
|
|
contentItem: Item {
|
|
anchors {
|
|
fill: parent
|
|
margins: root.inset
|
|
}
|
|
implicitWidth: contentLayout.implicitWidth
|
|
implicitHeight: contentLayout.implicitHeight
|
|
RowLayout {
|
|
id: contentLayout
|
|
anchors {
|
|
fill: parent
|
|
leftMargin: root.horizontalPadding
|
|
rightMargin: root.horizontalPadding
|
|
}
|
|
spacing: 12
|
|
FluentIcon {
|
|
id: buttonIcon
|
|
monochrome: true
|
|
implicitSize: 18
|
|
Layout.leftMargin: root.iconLeftMargin
|
|
Layout.fillWidth: false
|
|
Layout.alignment: Qt.AlignVCenter
|
|
icon: root.icon.name
|
|
color: root.fgColor
|
|
visible: root.icon.name !== ""
|
|
}
|
|
WText {
|
|
id: buttonText
|
|
Layout.fillWidth: true
|
|
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
|
text: root.text
|
|
horizontalAlignment: Text.AlignLeft
|
|
font: root.font
|
|
color: root.fgColor
|
|
}
|
|
}
|
|
}
|
|
}
|