mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
46a3c7e2d4
This reverts commit 2fcd219c34.
160 lines
4.0 KiB
QML
160 lines
4.0 KiB
QML
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
import qs.Commons
|
|
import qs.Services.UI
|
|
import qs.Widgets
|
|
|
|
// Widget Settings Dialog Component
|
|
Popup {
|
|
id: root
|
|
|
|
property int widgetIndex: -1
|
|
property var widgetData: null
|
|
property string widgetId: ""
|
|
property string sectionId: ""
|
|
property var screen: null
|
|
property var settingsCache: ({})
|
|
|
|
signal updateWidgetSettings(string section, int index, var settings)
|
|
|
|
readonly property real maxHeight: (screen ? screen.height : (parent ? parent.height : 800)) * 0.8
|
|
readonly property real defaultContentWidth: Math.round(600 * Style.uiScaleRatio)
|
|
readonly property real settingsContentWidth: {
|
|
if (settingsLoader.item && settingsLoader.item.implicitWidth > 0) {
|
|
return settingsLoader.item.implicitWidth;
|
|
}
|
|
return defaultContentWidth;
|
|
}
|
|
|
|
readonly property real dialogPadding: Style.marginXL
|
|
width: Math.max(settingsContentWidth + dialogPadding * 2, 500)
|
|
height: Math.min(content.implicitHeight + dialogPadding * 2, maxHeight)
|
|
padding: 0
|
|
modal: true
|
|
anchors.centerIn: parent
|
|
|
|
onOpened: {
|
|
if (widgetData && widgetId) {
|
|
loadWidgetSettings();
|
|
}
|
|
}
|
|
|
|
background: Rectangle {
|
|
color: Color.mSurface
|
|
radius: Style.radiusL
|
|
border.color: Color.mPrimary
|
|
border.width: Style.borderM
|
|
}
|
|
|
|
contentItem: ColumnLayout {
|
|
id: content
|
|
anchors.fill: parent
|
|
anchors.margins: dialogPadding
|
|
spacing: Style.marginM
|
|
|
|
// Title
|
|
RowLayout {
|
|
id: titleRow
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: implicitHeight
|
|
|
|
NText {
|
|
text: I18n.tr("system.widget-settings-title", {
|
|
"widget": root.widgetId
|
|
})
|
|
pointSize: Style.fontSizeL
|
|
font.weight: Style.fontWeightBold
|
|
color: Color.mPrimary
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
NIconButton {
|
|
icon: "close"
|
|
tooltipText: I18n.tr("common.close")
|
|
onClicked: saveAndClose()
|
|
}
|
|
}
|
|
|
|
// Separator
|
|
Rectangle {
|
|
id: separator
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: 1
|
|
color: Color.mOutline
|
|
}
|
|
|
|
// Scrollable settings area
|
|
NScrollView {
|
|
id: scrollView
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.minimumHeight: 100
|
|
gradientColor: Color.mSurface
|
|
reserveScrollbarSpace: false
|
|
|
|
ColumnLayout {
|
|
width: scrollView.availableWidth
|
|
spacing: Style.marginM
|
|
|
|
Loader {
|
|
id: settingsLoader
|
|
Layout.fillWidth: true
|
|
onItemChanged: {
|
|
if (item) {
|
|
// Force width recalculation when content loads
|
|
Qt.callLater(() => {
|
|
root.width = Math.max(root.settingsContentWidth + root.dialogPadding * 2, 500);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Timer {
|
|
id: saveTimer
|
|
running: false
|
|
interval: 150
|
|
onTriggered: {
|
|
root.updateWidgetSettings(root.sectionId, root.widgetIndex, root.settingsCache);
|
|
}
|
|
}
|
|
|
|
Connections {
|
|
target: settingsLoader.item
|
|
ignoreUnknownSignals: true
|
|
function onSettingsChanged(newSettings) {
|
|
if (newSettings) {
|
|
root.settingsCache = newSettings;
|
|
saveTimer.start();
|
|
}
|
|
}
|
|
}
|
|
|
|
function saveAndClose() {
|
|
if (settingsLoader.item && typeof settingsLoader.item.saveSettings === 'function') {
|
|
var newSettings = settingsLoader.item.saveSettings();
|
|
if (newSettings) {
|
|
root.updateWidgetSettings(root.sectionId, root.widgetIndex, newSettings);
|
|
}
|
|
}
|
|
root.close();
|
|
}
|
|
|
|
function loadWidgetSettings() {
|
|
const widgetSettingsMap = {
|
|
"CustomButton": "WidgetSettings/CustomButtonSettings.qml"
|
|
};
|
|
|
|
const source = widgetSettingsMap[widgetId];
|
|
if (source) {
|
|
settingsLoader.setSource(source, {
|
|
"widgetData": widgetData,
|
|
"widgetMetadata": ControlCenterWidgetRegistry.widgetMetadata[widgetId]
|
|
});
|
|
}
|
|
}
|
|
}
|