import QtQuick import QtQuick.Controls import QtQuick.Layouts import qs.Commons import qs.Widgets import qs.Services // Widget Settings Dialog Component Popup { id: root property int widgetIndex: -1 property var widgetData: null property string widgetId: "" property string sectionId: "" signal updateWidgetSettings(string section, int index, var settings) width: Math.max(content.implicitWidth + padding * 2, 500) height: content.implicitHeight + padding * 2 padding: Style.marginXL modal: true anchors.centerIn: parent onOpened: { PanelService.willOpenPopup(root) if (widgetData && widgetId) { loadWidgetSettings() } } onClosed: { PanelService.willClosePopup(root) } background: Rectangle { color: Color.mSurface radius: Style.radiusL border.color: Color.mPrimary border.width: Style.borderM } contentItem: ColumnLayout { id: content width: parent.width spacing: Style.marginM // Title RowLayout { Layout.fillWidth: true 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("tooltips.close") onClicked: root.close() } } // Separator Rectangle { Layout.fillWidth: true Layout.preferredHeight: 1 color: Color.mOutline } Loader { id: settingsLoader Layout.fillWidth: true } // Action buttons RowLayout { Layout.fillWidth: true Layout.topMargin: Style.marginM spacing: Style.marginM Item { Layout.fillWidth: true } NButton { text: I18n.tr("settings.control-center.shortcuts.dialog.cancel", "Cancel") outlined: true onClicked: root.close() } NButton { text: I18n.tr("settings.control-center.shortcuts.dialog.apply", "Apply") icon: "check" onClicked: { if (settingsLoader.item && settingsLoader.item.saveSettings) { var newSettings = settingsLoader.item.saveSettings() 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] }) } } }