mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-02 03:28:28 -04:00
325 lines
11 KiB
QML
325 lines
11 KiB
QML
import QtQuick
|
|
import qs.Common
|
|
import qs.Services
|
|
import qs.Widgets
|
|
|
|
FocusScope {
|
|
id: root
|
|
|
|
property var editingApp: null
|
|
property string editAppId: ""
|
|
|
|
signal closeRequested
|
|
|
|
function loadOverride() {
|
|
var existing = SessionData.getAppOverride(editAppId);
|
|
editNameField.text = existing?.name || "";
|
|
editIconField.text = existing?.icon || "";
|
|
editCommentField.text = existing?.comment || "";
|
|
editEnvVarsField.text = existing?.envVars || "";
|
|
editExtraFlagsField.text = existing?.extraFlags || "";
|
|
Qt.callLater(() => editNameField.forceActiveFocus());
|
|
}
|
|
|
|
function saveAppOverride() {
|
|
var override = {};
|
|
if (editNameField.text.trim())
|
|
override.name = editNameField.text.trim();
|
|
if (editIconField.text.trim())
|
|
override.icon = editIconField.text.trim();
|
|
if (editCommentField.text.trim())
|
|
override.comment = editCommentField.text.trim();
|
|
if (editEnvVarsField.text.trim())
|
|
override.envVars = editEnvVarsField.text.trim();
|
|
if (editExtraFlagsField.text.trim())
|
|
override.extraFlags = editExtraFlagsField.text.trim();
|
|
SessionData.setAppOverride(editAppId, override);
|
|
closeRequested();
|
|
}
|
|
|
|
function resetAppOverride() {
|
|
SessionData.clearAppOverride(editAppId);
|
|
closeRequested();
|
|
}
|
|
|
|
Keys.onPressed: event => {
|
|
if (event.key === Qt.Key_Escape) {
|
|
closeRequested();
|
|
event.accepted = true;
|
|
} else if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
|
|
if (event.modifiers & Qt.ControlModifier) {
|
|
saveAppOverride();
|
|
event.accepted = true;
|
|
}
|
|
} else if (event.key === Qt.Key_S && event.modifiers & Qt.ControlModifier) {
|
|
saveAppOverride();
|
|
event.accepted = true;
|
|
}
|
|
}
|
|
|
|
Column {
|
|
anchors.fill: parent
|
|
spacing: Theme.spacingM
|
|
|
|
Row {
|
|
width: parent.width
|
|
spacing: Theme.spacingM
|
|
|
|
Rectangle {
|
|
width: 40
|
|
height: 40
|
|
radius: Theme.cornerRadius
|
|
color: backButtonArea.containsMouse ? Theme.surfaceHover : Theme.withAlpha(Theme.surfaceHover, 0)
|
|
|
|
DankIcon {
|
|
anchors.centerIn: parent
|
|
name: "arrow_back"
|
|
size: 20
|
|
color: Theme.surfaceText
|
|
}
|
|
|
|
MouseArea {
|
|
id: backButtonArea
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
cursorShape: Qt.PointingHandCursor
|
|
onClicked: root.closeRequested()
|
|
}
|
|
}
|
|
|
|
Image {
|
|
width: 40
|
|
height: 40
|
|
source: Paths.resolveIconUrl(root.editingApp?.icon || "application-x-executable")
|
|
sourceSize.width: 40
|
|
sourceSize.height: 40
|
|
fillMode: Image.PreserveAspectFit
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
}
|
|
|
|
Column {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
spacing: Theme.spacingXXS
|
|
|
|
StyledText {
|
|
text: I18n.tr("Edit App")
|
|
font.pixelSize: Theme.fontSizeLarge
|
|
color: Theme.surfaceText
|
|
font.weight: Font.Medium
|
|
}
|
|
|
|
StyledText {
|
|
text: root.editingApp?.name || ""
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
color: Theme.surfaceVariantText
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
width: parent.width
|
|
height: 1
|
|
color: Theme.outlineMedium
|
|
}
|
|
|
|
Flickable {
|
|
width: parent.width
|
|
height: parent.height - y - buttonsRow.height - Theme.spacingM
|
|
contentHeight: editFieldsColumn.height
|
|
clip: true
|
|
boundsBehavior: Flickable.StopAtBounds
|
|
|
|
Column {
|
|
id: editFieldsColumn
|
|
width: parent.width
|
|
spacing: Theme.spacingS
|
|
|
|
Column {
|
|
width: parent.width
|
|
spacing: Theme.spacingXS
|
|
|
|
StyledText {
|
|
text: I18n.tr("Name")
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
color: Theme.surfaceText
|
|
font.weight: Font.Medium
|
|
}
|
|
|
|
DankTextField {
|
|
id: editNameField
|
|
width: parent.width
|
|
placeholderText: root.editingApp?.name || ""
|
|
keyNavigationTab: editIconField
|
|
keyNavigationBacktab: editExtraFlagsField
|
|
}
|
|
}
|
|
|
|
Column {
|
|
width: parent.width
|
|
spacing: Theme.spacingXS
|
|
|
|
StyledText {
|
|
text: I18n.tr("Icon")
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
color: Theme.surfaceText
|
|
font.weight: Font.Medium
|
|
}
|
|
|
|
DankTextField {
|
|
id: editIconField
|
|
width: parent.width
|
|
placeholderText: root.editingApp?.icon || ""
|
|
keyNavigationTab: editCommentField
|
|
keyNavigationBacktab: editNameField
|
|
}
|
|
}
|
|
|
|
Column {
|
|
width: parent.width
|
|
spacing: Theme.spacingXS
|
|
|
|
StyledText {
|
|
text: I18n.tr("Description")
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
color: Theme.surfaceText
|
|
font.weight: Font.Medium
|
|
}
|
|
|
|
DankTextField {
|
|
id: editCommentField
|
|
width: parent.width
|
|
placeholderText: root.editingApp?.comment || ""
|
|
keyNavigationTab: editEnvVarsField
|
|
keyNavigationBacktab: editIconField
|
|
}
|
|
}
|
|
|
|
Column {
|
|
width: parent.width
|
|
spacing: Theme.spacingXS
|
|
|
|
StyledText {
|
|
text: I18n.tr("Environment Variables")
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
color: Theme.surfaceText
|
|
font.weight: Font.Medium
|
|
}
|
|
|
|
StyledText {
|
|
text: "KEY=value KEY2=value2"
|
|
font.pixelSize: Theme.fontSizeSmall - 1
|
|
color: Theme.surfaceVariantText
|
|
}
|
|
|
|
DankTextField {
|
|
id: editEnvVarsField
|
|
width: parent.width
|
|
placeholderText: "VAR=value"
|
|
keyNavigationTab: editExtraFlagsField
|
|
keyNavigationBacktab: editCommentField
|
|
}
|
|
}
|
|
|
|
Column {
|
|
width: parent.width
|
|
spacing: Theme.spacingXS
|
|
|
|
StyledText {
|
|
text: I18n.tr("Extra Arguments")
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
color: Theme.surfaceText
|
|
font.weight: Font.Medium
|
|
}
|
|
|
|
DankTextField {
|
|
id: editExtraFlagsField
|
|
width: parent.width
|
|
placeholderText: "--flag --option=value"
|
|
keyNavigationTab: editNameField
|
|
keyNavigationBacktab: editEnvVarsField
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Row {
|
|
id: buttonsRow
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
spacing: Theme.spacingM
|
|
|
|
Rectangle {
|
|
id: resetButton
|
|
width: 90
|
|
height: 40
|
|
radius: Theme.cornerRadius
|
|
color: resetButtonArea.containsMouse ? Theme.surfacePressed : Theme.surfaceVariantAlpha
|
|
visible: SessionData.getAppOverride(root.editAppId) !== null
|
|
|
|
StyledText {
|
|
text: I18n.tr("Reset")
|
|
font.pixelSize: Theme.fontSizeMedium
|
|
color: Theme.error
|
|
font.weight: Font.Medium
|
|
anchors.centerIn: parent
|
|
}
|
|
|
|
MouseArea {
|
|
id: resetButtonArea
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
cursorShape: Qt.PointingHandCursor
|
|
onClicked: root.resetAppOverride()
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: cancelButton
|
|
width: 90
|
|
height: 40
|
|
radius: Theme.cornerRadius
|
|
color: cancelButtonArea.containsMouse ? Theme.surfacePressed : Theme.surfaceVariantAlpha
|
|
|
|
StyledText {
|
|
text: I18n.tr("Cancel")
|
|
font.pixelSize: Theme.fontSizeMedium
|
|
color: Theme.surfaceText
|
|
font.weight: Font.Medium
|
|
anchors.centerIn: parent
|
|
}
|
|
|
|
MouseArea {
|
|
id: cancelButtonArea
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
cursorShape: Qt.PointingHandCursor
|
|
onClicked: root.closeRequested()
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: saveButton
|
|
width: 90
|
|
height: 40
|
|
radius: Theme.cornerRadius
|
|
color: saveButtonArea.containsMouse ? Theme.withAlpha(Theme.primary, 0.9) : Theme.primary
|
|
|
|
StyledText {
|
|
text: I18n.tr("Save")
|
|
font.pixelSize: Theme.fontSizeMedium
|
|
color: Theme.primaryText
|
|
font.weight: Font.Medium
|
|
anchors.centerIn: parent
|
|
}
|
|
|
|
MouseArea {
|
|
id: saveButtonArea
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
cursorShape: Qt.PointingHandCursor
|
|
onClicked: root.saveAppOverride()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|