mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
170 lines
6.0 KiB
QML
170 lines
6.0 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Hyprland
|
|
import Quickshell.I3
|
|
import qs.Common
|
|
import qs.Services
|
|
|
|
Item {
|
|
id: root
|
|
|
|
required property var barConfig
|
|
|
|
signal colorPickerRequested
|
|
signal barReady(var barConfig)
|
|
|
|
property alias barVariants: barVariants
|
|
property var hyprlandOverviewLoader: null
|
|
property bool systemTrayMenuOpen: false
|
|
|
|
property alias leftWidgetsModel: leftWidgetsModel
|
|
property alias centerWidgetsModel: centerWidgetsModel
|
|
property alias rightWidgetsModel: rightWidgetsModel
|
|
|
|
ScriptModel {
|
|
id: leftWidgetsModel
|
|
values: {
|
|
root.barConfig;
|
|
const leftWidgets = root.barConfig?.leftWidgets || [];
|
|
return leftWidgets.map((w, index) => {
|
|
if (typeof w === "string") {
|
|
return {
|
|
widgetId: w,
|
|
id: w + "_" + index,
|
|
enabled: true
|
|
};
|
|
} else {
|
|
const obj = Object.assign({}, w);
|
|
obj.widgetId = w.id || w.widgetId;
|
|
obj.id = (w.id || w.widgetId) + "_" + index;
|
|
obj.enabled = w.enabled !== false;
|
|
return obj;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
ScriptModel {
|
|
id: centerWidgetsModel
|
|
values: {
|
|
root.barConfig;
|
|
const centerWidgets = root.barConfig?.centerWidgets || [];
|
|
return centerWidgets.map((w, index) => {
|
|
if (typeof w === "string") {
|
|
return {
|
|
widgetId: w,
|
|
id: w + "_" + index,
|
|
enabled: true
|
|
};
|
|
} else {
|
|
const obj = Object.assign({}, w);
|
|
obj.widgetId = w.id || w.widgetId;
|
|
obj.id = (w.id || w.widgetId) + "_" + index;
|
|
obj.enabled = w.enabled !== false;
|
|
return obj;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
ScriptModel {
|
|
id: rightWidgetsModel
|
|
values: {
|
|
root.barConfig;
|
|
const rightWidgets = root.barConfig?.rightWidgets || [];
|
|
return rightWidgets.map((w, index) => {
|
|
if (typeof w === "string") {
|
|
return {
|
|
widgetId: w,
|
|
id: w + "_" + index,
|
|
enabled: true
|
|
};
|
|
} else {
|
|
const obj = Object.assign({}, w);
|
|
obj.widgetId = w.id || w.widgetId;
|
|
obj.id = (w.id || w.widgetId) + "_" + index;
|
|
obj.enabled = w.enabled !== false;
|
|
return obj;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function triggerControlCenterOnFocusedScreen() {
|
|
let focusedScreenName = "";
|
|
if (CompositorService.isHyprland && Hyprland.focusedWorkspace && Hyprland.focusedWorkspace.monitor) {
|
|
focusedScreenName = Hyprland.focusedWorkspace.monitor.name;
|
|
} else if (CompositorService.isNiri && NiriService.currentOutput) {
|
|
focusedScreenName = NiriService.currentOutput;
|
|
} else if (CompositorService.isSway) {
|
|
const focusedWs = I3.workspaces?.values?.find(ws => ws.focused === true);
|
|
focusedScreenName = focusedWs?.monitor?.name || "";
|
|
}
|
|
|
|
if (!focusedScreenName && barVariants.instances.length > 0) {
|
|
const firstBar = barVariants.instances[0];
|
|
firstBar.triggerControlCenter();
|
|
return true;
|
|
}
|
|
|
|
for (var i = 0; i < barVariants.instances.length; i++) {
|
|
const barInstance = barVariants.instances[i];
|
|
if (barInstance.modelData && barInstance.modelData.name === focusedScreenName) {
|
|
barInstance.triggerControlCenter();
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function triggerWallpaperBrowserOnFocusedScreen() {
|
|
let focusedScreenName = "";
|
|
if (CompositorService.isHyprland && Hyprland.focusedWorkspace && Hyprland.focusedWorkspace.monitor) {
|
|
focusedScreenName = Hyprland.focusedWorkspace.monitor.name;
|
|
} else if (CompositorService.isNiri && NiriService.currentOutput) {
|
|
focusedScreenName = NiriService.currentOutput;
|
|
} else if (CompositorService.isSway) {
|
|
const focusedWs = I3.workspaces?.values?.find(ws => ws.focused === true);
|
|
focusedScreenName = focusedWs?.monitor?.name || "";
|
|
}
|
|
|
|
if (!focusedScreenName && barVariants.instances.length > 0) {
|
|
const firstBar = barVariants.instances[0];
|
|
firstBar.triggerWallpaperBrowser();
|
|
return true;
|
|
}
|
|
|
|
for (var i = 0; i < barVariants.instances.length; i++) {
|
|
const barInstance = barVariants.instances[i];
|
|
if (barInstance.modelData && barInstance.modelData.name === focusedScreenName) {
|
|
barInstance.triggerWallpaperBrowser();
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
Variants {
|
|
id: barVariants
|
|
model: {
|
|
const prefs = root.barConfig?.screenPreferences || ["all"];
|
|
if (prefs.includes("all") || (typeof prefs[0] === "string" && prefs[0] === "all")) {
|
|
return Quickshell.screens;
|
|
}
|
|
const filtered = Quickshell.screens.filter(screen => SettingsData.isScreenInPreferences(screen, prefs));
|
|
if (filtered.length === 0 && root.barConfig?.showOnLastDisplay && Quickshell.screens.length === 1) {
|
|
return Quickshell.screens;
|
|
}
|
|
return filtered;
|
|
}
|
|
|
|
delegate: DankBarWindow {
|
|
rootWindow: root
|
|
barConfig: root.barConfig
|
|
leftWidgetsModel: root.leftWidgetsModel
|
|
centerWidgetsModel: root.centerWidgetsModel
|
|
rightWidgetsModel: root.rightWidgetsModel
|
|
}
|
|
}
|
|
}
|