1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-06 05:25:41 -05:00
Files
DankMaterialShell/Widgets/DankColorPicker.qml
2025-09-03 16:29:47 -04:00

118 lines
3.3 KiB
QML

import QtQuick
import qs.Common
import qs.Widgets
Rectangle {
id: root
property string pickerTitle: "Choose Color"
property color selectedColor: Theme.primary
property bool isOpen: false
signal colorSelected(color selectedColor)
function open() {
customColorField.text = ""
isOpen = true
Qt.callLater(() => root.forceActiveFocus())
}
function close() {
isOpen = false
}
anchors.centerIn: parent
width: 320
height: 340
radius: Theme.cornerRadius
color: Theme.surfaceContainer
border.color: Theme.outlineMedium
border.width: 1
z: 1000
visible: isOpen
focus: isOpen
Keys.onPressed: function (event) {
if (event.key === Qt.Key_Escape) {
close()
event.accepted = true
}
}
DankActionButton {
anchors.top: parent.top
anchors.right: parent.right
anchors.margins: Theme.spacingS
buttonSize: 28
iconName: "close"
iconSize: 16
iconColor: Theme.surfaceText
onClicked: root.close()
}
Column {
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
StyledText {
text: pickerTitle
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
}
Grid {
columns: 8
spacing: 4
anchors.horizontalCenter: parent.horizontalCenter
property var colors: ["#f44336", "#e91e63", "#9c27b0", "#673ab7", "#3f51b5", "#2196f3", "#03a9f4", "#00bcd4", "#009688", "#4caf50", "#8bc34a", "#cddc39", "#ffeb3b", "#ffc107", "#ff9800", "#ff5722", "#795548", "#9e9e9e", "#607d8b", "#000000", "#ffffff", "#ff1744", "#f50057", "#d500f9", "#651fff", "#3d5afe", "#2979ff", "#00b0ff", "#00e5ff", "#1de9b6", "#00e676", "#76ff03", "#c6ff00", "#ffff00", "#ffc400", "#ff9100", "#ff3d00", "#bf360c", "#424242", "#37474f"]
Repeater {
model: parent.colors
Rectangle {
width: 24
height: 24
color: modelData
radius: 4
border.color: Theme.outline
border.width: root.selectedColor == modelData ? 2 : 1
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
root.selectedColor = modelData
root.colorSelected(modelData)
root.close()
}
}
}
}
}
StyledText {
text: "Custom Color:"
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceText
}
DankTextField {
id: customColorField
width: parent.width
height: 40
placeholderText: "#ff0000"
text: ""
onAccepted: {
var hexColor = text.startsWith("#") ? text : "#" + text
if (/^#[0-9A-Fa-f]{6}$/.test(hexColor)) {
root.selectedColor = hexColor
root.colorSelected(hexColor)
root.close()
}
}
}
}
}