From 68181a4df67d7fd137d3fadee1398adb8073854c Mon Sep 17 00:00:00 2001 From: Ly-sec Date: Fri, 22 Aug 2025 19:01:02 +0200 Subject: [PATCH] Move widget logic into it's own file (Commons/WidgetLoader.qml) --- Commons/WidgetLoader.qml | 70 ++++++++++++++++++++++++++++++++ Modules/Bar/Bar.qml | 88 ++++++++++++---------------------------- 2 files changed, 97 insertions(+), 61 deletions(-) create mode 100644 Commons/WidgetLoader.qml diff --git a/Commons/WidgetLoader.qml b/Commons/WidgetLoader.qml new file mode 100644 index 0000000..fda9635 --- /dev/null +++ b/Commons/WidgetLoader.qml @@ -0,0 +1,70 @@ +import QtQuick +import qs.Commons + +QtObject { + id: root + + // Signal emitted when widget loading status changes + signal widgetLoaded(string widgetName) + signal widgetFailed(string widgetName, string error) + signal loadingComplete(int total, int loaded, int failed) + + // Properties to track loading status + property int totalWidgets: 0 + property int loadedWidgets: 0 + property int failedWidgets: 0 + + // Auto-discover widget components + function getWidgetComponent(widgetName) { + if (!widgetName || widgetName.trim() === "") { + return null + } + + const widgetPath = `../Modules/Bar/Widgets/${widgetName}.qml` + Logger.log("WidgetLoader", `Attempting to load widget from: ${widgetPath}`) + + // Try to load the widget directly from file + const component = Qt.createComponent(widgetPath) + if (component.status === Component.Ready) { + Logger.log("WidgetLoader", `Successfully created component for: ${widgetName}.qml`) + return component + } + + const errorMsg = `Failed to load ${widgetName}.qml widget, status: ${component.status}, error: ${component.errorString()}` + Logger.error("WidgetLoader", errorMsg) + return null + } + + // Initialize loading tracking + function initializeLoading(widgetList) { + totalWidgets = widgetList.length + loadedWidgets = 0 + failedWidgets = 0 + + if (totalWidgets > 0) { + Logger.log("WidgetLoader", `Attempting to load ${totalWidgets} widgets`) + } + } + + // Track widget loading success + function onWidgetLoaded(widgetName) { + loadedWidgets++ + widgetLoaded(widgetName) + + if (loadedWidgets + failedWidgets === totalWidgets) { + Logger.log("WidgetLoader", `Loaded ${loadedWidgets}/${totalWidgets} widgets`) + loadingComplete(totalWidgets, loadedWidgets, failedWidgets) + } + } + + // Track widget loading failure + function onWidgetFailed(widgetName, error) { + failedWidgets++ + widgetFailed(widgetName, error) + + if (loadedWidgets + failedWidgets === totalWidgets) { + Logger.log("WidgetLoader", `Loaded ${loadedWidgets}/${totalWidgets} widgets`) + loadingComplete(totalWidgets, loadedWidgets, failedWidgets) + } + } +} diff --git a/Modules/Bar/Bar.qml b/Modules/Bar/Bar.qml index 462b8c6..3e96aa0 100644 --- a/Modules/Bar/Bar.qml +++ b/Modules/Bar/Bar.qml @@ -23,9 +23,7 @@ Variants { implicitHeight: Style.barHeight * scaling color: Color.transparent - Component.onCompleted: { - logWidgetLoadingSummary() - } + // If no bar activated in settings, then show them all visible: modelData ? (Settings.data.bar.monitors.includes(modelData.name) @@ -64,16 +62,15 @@ Variants { Repeater { model: Settings.data.bar.widgets.left delegate: Loader { - id: widgetLoader - sourceComponent: getWidgetComponent(modelData) + id: leftWidgetLoader + sourceComponent: widgetLoader.getWidgetComponent(modelData) active: true anchors.verticalCenter: parent.verticalCenter onStatusChanged: { if (status === Loader.Error) { - Logger.error("Bar", `Failed to load ${modelData} widget`) - onWidgetFailed() + widgetLoader.onWidgetFailed(modelData, "Loader error") } else if (status === Loader.Ready) { - onWidgetLoaded() + widgetLoader.onWidgetLoaded(modelData) } } } @@ -92,16 +89,15 @@ Variants { Repeater { model: Settings.data.bar.widgets.center delegate: Loader { - id: widgetLoader - sourceComponent: getWidgetComponent(modelData) + id: centerWidgetLoader + sourceComponent: widgetLoader.getWidgetComponent(modelData) active: true anchors.verticalCenter: parent.verticalCenter onStatusChanged: { if (status === Loader.Error) { - Logger.error("Bar", `Failed to load ${modelData} widget`) - onWidgetFailed() + widgetLoader.onWidgetFailed(modelData, "Loader error") } else if (status === Loader.Ready) { - onWidgetLoaded() + widgetLoader.onWidgetLoaded(modelData) } } } @@ -121,16 +117,15 @@ Variants { Repeater { model: Settings.data.bar.widgets.right delegate: Loader { - id: widgetLoader - sourceComponent: getWidgetComponent(modelData) + id: rightWidgetLoader + sourceComponent: widgetLoader.getWidgetComponent(modelData) active: true anchors.verticalCenter: parent.verticalCenter onStatusChanged: { if (status === Loader.Error) { - Logger.error("Bar", `Failed to load ${modelData} widget`) - onWidgetFailed() + widgetLoader.onWidgetFailed(modelData, "Loader error") } else if (status === Loader.Ready) { - onWidgetLoaded() + widgetLoader.onWidgetLoaded(modelData) } } } @@ -138,60 +133,31 @@ Variants { } } - // Auto-discover widget components - function getWidgetComponent(widgetName) { - if (!widgetName || widgetName.trim() === "") { - return null + // Widget loader instance + WidgetLoader { + id: widgetLoader + + onWidgetLoaded: function(widgetName) { + Logger.log("Bar", `Widget loaded: ${widgetName}`) } - const widgetPath = `../Bar/Widgets/${widgetName}.qml` - Logger.log("Bar", `Attempting to load widget from: ${widgetPath}`) - - // Try to load the widget directly from file - const component = Qt.createComponent(widgetPath) - if (component.status === Component.Ready) { - Logger.log("Bar", `Successfully created component for: ${widgetName}.qml`) - return component + onWidgetFailed: function(widgetName, error) { + Logger.error("Bar", `Widget failed: ${widgetName} - ${error}`) } - Logger.error("Bar", `Failed to load ${widgetName}.qml widget, status: ${component.status}, error: ${component.errorString()}`) - return null + onLoadingComplete: function(total, loaded, failed) { + Logger.log("Bar", `Widget loading complete: ${loaded}/${total} loaded, ${failed} failed`) + } } - // Track widget loading status - property int totalWidgets: 0 - property int loadedWidgets: 0 - property int failedWidgets: 0 - - // Log widget loading summary - function logWidgetLoadingSummary() { + // Initialize widget loading tracking + Component.onCompleted: { const allWidgets = [ ...Settings.data.bar.widgets.left, ...Settings.data.bar.widgets.center, ...Settings.data.bar.widgets.right ] - - totalWidgets = allWidgets.length - loadedWidgets = 0 - failedWidgets = 0 - - if (totalWidgets > 0) { - Logger.log("Bar", `Attempting to load ${totalWidgets} widgets`) - } - } - - function onWidgetLoaded() { - loadedWidgets++ - if (loadedWidgets + failedWidgets === totalWidgets) { - Logger.log("Bar", `Loaded ${loadedWidgets}/${totalWidgets} widgets`) - } - } - - function onWidgetFailed() { - failedWidgets++ - if (loadedWidgets + failedWidgets === totalWidgets) { - Logger.log("Bar", `Loaded ${loadedWidgets}/${totalWidgets} widgets`) - } + widgetLoader.initializeLoading(allWidgets) }