361 lines
12 KiB
QML
361 lines
12 KiB
QML
import qs.Commons
|
|
import qs.Widgets
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
|
|
ColumnLayout {
|
|
id: root
|
|
|
|
property int editAnimationCardsDuration: pluginApi?.pluginSettings?.animation_cards_duration ?? pluginApi?.manifest?.metadata?.defaultSettings?.animation_cards_duration
|
|
property int editAnimationDuration: pluginApi?.pluginSettings?.animation_duration ?? pluginApi?.manifest?.metadata?.defaultSettings?.animation_window_duration
|
|
property int editAnimationWindowDuration: pluginApi?.pluginSettings?.animation_window_duration ?? pluginApi?.manifest?.metadata?.defaultSettings?.animation_window_duration
|
|
property color editBackgroundColor: pluginApi?.pluginSettings?.background_color ?? pluginApi?.manifest?.metadata?.defaultSettings?.background_color
|
|
property real editBackgroundOpacity: pluginApi?.pluginSettings?.background_opacity ?? pluginApi?.manifest?.metadata?.defaultSettings?.background_opacity
|
|
property int editCardHeight: pluginApi?.pluginSettings?.card_height ?? pluginApi?.manifest?.metadata?.defaultSettings?.card_height
|
|
property int editCardSpacing: pluginApi?.pluginSettings?.card_spacing ?? pluginApi?.manifest?.metadata?.defaultSettings?.card_spacing
|
|
property int editCardStripWidth: pluginApi?.pluginSettings?.card_strip_width ?? pluginApi?.manifest?.metadata?.defaultSettings?.card_strip_width
|
|
property int editCardsShown: pluginApi?.pluginSettings?.cards_shown ?? pluginApi?.manifest?.metadata?.defaultSettings?.cards_shown
|
|
property real editCenterWidthRatio: pluginApi?.pluginSettings?.center_width_ratio ?? pluginApi?.manifest?.metadata?.defaultSettings?.center_width_ratio
|
|
property bool editHideHelp: pluginApi?.pluginSettings?.hide_help ?? pluginApi?.manifest?.metadata?.defaultSettings?.hide_help
|
|
property bool editHideTopBar: pluginApi?.pluginSettings?.hide_top_bar ?? pluginApi?.manifest?.metadata?.defaultSettings?.hide_top_bar ?? false
|
|
property bool editAnimateWindow: pluginApi?.pluginSettings?.animate_window ?? pluginApi?.manifest?.metadata?.defaultSettings?.animate_window ?? true
|
|
property string editIconColor: pluginApi?.pluginSettings?.icon_color ?? "none"
|
|
property bool editLivePreview: pluginApi?.pluginSettings?.live_preview ?? pluginApi?.manifest?.metadata?.defaultSettings?.live_preview
|
|
property string editSelectedFilter: pluginApi?.pluginSettings?.selected_filter || pluginApi?.manifest?.metadata?.defaultSettings?.selected_filter
|
|
property real editShearFactor: pluginApi?.pluginSettings?.shear_factor ?? pluginApi?.manifest?.metadata?.defaultSettings?.shear_factor
|
|
property int editTopBarHeight: pluginApi?.pluginSettings?.top_bar_height ?? pluginApi?.manifest?.metadata?.defaultSettings?.top_bar_height
|
|
property var pluginApi: null
|
|
|
|
function saveSettings() {
|
|
if (!pluginApi || !pluginApi.pluginSettings) {
|
|
Logger.e("Wallcards", "Cannot save: pluginApi or pluginSettings is null");
|
|
return;
|
|
}
|
|
|
|
pluginApi.pluginSettings.animation_cards_duration = root.editAnimationCardsDuration;
|
|
pluginApi.pluginSettings.animation_window_duration = root.editAnimationWindowDuration;
|
|
pluginApi.pluginSettings.background_color = root.editBackgroundColor.toString();
|
|
pluginApi.pluginSettings.background_opacity = root.editBackgroundOpacity;
|
|
|
|
pluginApi.pluginSettings.center_width_ratio = root.editCenterWidthRatio;
|
|
pluginApi.pluginSettings.card_height = root.editCardHeight;
|
|
pluginApi.pluginSettings.card_spacing = root.editCardSpacing;
|
|
pluginApi.pluginSettings.card_strip_width = root.editCardStripWidth;
|
|
pluginApi.pluginSettings.cards_shown = root.editCardsShown;
|
|
|
|
pluginApi.pluginSettings.shear_factor = root.editShearFactor;
|
|
|
|
pluginApi.pluginSettings.top_bar_height = root.editTopBarHeight;
|
|
|
|
pluginApi.pluginSettings.iconColor = root.editIconColor;
|
|
pluginApi.pluginSettings.selected_filter = root.editSelectedFilter;
|
|
pluginApi.pluginSettings.live_preview = root.editLivePreview;
|
|
pluginApi.pluginSettings.hide_help = root.editHideHelp;
|
|
pluginApi.pluginSettings.hide_top_bar = root.editHideTopBar;
|
|
pluginApi.pluginSettings.animate_window = root.editAnimateWindow;
|
|
|
|
pluginApi.saveSettings();
|
|
Logger.i("Wallcards", "Settings saved");
|
|
}
|
|
|
|
Layout.rightMargin: Style.marginL
|
|
spacing: Style.marginL
|
|
|
|
// ── Icon ──
|
|
NComboBox {
|
|
currentKey: root.editIconColor
|
|
description: I18n.tr("common.select-color-description")
|
|
label: I18n.tr("common.select-icon-color")
|
|
minimumWidth: 200
|
|
model: Color.colorKeyModel
|
|
|
|
onSelected: key => root.editIconColor = key
|
|
}
|
|
NDivider {
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
// ── Behavior ──
|
|
NToggle {
|
|
checked: root.editLivePreview
|
|
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.live_preview ?? false
|
|
description: root.pluginApi?.tr("settings.live-preview.description")
|
|
label: root.pluginApi?.tr("settings.live-preview.label")
|
|
|
|
onToggled: c => root.editLivePreview = c
|
|
}
|
|
NComboBox {
|
|
currentKey: root.editSelectedFilter
|
|
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.selected_filter || "all"
|
|
description: root.pluginApi?.tr("settings.default-filter.description")
|
|
label: root.pluginApi?.tr("settings.default-filter.label")
|
|
model: [
|
|
{
|
|
"key": "all",
|
|
"name": root.pluginApi?.tr("buttons.all")
|
|
},
|
|
{
|
|
"key": "images",
|
|
"name": root.pluginApi?.tr("buttons.images")
|
|
},
|
|
{
|
|
"key": "videos",
|
|
"name": root.pluginApi?.tr("buttons.videos")
|
|
}
|
|
]
|
|
|
|
onSelected: key => root.editSelectedFilter = key
|
|
}
|
|
NToggle {
|
|
checked: root.editHideHelp
|
|
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.hide_help ?? false
|
|
description: root.pluginApi?.tr("settings.hide-shortcuts.description")
|
|
label: root.pluginApi?.tr("settings.hide-shortcuts.label")
|
|
|
|
onToggled: c => root.editHideHelp = c
|
|
}
|
|
NToggle {
|
|
checked: root.editHideTopBar
|
|
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.hide_top_bar ?? false
|
|
description: root.pluginApi?.tr("settings.hide-top-bar.description")
|
|
label: root.pluginApi?.tr("settings.hide-top-bar.label")
|
|
|
|
onToggled: c => root.editHideTopBar = c
|
|
}
|
|
NDivider {
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
// ── Card Layout ──
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.center-card-width.description")
|
|
label: root.pluginApi?.tr("settings.center-card-width.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: 0.20
|
|
stepSize: 0.01
|
|
text: (root.editCenterWidthRatio * 100).toFixed(0) + "%"
|
|
to: 0.60
|
|
value: root.editCenterWidthRatio
|
|
|
|
onMoved: value => root.editCenterWidthRatio = value
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.card-height.description")
|
|
label: root.pluginApi?.tr("settings.card-height.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: 100
|
|
stepSize: 10
|
|
text: root.editCardHeight + "px"
|
|
to: 800
|
|
value: root.editCardHeight
|
|
|
|
onMoved: value => root.editCardHeight = value
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.strip-width.description")
|
|
label: root.pluginApi?.tr("settings.strip-width.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: 20
|
|
stepSize: 5
|
|
text: root.editCardStripWidth + "px"
|
|
to: 150
|
|
value: root.editCardStripWidth
|
|
|
|
onMoved: value => root.editCardStripWidth = value
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.card-spacing.description")
|
|
label: root.pluginApi?.tr("settings.card-spacing.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: 0
|
|
stepSize: 1
|
|
text: root.editCardSpacing + "px"
|
|
to: 50
|
|
value: root.editCardSpacing
|
|
|
|
onMoved: value => root.editCardSpacing = value
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.cards-shown.description")
|
|
label: root.pluginApi?.tr("settings.cards-shown.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: 5
|
|
stepSize: 2
|
|
text: root.editCardsShown
|
|
to: 15
|
|
value: root.editCardsShown
|
|
|
|
onMoved: value => root.editCardsShown = value
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.shear-factor.description")
|
|
label: root.pluginApi?.tr("settings.shear-factor.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: -0.3
|
|
stepSize: 0.01
|
|
text: root.editShearFactor.toFixed(2)
|
|
to: 0.3
|
|
value: root.editShearFactor
|
|
|
|
onMoved: value => root.editShearFactor = value
|
|
}
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.card-animation.description")
|
|
label: root.pluginApi?.tr("settings.card-animation.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: 0
|
|
stepSize: 100
|
|
text: root.editAnimationCardsDuration + "ms"
|
|
to: 1500
|
|
value: root.editAnimationCardsDuration
|
|
|
|
onMoved: value => root.editAnimationCardsDuration = value
|
|
}
|
|
}
|
|
NDivider {
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
// ── Appearance ──
|
|
RowLayout {
|
|
NLabel {
|
|
Layout.alignment: Qt.AlignTop
|
|
description: root.pluginApi?.tr("settings.background-color.description")
|
|
label: root.pluginApi?.tr("settings.background-color.label")
|
|
}
|
|
NColorPicker {
|
|
selectedColor: root.editBackgroundColor
|
|
|
|
onColorSelected: color => root.editBackgroundColor = color
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.background-opacity.description")
|
|
label: root.pluginApi?.tr("settings.background-opacity.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: 0
|
|
stepSize: 0.05
|
|
text: (root.editBackgroundOpacity * 100).toFixed(0) + "%"
|
|
to: 1
|
|
value: root.editBackgroundOpacity
|
|
|
|
onMoved: value => root.editBackgroundOpacity = value
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.window-animation-speed.description")
|
|
label: root.pluginApi?.tr("settings.window-animation-speed.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: 0
|
|
stepSize: 100
|
|
text: root.editAnimationWindowDuration + "ms"
|
|
to: 1500
|
|
value: root.editAnimationWindowDuration
|
|
|
|
onMoved: value => root.editAnimationWindowDuration = value
|
|
}
|
|
}
|
|
NToggle {
|
|
checked: root.editAnimateWindow
|
|
defaultValue: pluginApi?.manifest?.metadata?.defaultSettings?.animate_window ?? true
|
|
description: root.pluginApi?.tr("settings.animate-window.description")
|
|
label: root.pluginApi?.tr("settings.animate-window.label")
|
|
|
|
onToggled: c => root.editAnimateWindow = c
|
|
}
|
|
NDivider {
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
// ── Top Bar ──
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
|
|
NLabel {
|
|
description: root.pluginApi?.tr("settings.top-bar-height.description")
|
|
label: root.pluginApi?.tr("settings.top-bar-height.label")
|
|
}
|
|
NValueSlider {
|
|
Layout.fillWidth: true
|
|
from: 10
|
|
stepSize: 2
|
|
text: root.editTopBarHeight + "px"
|
|
to: 80
|
|
value: root.editTopBarHeight
|
|
|
|
onMoved: value => root.editTopBarHeight = value
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginXXS
|
|
}
|
|
}
|