229 lines
8.5 KiB
QML
229 lines
8.5 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import qs.Commons
|
|
import qs.Modules.Bar.Widgets
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
// Widget registry object mapping widget names to components
|
|
property var widgets: ({
|
|
"ActiveWindow": activeWindowComponent,
|
|
"Battery": batteryComponent,
|
|
"Bluetooth": bluetoothComponent,
|
|
"Brightness": brightnessComponent,
|
|
"Clock": clockComponent,
|
|
"CustomButton": customButtonComponent,
|
|
"DarkModeToggle": darkModeToggle,
|
|
"KeepAwake": keepAwakeComponent,
|
|
"KeyboardLayout": keyboardLayoutComponent,
|
|
"MediaMini": mediaMiniComponent,
|
|
"Microphone": microphoneComponent,
|
|
"NightLight": nightLightComponent,
|
|
"NotificationHistory": notificationHistoryComponent,
|
|
"PowerProfile": powerProfileComponent,
|
|
"PowerToggle": powerToggleComponent,
|
|
"ScreenRecorderIndicator": screenRecorderIndicatorComponent,
|
|
"SidePanelToggle": sidePanelToggleComponent,
|
|
"Spacer": spacerComponent,
|
|
"SystemMonitor": systemMonitorComponent,
|
|
"Taskbar": taskbarComponent,
|
|
"Tray": trayComponent,
|
|
"Volume": volumeComponent,
|
|
"WiFi": wiFiComponent,
|
|
"Workspace": workspaceComponent
|
|
})
|
|
|
|
property var widgetMetadata: ({
|
|
"ActiveWindow": {
|
|
"allowUserSettings": true,
|
|
"showIcon": true
|
|
},
|
|
"Battery": {
|
|
"allowUserSettings": true,
|
|
"displayMode": "onhover",
|
|
"warningThreshold": 30
|
|
},
|
|
"Brightness": {
|
|
"allowUserSettings": true,
|
|
"displayMode": "onhover"
|
|
},
|
|
"Clock": {
|
|
"allowUserSettings": true,
|
|
"displayFormat": "time-date-short",
|
|
"use12HourClock": false,
|
|
"reverseDayMonth": true
|
|
},
|
|
"CustomButton": {
|
|
"allowUserSettings": true,
|
|
"icon": "heart",
|
|
"leftClickExec": "",
|
|
"rightClickExec": "",
|
|
"middleClickExec": "",
|
|
"textCommand": "",
|
|
"textIntervalMs": 3000
|
|
},
|
|
"Microphone": {
|
|
"allowUserSettings": true,
|
|
"displayMode": "onhover"
|
|
},
|
|
"NotificationHistory": {
|
|
"allowUserSettings": true,
|
|
"showUnreadBadge": true,
|
|
"hideWhenZero": true
|
|
},
|
|
"Spacer": {
|
|
"allowUserSettings": true,
|
|
"width": 20
|
|
},
|
|
"SystemMonitor": {
|
|
"allowUserSettings": true,
|
|
"showCpuUsage": true,
|
|
"showCpuTemp": true,
|
|
"showMemoryUsage": true,
|
|
"showMemoryAsPercent": false,
|
|
"showNetworkStats": false,
|
|
"showDiskUsage": false
|
|
},
|
|
"Workspace": {
|
|
"allowUserSettings": true,
|
|
"labelMode": "index",
|
|
"hideUnoccupied": false
|
|
},
|
|
"MediaMini": {
|
|
"allowUserSettings": true,
|
|
"showAlbumArt": false,
|
|
"showVisualizer": false,
|
|
"visualizerType": "linear"
|
|
},
|
|
"SidePanelToggle": {
|
|
"allowUserSettings": true,
|
|
"useDistroLogo": false
|
|
},
|
|
"Volume": {
|
|
"allowUserSettings": true,
|
|
"displayMode": "onhover"
|
|
},
|
|
"KeyboardLayout": {
|
|
"allowUserSettings": true,
|
|
"displayMode": "onhover"
|
|
}
|
|
})
|
|
|
|
// Component definitions - these are loaded once at startup
|
|
property Component activeWindowComponent: Component {
|
|
ActiveWindow {}
|
|
}
|
|
property Component batteryComponent: Component {
|
|
Battery {}
|
|
}
|
|
property Component bluetoothComponent: Component {
|
|
Bluetooth {}
|
|
}
|
|
property Component brightnessComponent: Component {
|
|
Brightness {}
|
|
}
|
|
property Component clockComponent: Component {
|
|
Clock {}
|
|
}
|
|
property Component customButtonComponent: Component {
|
|
CustomButton {}
|
|
}
|
|
property Component darkModeToggle: Component {
|
|
DarkModeToggle {}
|
|
}
|
|
property Component keyboardLayoutComponent: Component {
|
|
KeyboardLayout {}
|
|
}
|
|
property Component keepAwakeComponent: Component {
|
|
KeepAwake {}
|
|
}
|
|
property Component mediaMiniComponent: Component {
|
|
MediaMini {}
|
|
}
|
|
property Component microphoneComponent: Component {
|
|
Microphone {}
|
|
}
|
|
property Component nightLightComponent: Component {
|
|
NightLight {}
|
|
}
|
|
property Component notificationHistoryComponent: Component {
|
|
NotificationHistory {}
|
|
}
|
|
property Component powerProfileComponent: Component {
|
|
PowerProfile {}
|
|
}
|
|
property Component powerToggleComponent: Component {
|
|
PowerToggle {}
|
|
}
|
|
property Component screenRecorderIndicatorComponent: Component {
|
|
ScreenRecorderIndicator {}
|
|
}
|
|
property Component sidePanelToggleComponent: Component {
|
|
SidePanelToggle {}
|
|
}
|
|
property Component spacerComponent: Component {
|
|
Spacer {}
|
|
}
|
|
property Component systemMonitorComponent: Component {
|
|
SystemMonitor {}
|
|
}
|
|
property Component trayComponent: Component {
|
|
Tray {}
|
|
}
|
|
property Component volumeComponent: Component {
|
|
Volume {}
|
|
}
|
|
property Component wiFiComponent: Component {
|
|
WiFi {}
|
|
}
|
|
property Component workspaceComponent: Component {
|
|
Workspace {}
|
|
}
|
|
property Component taskbarComponent: Component {
|
|
Taskbar {}
|
|
}
|
|
|
|
// ------------------------------
|
|
// Helper function to get widget component by name
|
|
function getWidget(id) {
|
|
return widgets[id] || null
|
|
}
|
|
|
|
// Helper function to check if widget exists
|
|
function hasWidget(id) {
|
|
return id in widgets
|
|
}
|
|
|
|
// Get list of available widget id
|
|
function getAvailableWidgets() {
|
|
return Object.keys(widgets)
|
|
}
|
|
|
|
// Helper function to check if widget has user settings
|
|
function widgetHasUserSettings(id) {
|
|
return (widgetMetadata[id] !== undefined) && (widgetMetadata[id].allowUserSettings === true)
|
|
}
|
|
|
|
function getPillDirection(widget) {
|
|
try {
|
|
if (widget.section === "left") {
|
|
return true
|
|
} else if (widget.section === "right") {
|
|
return false
|
|
} else {
|
|
// middle section
|
|
if (widget.sectionWidgetIndex < widget.sectionWidgetsCount / 2) {
|
|
return false
|
|
} else {
|
|
return true
|
|
}
|
|
}
|
|
} catch (e) {
|
|
Logger.error(e)
|
|
}
|
|
return false
|
|
}
|
|
}
|