diff options
| author | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
|---|---|---|
| committer | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
| commit | 70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch) | |
| tree | ab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/WidgetsTab.qml | |
| parent | 5d94c0a7d44a2255b81815a52a7056a94a39842d (diff) | |
| download | RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip | |
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/WidgetsTab.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/WidgetsTab.qml | 1145 |
1 files changed, 1145 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/WidgetsTab.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/WidgetsTab.qml new file mode 100644 index 0000000..86bc391 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/Settings/WidgetsTab.qml @@ -0,0 +1,1145 @@ +import QtQuick +import QtQuick.Layouts +import Quickshell +import qs.Common +import qs.Services +import qs.Widgets + +Item { + id: widgetsTab + + property var parentModal: null + property string selectedBarId: "default" + + property var selectedBarConfig: { + selectedBarId; + SettingsData.barConfigs; + const index = SettingsData.barConfigs.findIndex(cfg => cfg.id === selectedBarId); + return index !== -1 ? SettingsData.barConfigs[index] : SettingsData.barConfigs[0]; + } + + property bool selectedBarIsVertical: { + selectedBarId; + const pos = selectedBarConfig?.position ?? SettingsData.Position.Top; + return pos === SettingsData.Position.Left || pos === SettingsData.Position.Right; + } + + property bool hasMultipleBars: SettingsData.barConfigs.length > 1 + + DankTooltipV2 { + id: sharedTooltip + } + + property var baseWidgetDefinitions: { + var coreWidgets = [ + { + "id": "layout", + "text": I18n.tr("Layout"), + "description": I18n.tr("Display and switch DWL layouts"), + "icon": "view_quilt", + "enabled": CompositorService.isDwl && DwlService.dwlAvailable, + "warning": !CompositorService.isDwl ? I18n.tr("Requires DWL compositor") : (!DwlService.dwlAvailable ? I18n.tr("DWL service not available") : undefined) + }, + { + "id": "launcherButton", + "text": I18n.tr("App Launcher"), + "description": I18n.tr("Quick access to application launcher"), + "icon": "apps", + "enabled": true + }, + { + "id": "workspaceSwitcher", + "text": I18n.tr("Workspace Switcher"), + "description": I18n.tr("Shows current workspace and allows switching"), + "icon": "view_module", + "enabled": true + }, + { + "id": "focusedWindow", + "text": I18n.tr("Focused Window"), + "description": I18n.tr("Display currently focused application title"), + "icon": "window", + "enabled": true + }, + { + "id": "runningApps", + "text": I18n.tr("Running Apps"), + "description": I18n.tr("Shows all running applications with focus indication"), + "icon": "apps", + "enabled": true + }, + { + "id": "appsDock", + "text": I18n.tr("Apps Dock"), + "description": I18n.tr("Pinned and running apps with drag-and-drop"), + "icon": "dock_to_bottom", + "enabled": true + }, + { + "id": "clock", + "text": I18n.tr("Clock"), + "description": I18n.tr("Current time and date display"), + "icon": "schedule", + "enabled": true + }, + { + "id": "weather", + "text": I18n.tr("Weather Widget"), + "description": I18n.tr("Current weather conditions and temperature"), + "icon": "wb_sunny", + "enabled": true + }, + { + "id": "music", + "text": I18n.tr("Media Controls"), + "description": I18n.tr("Control currently playing media"), + "icon": "music_note", + "enabled": true + }, + { + "id": "clipboard", + "text": I18n.tr("Clipboard Manager"), + "description": I18n.tr("Access clipboard history"), + "icon": "content_paste", + "enabled": true + }, + { + "id": "cpuUsage", + "text": I18n.tr("CPU Usage"), + "description": I18n.tr("CPU usage indicator"), + "icon": "memory", + "enabled": DgopService.dgopAvailable, + "warning": !DgopService.dgopAvailable ? I18n.tr("Requires 'dgop' tool") : undefined + }, + { + "id": "memUsage", + "text": I18n.tr("Memory Usage"), + "description": I18n.tr("Memory usage indicator"), + "icon": "developer_board", + "enabled": DgopService.dgopAvailable, + "warning": !DgopService.dgopAvailable ? I18n.tr("Requires 'dgop' tool") : undefined + }, + { + "id": "diskUsage", + "text": I18n.tr("Disk Usage"), + "description": I18n.tr("Percentage"), + "icon": "storage", + "enabled": DgopService.dgopAvailable, + "warning": !DgopService.dgopAvailable ? I18n.tr("Requires 'dgop' tool") : undefined + }, + { + "id": "cpuTemp", + "text": I18n.tr("CPU Temperature"), + "description": I18n.tr("CPU temperature display"), + "icon": "device_thermostat", + "enabled": DgopService.dgopAvailable, + "warning": !DgopService.dgopAvailable ? I18n.tr("Requires 'dgop' tool") : undefined + }, + { + "id": "gpuTemp", + "text": I18n.tr("GPU Temperature"), + "description": I18n.tr("GPU temperature display"), + "icon": "auto_awesome_mosaic", + "warning": !DgopService.dgopAvailable ? I18n.tr("Requires 'dgop' tool") : I18n.tr("This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics."), + "enabled": DgopService.dgopAvailable + }, + { + "id": "systemTray", + "text": I18n.tr("System Tray"), + "description": I18n.tr("System notification area icons"), + "icon": "notifications", + "enabled": true + }, + { + "id": "privacyIndicator", + "text": I18n.tr("Privacy Indicator"), + "description": I18n.tr("Shows when microphone, camera, or screen sharing is active"), + "icon": "privacy_tip", + "enabled": true + }, + { + "id": "controlCenterButton", + "text": I18n.tr("Control Center"), + "description": I18n.tr("Access to system controls and settings"), + "icon": "settings", + "enabled": true + }, + { + "id": "notificationButton", + "text": I18n.tr("Notification Center"), + "description": I18n.tr("Access to notifications and do not disturb"), + "icon": "notifications", + "enabled": true + }, + { + "id": "battery", + "text": I18n.tr("Battery"), + "description": I18n.tr("Battery level and power management"), + "icon": "battery_std", + "enabled": true + }, + { + "id": "vpn", + "text": I18n.tr("VPN"), + "description": I18n.tr("VPN status and quick connect"), + "icon": "vpn_lock", + "enabled": true + }, + { + "id": "idleInhibitor", + "text": I18n.tr("Idle Inhibitor"), + "description": I18n.tr("Prevent screen timeout"), + "icon": "motion_sensor_active", + "enabled": true + }, + { + "id": "capsLockIndicator", + "text": I18n.tr("Caps Lock Indicator"), + "description": I18n.tr("Shows when caps lock is active"), + "icon": "shift_lock", + "enabled": true + }, + { + "id": "spacer", + "text": I18n.tr("Spacer"), + "description": I18n.tr("Customizable empty space"), + "icon": "more_horiz", + "enabled": true + }, + { + "id": "separator", + "text": I18n.tr("Separator"), + "description": I18n.tr("Visual divider between widgets"), + "icon": "remove", + "enabled": true + }, + { + "id": "network_speed_monitor", + "text": I18n.tr("Network Speed Monitor"), + "description": I18n.tr("Network download and upload speed display"), + "icon": "network_check", + "warning": !DgopService.dgopAvailable ? I18n.tr("Requires 'dgop' tool") : undefined, + "enabled": DgopService.dgopAvailable + }, + { + "id": "keyboard_layout_name", + "text": I18n.tr("Keyboard Layout Name"), + "description": I18n.tr("Displays the active keyboard layout and allows switching"), + "icon": "keyboard" + }, + { + "id": "notepadButton", + "text": I18n.tr("Notepad"), + "description": I18n.tr("Quick access to notepad"), + "icon": "assignment", + "enabled": true + }, + { + "id": "colorPicker", + "text": I18n.tr("Color Picker"), + "description": I18n.tr("Quick access to color picker"), + "icon": "palette", + "enabled": true + }, + { + "id": "systemUpdate", + "text": I18n.tr("System Update"), + "description": I18n.tr("Check for system updates"), + "icon": "update", + "enabled": SystemUpdateService.distributionSupported + }, + { + "id": "powerMenuButton", + "text": I18n.tr("Power"), + "description": I18n.tr("Display the power system menu"), + "icon": "power_settings_new", + "enabled": true + }, + ]; + + var allPluginVariants = PluginService.getAllPluginVariants(); + for (var i = 0; i < allPluginVariants.length; i++) { + var variant = allPluginVariants[i]; + coreWidgets.push({ + "id": variant.fullId, + "text": variant.name, + "description": variant.description, + "icon": variant.icon, + "enabled": variant.loaded, + "warning": !variant.loaded ? I18n.tr("Plugin is disabled - enable in Plugins settings to use") : undefined + }); + } + + return coreWidgets; + } + + property var defaultLeftWidgets: [ + { + "id": "launcherButton", + "enabled": true + }, + { + "id": "workspaceSwitcher", + "enabled": true + }, + { + "id": "focusedWindow", + "enabled": true + } + ] + property var defaultCenterWidgets: [ + { + "id": "music", + "enabled": true + }, + { + "id": "clock", + "enabled": true + }, + { + "id": "weather", + "enabled": true + } + ] + property var defaultRightWidgets: [ + { + "id": "systemTray", + "enabled": true + }, + { + "id": "clipboard", + "enabled": true + }, + { + "id": "notificationButton", + "enabled": true + }, + { + "id": "battery", + "enabled": true + }, + { + "id": "controlCenterButton", + "enabled": true + } + ] + + function getWidgetsForSection(sectionId) { + switch (sectionId) { + case "left": + return selectedBarConfig?.leftWidgets || []; + case "center": + return selectedBarConfig?.centerWidgets || []; + case "right": + return selectedBarConfig?.rightWidgets || []; + default: + return []; + } + } + + function setWidgetsForSection(sectionId, widgets) { + switch (sectionId) { + case "left": + SettingsData.updateBarConfig(selectedBarId, { + leftWidgets: widgets + }); + break; + case "center": + SettingsData.updateBarConfig(selectedBarId, { + centerWidgets: widgets + }); + break; + case "right": + SettingsData.updateBarConfig(selectedBarId, { + rightWidgets: widgets + }); + break; + } + } + + function getWidgetsForPopup() { + return baseWidgetDefinitions.filter(widget => { + if (widget.warning && widget.warning.includes("Plugin is disabled")) + return false; + if (widget.enabled === false) + return false; + return true; + }); + } + + function addWidgetToSection(widgetId, targetSection) { + var widgetObj = { + "id": widgetId, + "enabled": true + }; + if (widgetId === "spacer") + widgetObj.size = 20; + if (widgetId === "gpuTemp") { + widgetObj.selectedGpuIndex = 0; + widgetObj.pciId = ""; + } + if (widgetId === "controlCenterButton") { + widgetObj.showNetworkIcon = SettingsData.controlCenterShowNetworkIcon; + widgetObj.showBluetoothIcon = SettingsData.controlCenterShowBluetoothIcon; + widgetObj.showAudioIcon = SettingsData.controlCenterShowAudioIcon; + widgetObj.showAudioPercent = SettingsData.controlCenterShowAudioPercent; + widgetObj.showVpnIcon = SettingsData.controlCenterShowVpnIcon; + widgetObj.showBrightnessIcon = SettingsData.controlCenterShowBrightnessIcon; + widgetObj.showBrightnessPercent = SettingsData.controlCenterShowBrightnessPercent; + widgetObj.showMicIcon = SettingsData.controlCenterShowMicIcon; + widgetObj.showMicPercent = SettingsData.controlCenterShowMicPercent; + widgetObj.showBatteryIcon = SettingsData.controlCenterShowBatteryIcon; + widgetObj.showPrinterIcon = SettingsData.controlCenterShowPrinterIcon; + widgetObj.showScreenSharingIcon = SettingsData.controlCenterShowScreenSharingIcon; + widgetObj.controlCenterGroupOrder = ["network", "vpn", "bluetooth", "audio", "microphone", "brightness", "battery", "printer", "screenSharing"]; + } + if (widgetId === "runningApps") { + widgetObj.runningAppsCompactMode = SettingsData.runningAppsCompactMode; + widgetObj.runningAppsGroupByApp = SettingsData.runningAppsGroupByApp; + widgetObj.runningAppsCurrentWorkspace = SettingsData.runningAppsCurrentWorkspace; + widgetObj.runningAppsCurrentMonitor = false; + } + if (widgetId === "diskUsage") { + widgetObj.mountPath = "/"; + widgetObj.diskUsageMode = 0; + } + if (widgetId === "cpuUsage" || widgetId === "memUsage" || widgetId === "cpuTemp" || widgetId === "gpuTemp") + widgetObj.minimumWidth = true; + if (widgetId === "memUsage") + widgetObj.showInGb = false; + + var widgets = getWidgetsForSection(targetSection).slice(); + widgets.push(widgetObj); + setWidgetsForSection(targetSection, widgets); + } + + function removeWidgetFromSection(sectionId, widgetIndex) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex >= 0 && widgetIndex < widgets.length) + widgets.splice(widgetIndex, 1); + setWidgetsForSection(sectionId, widgets); + } + + function cloneWidgetData(widget) { + if (typeof widget === "string") + return { + "id": widget, + "enabled": true + }; + var result = { + "id": widget.id, + "enabled": widget.enabled + }; + var keys = ["size", "selectedGpuIndex", "pciId", "mountPath", "diskUsageMode", "minimumWidth", "showSwap", "showInGb", "mediaSize", "clockCompactMode", "focusedWindowCompactMode", "runningAppsCompactMode", "keyboardLayoutNameCompactMode", "runningAppsGroupByApp", "runningAppsCurrentWorkspace", "runningAppsCurrentMonitor", "showNetworkIcon", "showBluetoothIcon", "showAudioIcon", "showAudioPercent", "showVpnIcon", "showBrightnessIcon", "showBrightnessPercent", "showMicIcon", "showMicPercent", "showBatteryIcon", "showPrinterIcon", "showScreenSharingIcon", "controlCenterGroupOrder", "barMaxVisibleApps", "barMaxVisibleRunningApps", "barShowOverflowBadge", "trayUseInlineExpansion"]; + for (var i = 0; i < keys.length; i++) { + if (widget[keys[i]] !== undefined) + result[keys[i]] = widget[keys[i]]; + } + return result; + } + + function handleItemEnabledChanged(sectionId, itemId, enabled) { + var widgets = getWidgetsForSection(sectionId).slice(); + for (var i = 0; i < widgets.length; i++) { + var widget = widgets[i]; + var widgetId = typeof widget === "string" ? widget : widget.id; + if (widgetId !== itemId) + continue; + var newWidget = cloneWidgetData(widget); + newWidget.enabled = enabled; + widgets[i] = newWidget; + break; + } + setWidgetsForSection(sectionId, widgets); + } + + function handleItemOrderChanged(sectionId, newOrder) { + setWidgetsForSection(sectionId, newOrder); + } + + function handleSpacerSizeChanged(sectionId, widgetIndex, newSize) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) + return; + var widget = widgets[widgetIndex]; + var widgetId = typeof widget === "string" ? widget : widget.id; + if (widgetId !== "spacer") + return; + var newWidget = cloneWidgetData(widget); + newWidget.size = newSize; + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handleGpuSelectionChanged(sectionId, widgetIndex, selectedGpuIndex) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) + return; + var pciId = DgopService.availableGpus && DgopService.availableGpus.length > selectedGpuIndex ? DgopService.availableGpus[selectedGpuIndex].pciId : ""; + var newWidget = cloneWidgetData(widgets[widgetIndex]); + newWidget.selectedGpuIndex = selectedGpuIndex; + newWidget.pciId = pciId; + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handleDiskMountSelectionChanged(sectionId, widgetIndex, mountPath) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) + return; + var newWidget = cloneWidgetData(widgets[widgetIndex]); + newWidget.mountPath = mountPath; + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handleControlCenterSettingChanged(sectionId, widgetIndex, settingName, value) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) + return; + var newWidget = cloneWidgetData(widgets[widgetIndex]); + newWidget[settingName] = value; + + if (!value) { + switch (settingName) { + case "showAudioIcon": + newWidget.showAudioPercent = false; + break; + case "showMicIcon": + newWidget.showMicPercent = false; + break; + case "showBrightnessIcon": + newWidget.showBrightnessPercent = false; + break; + } + } + + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handleControlCenterGroupOrderChanged(sectionId, widgetIndex, groupOrder) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) + return; + var previousWidget = widgets[widgetIndex]; + var newWidget = cloneWidgetData(previousWidget); + newWidget.controlCenterGroupOrder = groupOrder.slice(); + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handlePrivacySettingChanged(sectionId, widgetIndex, settingName, value) { + switch (settingName) { + case "showMicIcon": + SettingsData.set("privacyShowMicIcon", value); + break; + case "showCameraIcon": + SettingsData.set("privacyShowCameraIcon", value); + break; + case "showScreenSharingIcon": + SettingsData.set("privacyShowScreenShareIcon", value); + break; + } + } + + function handleMinimumWidthChanged(sectionId, widgetIndex, enabled) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) { + setWidgetsForSection(sectionId, widgets); + return; + } + var newWidget = cloneWidgetData(widgets[widgetIndex]); + newWidget.minimumWidth = enabled; + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handleShowSwapChanged(sectionId, widgetIndex, enabled) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) { + setWidgetsForSection(sectionId, widgets); + return; + } + var newWidget = cloneWidgetData(widgets[widgetIndex]); + newWidget.showSwap = enabled; + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handleShowInGbChanged(sectionId, widgetIndex, enabled) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) { + setWidgetsForSection(sectionId, widgets); + return; + } + var newWidget = cloneWidgetData(widgets[widgetIndex]); + newWidget.showInGb = enabled; + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handleDiskUsageModeChanged(sectionId, widgetIndex, mode) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) { + setWidgetsForSection(sectionId, widgets); + return; + } + var newWidget = cloneWidgetData(widgets[widgetIndex]); + newWidget.diskUsageMode = mode; + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handleOverflowSettingChanged(sectionId, widgetIndex, settingName, value) { + var widgets = getWidgetsForSection(sectionId).slice(); + if (widgetIndex < 0 || widgetIndex >= widgets.length) { + setWidgetsForSection(sectionId, widgets); + return; + } + var newWidget = cloneWidgetData(widgets[widgetIndex]); + newWidget[settingName] = value; + widgets[widgetIndex] = newWidget; + setWidgetsForSection(sectionId, widgets); + } + + function handleCompactModeChanged(sectionId, widgetId, value) { + var widgets = getWidgetsForSection(sectionId).slice(); + for (var i = 0; i < widgets.length; i++) { + var widget = widgets[i]; + var currentId = typeof widget === "string" ? widget : widget.id; + if (currentId !== widgetId) + continue; + + var newWidget = cloneWidgetData(widget); + switch (widgetId) { + case "music": + newWidget.mediaSize = value; + break; + case "clock": + newWidget.clockCompactMode = value; + break; + case "focusedWindow": + newWidget.focusedWindowCompactMode = value; + break; + case "runningApps": + newWidget.runningAppsCompactMode = value; + break; + case "keyboard_layout_name": + newWidget.keyboardLayoutNameCompactMode = value; + break; + } + widgets[i] = newWidget; + break; + } + setWidgetsForSection(sectionId, widgets); + } + + function getItemsForSection(sectionId) { + var widgets = []; + var widgetData = getWidgetsForSection(sectionId); + widgetData.forEach(widget => { + var isString = typeof widget === "string"; + var widgetId = isString ? widget : widget.id; + var widgetDef = baseWidgetDefinitions.find(w => w.id === widgetId); + if (!widgetDef) + return; + + var item = Object.assign({}, widgetDef); + item.enabled = isString ? true : widget.enabled; + if (!isString) { + if (widget.size !== undefined) + item.size = widget.size; + if (widget.selectedGpuIndex !== undefined) + item.selectedGpuIndex = widget.selectedGpuIndex; + if (widget.pciId !== undefined) + item.pciId = widget.pciId; + if (widget.mountPath !== undefined) + item.mountPath = widget.mountPath; + if (widget.diskUsageMode !== undefined) + item.diskUsageMode = widget.diskUsageMode; + if (widget.showNetworkIcon !== undefined) + item.showNetworkIcon = widget.showNetworkIcon; + if (widget.showBluetoothIcon !== undefined) + item.showBluetoothIcon = widget.showBluetoothIcon; + if (widget.showAudioIcon !== undefined) + item.showAudioIcon = widget.showAudioIcon; + if (widget.showAudioPercent !== undefined) + item.showAudioPercent = widget.showAudioPercent; + if (widget.showVpnIcon !== undefined) + item.showVpnIcon = widget.showVpnIcon; + if (widget.showBrightnessIcon !== undefined) + item.showBrightnessIcon = widget.showBrightnessIcon; + if (widget.showBrightnessPercent !== undefined) + item.showBrightnessPercent = widget.showBrightnessPercent; + if (widget.showMicIcon !== undefined) + item.showMicIcon = widget.showMicIcon; + if (widget.showMicPercent !== undefined) + item.showMicPercent = widget.showMicPercent; + if (widget.showBatteryIcon !== undefined) + item.showBatteryIcon = widget.showBatteryIcon; + if (widget.showPrinterIcon !== undefined) + item.showPrinterIcon = widget.showPrinterIcon; + if (widget.showScreenSharingIcon !== undefined) + item.showScreenSharingIcon = widget.showScreenSharingIcon; + if (widget.controlCenterGroupOrder !== undefined) + item.controlCenterGroupOrder = widget.controlCenterGroupOrder; + if (widget.minimumWidth !== undefined) + item.minimumWidth = widget.minimumWidth; + if (widget.showSwap !== undefined) + item.showSwap = widget.showSwap; + if (widget.showInGb !== undefined) + item.showInGb = widget.showInGb; + if (widget.mediaSize !== undefined) + item.mediaSize = widget.mediaSize; + if (widget.clockCompactMode !== undefined) + item.clockCompactMode = widget.clockCompactMode; + if (widget.focusedWindowCompactMode !== undefined) + item.focusedWindowCompactMode = widget.focusedWindowCompactMode; + if (widget.runningAppsCompactMode !== undefined) + item.runningAppsCompactMode = widget.runningAppsCompactMode; + if (widget.runningAppsGroupByApp !== undefined) + item.runningAppsGroupByApp = widget.runningAppsGroupByApp; + if (widget.runningAppsCurrentWorkspace !== undefined) + item.runningAppsCurrentWorkspace = widget.runningAppsCurrentWorkspace; + if (widget.runningAppsCurrentMonitor !== undefined) + item.runningAppsCurrentMonitor = widget.runningAppsCurrentMonitor; + if (widget.keyboardLayoutNameCompactMode !== undefined) + item.keyboardLayoutNameCompactMode = widget.keyboardLayoutNameCompactMode; + if (widget.barMaxVisibleApps !== undefined) + item.barMaxVisibleApps = widget.barMaxVisibleApps; + if (widget.barMaxVisibleRunningApps !== undefined) + item.barMaxVisibleRunningApps = widget.barMaxVisibleRunningApps; + if (widget.barShowOverflowBadge !== undefined) + item.barShowOverflowBadge = widget.barShowOverflowBadge; + if (widget.trayUseInlineExpansion !== undefined) + item.trayUseInlineExpansion = widget.trayUseInlineExpansion; + } + widgets.push(item); + }); + return widgets; + } + + Component.onCompleted: { + const leftWidgets = selectedBarConfig?.leftWidgets; + const centerWidgets = selectedBarConfig?.centerWidgets; + const rightWidgets = selectedBarConfig?.rightWidgets; + + if (!leftWidgets) + setWidgetsForSection("left", defaultLeftWidgets); + if (!centerWidgets) + setWidgetsForSection("center", defaultCenterWidgets); + if (!rightWidgets) + setWidgetsForSection("right", defaultRightWidgets); + + const sections = ["left", "center", "right"]; + sections.forEach(sectionId => { + var widgets = getWidgetsForSection(sectionId).slice(); + var updated = false; + for (var i = 0; i < widgets.length; i++) { + var widget = widgets[i]; + if (typeof widget === "object" && widget.id === "spacer" && !widget.size) { + widgets[i] = Object.assign({}, widget, { + "size": 20 + }); + updated = true; + } + } + if (updated) + setWidgetsForSection(sectionId, widgets); + }); + } + + LazyLoader { + id: widgetSelectionPopupLoader + active: false + + WidgetSelectionPopup { + id: widgetSelectionPopupItem + parentModal: widgetsTab.parentModal + onWidgetSelected: (widgetId, targetSection) => { + widgetsTab.addWidgetToSection(widgetId, targetSection); + } + } + } + + function showWidgetSelectionPopup(sectionId) { + widgetSelectionPopupLoader.active = true; + if (!widgetSelectionPopupLoader.item) + return; + widgetSelectionPopupLoader.item.targetSection = sectionId; + widgetSelectionPopupLoader.item.allWidgets = widgetsTab.getWidgetsForPopup(); + widgetSelectionPopupLoader.item.show(); + } + + 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 + + StyledRect { + width: parent.width + height: barSelectorContent.implicitHeight + Theme.spacingL * 2 + radius: Theme.cornerRadius + color: Theme.surfaceContainerHigh + border.width: 0 + visible: hasMultipleBars + + Column { + id: barSelectorContent + anchors.fill: parent + anchors.margins: Theme.spacingL + spacing: Theme.spacingM + + Row { + width: parent.width + spacing: Theme.spacingM + + DankIcon { + name: "toolbar" + size: Theme.iconSize + color: Theme.primary + anchors.verticalCenter: parent.verticalCenter + } + + StyledText { + text: I18n.tr("Select Bar") + font.pixelSize: Theme.fontSizeLarge + font.weight: Font.Medium + color: Theme.surfaceText + anchors.verticalCenter: parent.verticalCenter + } + } + + DankButtonGroup { + id: barSelectorGroup + width: parent.width + model: SettingsData.barConfigs.map(cfg => cfg.name || ("Bar " + (SettingsData.barConfigs.indexOf(cfg) + 1))) + currentIndex: { + const idx = SettingsData.barConfigs.findIndex(cfg => cfg.id === selectedBarId); + return idx >= 0 ? idx : 0; + } + checkEnabled: false + onSelectionChanged: (index, selected) => { + if (!selected) + return; + if (index >= 0 && index < SettingsData.barConfigs.length) + selectedBarId = SettingsData.barConfigs[index].id; + } + } + } + } + + StyledRect { + width: parent.width + height: widgetManagementHeader.implicitHeight + Theme.spacingL * 2 + radius: Theme.cornerRadius + color: Theme.surfaceContainerHigh + border.width: 0 + + Column { + id: widgetManagementHeader + anchors.fill: parent + anchors.margins: Theme.spacingL + spacing: Theme.spacingM + + RowLayout { + width: parent.width + spacing: Theme.spacingM + + DankIcon { + name: "widgets" + size: Theme.iconSize + color: Theme.primary + Layout.alignment: Qt.AlignVCenter + } + + StyledText { + text: I18n.tr("Widget Management") + font.pixelSize: Theme.fontSizeLarge + font.weight: Font.Medium + color: Theme.surfaceText + Layout.alignment: Qt.AlignVCenter + } + + Item { + height: 1 + Layout.fillWidth: true + } + + Rectangle { + width: resetContentRow.implicitWidth + Theme.spacingM * 2 + height: 28 + radius: Theme.cornerRadius + color: resetArea.containsMouse ? Theme.surfacePressed : Theme.surfaceVariant + Layout.alignment: Qt.AlignVCenter + border.width: 0 + + Row { + id: resetContentRow + anchors.centerIn: parent + spacing: Theme.spacingXS + + DankIcon { + name: "refresh" + size: 14 + color: Theme.surfaceText + anchors.verticalCenter: parent.verticalCenter + } + + StyledText { + text: I18n.tr("Reset") + font.pixelSize: Theme.fontSizeSmall + font.weight: Font.Medium + color: Theme.surfaceText + anchors.verticalCenter: parent.verticalCenter + } + } + + MouseArea { + id: resetArea + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onClicked: { + setWidgetsForSection("left", defaultLeftWidgets); + setWidgetsForSection("center", defaultCenterWidgets); + setWidgetsForSection("right", defaultRightWidgets); + } + } + + Behavior on color { + ColorAnimation { + duration: Theme.shortDuration + easing.type: Theme.standardEasing + } + } + } + } + + StyledText { + width: parent.width + text: I18n.tr("Drag widgets to reorder within sections. Use the eye icon to hide/show widgets (maintains spacing), or X to remove them completely.") + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + wrapMode: Text.WordWrap + } + } + } + + Column { + width: parent.width + spacing: Theme.spacingL + + StyledRect { + width: parent.width + height: leftSection.implicitHeight + Theme.spacingL * 2 + radius: Theme.cornerRadius + color: Theme.surfaceContainerHigh + border.width: 0 + + WidgetsTabSection { + id: leftSection + anchors.fill: parent + anchors.margins: Theme.spacingL + title: selectedBarIsVertical ? I18n.tr("Top Section") : I18n.tr("Left Section") + titleIcon: "format_align_left" + sectionId: "left" + allWidgets: widgetsTab.baseWidgetDefinitions + items: widgetsTab.getItemsForSection("left") + onItemEnabledChanged: (sectionId, itemId, enabled) => { + widgetsTab.handleItemEnabledChanged(sectionId, itemId, enabled); + } + onItemOrderChanged: newOrder => { + widgetsTab.handleItemOrderChanged(sectionId, newOrder); + } + onAddWidget: sectionId => { + showWidgetSelectionPopup(sectionId); + } + onRemoveWidget: (sectionId, index) => { + widgetsTab.removeWidgetFromSection(sectionId, index); + } + onSpacerSizeChanged: (sectionId, index, size) => { + widgetsTab.handleSpacerSizeChanged(sectionId, index, size); + } + onGpuSelectionChanged: (sectionId, index, gpuIndex) => { + widgetsTab.handleGpuSelectionChanged(sectionId, index, gpuIndex); + } + onDiskMountSelectionChanged: (sectionId, index, mountPath) => { + widgetsTab.handleDiskMountSelectionChanged(sectionId, index, mountPath); + } + onControlCenterSettingChanged: (sectionId, index, setting, value) => { + widgetsTab.handleControlCenterSettingChanged(sectionId, index, setting, value); + } + onControlCenterGroupOrderChanged: (sectionId, index, groupOrder) => { + widgetsTab.handleControlCenterGroupOrderChanged(sectionId, index, groupOrder); + } + onPrivacySettingChanged: (sectionId, index, setting, value) => { + widgetsTab.handlePrivacySettingChanged(sectionId, index, setting, value); + } + onMinimumWidthChanged: (sectionId, index, enabled) => { + widgetsTab.handleMinimumWidthChanged(sectionId, index, enabled); + } + onShowSwapChanged: (sectionId, index, enabled) => { + widgetsTab.handleShowSwapChanged(sectionId, index, enabled); + } + onShowInGbChanged: (sectionId, index, enabled) => { + widgetsTab.handleShowInGbChanged(sectionId, index, enabled); + } + onDiskUsageModeChanged: (sectionId, widgetIndex, mode) => { + widgetsTab.handleDiskUsageModeChanged(sectionId, widgetIndex, mode); + } + onCompactModeChanged: (widgetId, value) => { + widgetsTab.handleCompactModeChanged(sectionId, widgetId, value); + } + onOverflowSettingChanged: (sectionId, widgetIndex, settingName, value) => { + widgetsTab.handleOverflowSettingChanged(sectionId, widgetIndex, settingName, value); + } + } + } + + StyledRect { + width: parent.width + height: centerSection.implicitHeight + Theme.spacingL * 2 + radius: Theme.cornerRadius + color: Theme.surfaceContainerHigh + border.width: 0 + + WidgetsTabSection { + id: centerSection + anchors.fill: parent + anchors.margins: Theme.spacingL + title: selectedBarIsVertical ? I18n.tr("Middle Section") : I18n.tr("Center Section") + titleIcon: "format_align_center" + sectionId: "center" + allWidgets: widgetsTab.baseWidgetDefinitions + items: widgetsTab.getItemsForSection("center") + onItemEnabledChanged: (sectionId, itemId, enabled) => { + widgetsTab.handleItemEnabledChanged(sectionId, itemId, enabled); + } + onItemOrderChanged: newOrder => { + widgetsTab.handleItemOrderChanged(sectionId, newOrder); + } + onAddWidget: sectionId => { + showWidgetSelectionPopup(sectionId); + } + onRemoveWidget: (sectionId, index) => { + widgetsTab.removeWidgetFromSection(sectionId, index); + } + onSpacerSizeChanged: (sectionId, index, size) => { + widgetsTab.handleSpacerSizeChanged(sectionId, index, size); + } + onGpuSelectionChanged: (sectionId, index, gpuIndex) => { + widgetsTab.handleGpuSelectionChanged(sectionId, index, gpuIndex); + } + onDiskMountSelectionChanged: (sectionId, index, mountPath) => { + widgetsTab.handleDiskMountSelectionChanged(sectionId, index, mountPath); + } + onControlCenterSettingChanged: (sectionId, index, setting, value) => { + widgetsTab.handleControlCenterSettingChanged(sectionId, index, setting, value); + } + onControlCenterGroupOrderChanged: (sectionId, index, groupOrder) => { + widgetsTab.handleControlCenterGroupOrderChanged(sectionId, index, groupOrder); + } + onPrivacySettingChanged: (sectionId, index, setting, value) => { + widgetsTab.handlePrivacySettingChanged(sectionId, index, setting, value); + } + onMinimumWidthChanged: (sectionId, index, enabled) => { + widgetsTab.handleMinimumWidthChanged(sectionId, index, enabled); + } + onShowSwapChanged: (sectionId, index, enabled) => { + widgetsTab.handleShowSwapChanged(sectionId, index, enabled); + } + onShowInGbChanged: (sectionId, index, enabled) => { + widgetsTab.handleShowInGbChanged(sectionId, index, enabled); + } + onDiskUsageModeChanged: (sectionId, widgetIndex, mode) => { + widgetsTab.handleDiskUsageModeChanged(sectionId, widgetIndex, mode); + } + onCompactModeChanged: (widgetId, value) => { + widgetsTab.handleCompactModeChanged(sectionId, widgetId, value); + } + onOverflowSettingChanged: (sectionId, widgetIndex, settingName, value) => { + widgetsTab.handleOverflowSettingChanged(sectionId, widgetIndex, settingName, value); + } + } + } + + StyledRect { + width: parent.width + height: rightSection.implicitHeight + Theme.spacingL * 2 + radius: Theme.cornerRadius + color: Theme.surfaceContainerHigh + border.width: 0 + + WidgetsTabSection { + id: rightSection + anchors.fill: parent + anchors.margins: Theme.spacingL + title: selectedBarIsVertical ? I18n.tr("Bottom Section") : I18n.tr("Right Section") + titleIcon: "format_align_right" + sectionId: "right" + allWidgets: widgetsTab.baseWidgetDefinitions + items: widgetsTab.getItemsForSection("right") + onItemEnabledChanged: (sectionId, itemId, enabled) => { + widgetsTab.handleItemEnabledChanged(sectionId, itemId, enabled); + } + onItemOrderChanged: newOrder => { + widgetsTab.handleItemOrderChanged(sectionId, newOrder); + } + onAddWidget: sectionId => { + showWidgetSelectionPopup(sectionId); + } + onRemoveWidget: (sectionId, index) => { + widgetsTab.removeWidgetFromSection(sectionId, index); + } + onSpacerSizeChanged: (sectionId, index, size) => { + widgetsTab.handleSpacerSizeChanged(sectionId, index, size); + } + onGpuSelectionChanged: (sectionId, index, gpuIndex) => { + widgetsTab.handleGpuSelectionChanged(sectionId, index, gpuIndex); + } + onDiskMountSelectionChanged: (sectionId, index, mountPath) => { + widgetsTab.handleDiskMountSelectionChanged(sectionId, index, mountPath); + } + onControlCenterSettingChanged: (sectionId, index, setting, value) => { + widgetsTab.handleControlCenterSettingChanged(sectionId, index, setting, value); + } + onControlCenterGroupOrderChanged: (sectionId, index, groupOrder) => { + widgetsTab.handleControlCenterGroupOrderChanged(sectionId, index, groupOrder); + } + onPrivacySettingChanged: (sectionId, index, setting, value) => { + widgetsTab.handlePrivacySettingChanged(sectionId, index, setting, value); + } + onMinimumWidthChanged: (sectionId, index, enabled) => { + widgetsTab.handleMinimumWidthChanged(sectionId, index, enabled); + } + onShowSwapChanged: (sectionId, index, enabled) => { + widgetsTab.handleShowSwapChanged(sectionId, index, enabled); + } + onShowInGbChanged: (sectionId, index, enabled) => { + widgetsTab.handleShowInGbChanged(sectionId, index, enabled); + } + onDiskUsageModeChanged: (sectionId, widgetIndex, mode) => { + widgetsTab.handleDiskUsageModeChanged(sectionId, widgetIndex, mode); + } + onCompactModeChanged: (widgetId, value) => { + widgetsTab.handleCompactModeChanged(sectionId, widgetId, value); + } + onOverflowSettingChanged: (sectionId, widgetIndex, settingName, value) => { + widgetsTab.handleOverflowSettingChanged(sectionId, widgetIndex, settingName, value); + } + } + } + } + } + } +} |