mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-24 13:32:50 -05:00
* feat: add configurable app ID substitutions setting * feat: add live icon updates when substitutions change * fix: cursor not showing on headerActions in non-collapsible cards * fix: address PR review feedback - add tags for search index - remove hardcoded height from text fields
191 lines
8.5 KiB
QML
191 lines
8.5 KiB
QML
import QtQuick
|
|
import qs.Common
|
|
import qs.Widgets
|
|
import qs.Modules.Settings.Widgets
|
|
|
|
Item {
|
|
id: root
|
|
|
|
DankFlickable {
|
|
anchors.fill: parent
|
|
clip: true
|
|
contentHeight: mainColumn.height + Theme.spacingXL
|
|
contentWidth: width
|
|
|
|
Column {
|
|
id: mainColumn
|
|
topPadding: 4
|
|
width: Math.min(550, parent.width - Theme.spacingL * 2)
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
spacing: Theme.spacingXL
|
|
|
|
SettingsCard {
|
|
width: parent.width
|
|
iconName: "apps"
|
|
title: I18n.tr("Running Apps Settings")
|
|
settingKey: "runningApps"
|
|
|
|
SettingsToggleRow {
|
|
text: I18n.tr("Running Apps Only In Current Workspace")
|
|
description: I18n.tr("Show only apps running in current workspace")
|
|
checked: SettingsData.runningAppsCurrentWorkspace
|
|
onToggled: checked => SettingsData.set("runningAppsCurrentWorkspace", checked)
|
|
}
|
|
}
|
|
|
|
SettingsCard {
|
|
width: parent.width
|
|
iconName: "find_replace"
|
|
title: I18n.tr("App ID Substitutions")
|
|
settingKey: "appIdSubstitutions"
|
|
tags: ["app", "icon", "substitution", "replacement", "pattern", "window", "class", "regex"]
|
|
|
|
headerActions: [
|
|
DankActionButton {
|
|
buttonSize: 36
|
|
iconName: "restart_alt"
|
|
iconSize: 20
|
|
visible: JSON.stringify(SettingsData.appIdSubstitutions) !== JSON.stringify(SettingsData.getDefaultAppIdSubstitutions())
|
|
backgroundColor: Theme.surfaceContainer
|
|
iconColor: Theme.surfaceVariantText
|
|
onClicked: SettingsData.resetAppIdSubstitutions()
|
|
},
|
|
DankActionButton {
|
|
buttonSize: 36
|
|
iconName: "add"
|
|
iconSize: 20
|
|
backgroundColor: Theme.surfaceContainer
|
|
iconColor: Theme.primary
|
|
onClicked: SettingsData.addAppIdSubstitution("", "", "exact")
|
|
}
|
|
]
|
|
|
|
Column {
|
|
width: parent.width
|
|
spacing: Theme.spacingS
|
|
|
|
StyledText {
|
|
text: I18n.tr("Map window class names to icon names for proper icon display")
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
color: Theme.surfaceVariantText
|
|
wrapMode: Text.WordWrap
|
|
width: parent.width
|
|
bottomPadding: Theme.spacingS
|
|
}
|
|
|
|
Repeater {
|
|
model: SettingsData.appIdSubstitutions
|
|
|
|
delegate: Rectangle {
|
|
id: subItem
|
|
width: parent.width
|
|
height: subColumn.implicitHeight + Theme.spacingM
|
|
radius: Theme.cornerRadius
|
|
color: Theme.withAlpha(Theme.surfaceContainer, 0.5)
|
|
|
|
Column {
|
|
id: subColumn
|
|
anchors.fill: parent
|
|
anchors.margins: Theme.spacingS
|
|
spacing: Theme.spacingS
|
|
|
|
Row {
|
|
width: parent.width
|
|
spacing: Theme.spacingS
|
|
|
|
Column {
|
|
width: (parent.width - deleteBtn.width - Theme.spacingS) / 2
|
|
spacing: 2
|
|
|
|
StyledText {
|
|
text: I18n.tr("Pattern")
|
|
font.pixelSize: Theme.fontSizeSmall - 1
|
|
color: Theme.surfaceVariantText
|
|
}
|
|
|
|
DankTextField {
|
|
id: patternField
|
|
width: parent.width
|
|
text: modelData.pattern
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
onEditingFinished: SettingsData.updateAppIdSubstitution(index, text, replacementField.text, modelData.type)
|
|
}
|
|
}
|
|
|
|
Column {
|
|
width: (parent.width - deleteBtn.width - Theme.spacingS) / 2
|
|
spacing: 2
|
|
|
|
StyledText {
|
|
text: I18n.tr("Replacement")
|
|
font.pixelSize: Theme.fontSizeSmall - 1
|
|
color: Theme.surfaceVariantText
|
|
}
|
|
|
|
DankTextField {
|
|
id: replacementField
|
|
width: parent.width
|
|
text: modelData.replacement
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
onEditingFinished: SettingsData.updateAppIdSubstitution(index, patternField.text, text, modelData.type)
|
|
}
|
|
}
|
|
|
|
Item {
|
|
id: deleteBtn
|
|
width: 32
|
|
height: 40
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
radius: Theme.cornerRadius
|
|
color: deleteArea.containsMouse ? Theme.withAlpha(Theme.error, 0.2) : "transparent"
|
|
}
|
|
|
|
DankIcon {
|
|
anchors.centerIn: parent
|
|
name: "delete"
|
|
size: 18
|
|
color: deleteArea.containsMouse ? Theme.error : Theme.surfaceVariantText
|
|
}
|
|
|
|
MouseArea {
|
|
id: deleteArea
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
cursorShape: Qt.PointingHandCursor
|
|
onClicked: SettingsData.removeAppIdSubstitution(index)
|
|
}
|
|
}
|
|
}
|
|
|
|
Column {
|
|
width: 120
|
|
spacing: 2
|
|
|
|
StyledText {
|
|
text: I18n.tr("Type")
|
|
font.pixelSize: Theme.fontSizeSmall - 1
|
|
color: Theme.surfaceVariantText
|
|
}
|
|
|
|
DankDropdown {
|
|
width: parent.width
|
|
compactMode: true
|
|
dropdownWidth: 120
|
|
currentValue: modelData.type
|
|
options: ["exact", "contains", "regex"]
|
|
onValueChanged: value => SettingsData.updateAppIdSubstitution(index, modelData.pattern, modelData.replacement, value)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|