import QtQuick import qs.Common import qs.Services import qs.Widgets Item { id: root property var axis: null property string section: "center" property var parentScreen: null property real widgetThickness: 30 property real barThickness: 48 property string pluginId: "" property var pluginService: null property Component horizontalBarPill: null property Component verticalBarPill: null property Component popoutContent: null property real popoutWidth: 400 property real popoutHeight: 0 property var pillClickAction: null property Component controlCenterWidget: null property string ccWidgetIcon: "" property string ccWidgetPrimaryText: "" property string ccWidgetSecondaryText: "" property bool ccWidgetIsActive: false property bool ccWidgetIsToggle: true property Component ccDetailContent: null property real ccDetailHeight: 250 signal ccWidgetToggled() signal ccWidgetExpanded() property var pluginData: ({}) property var variants: [] readonly property bool isVertical: axis?.isVertical ?? false readonly property bool hasHorizontalPill: horizontalBarPill !== null readonly property bool hasVerticalPill: verticalBarPill !== null readonly property bool hasPopout: popoutContent !== null Component.onCompleted: { loadPluginData() } onPluginServiceChanged: { loadPluginData() } onPluginIdChanged: { loadPluginData() } Connections { target: pluginService function onPluginDataChanged(changedPluginId) { if (changedPluginId === pluginId) { loadPluginData() } } } function loadPluginData() { if (!pluginService || !pluginId) { pluginData = {} variants = [] return } pluginData = SettingsData.getPluginSettingsForPlugin(pluginId) variants = pluginService.getPluginVariants(pluginId) } function createVariant(variantName, variantConfig) { if (!pluginService || !pluginId) { return null } return pluginService.createPluginVariant(pluginId, variantName, variantConfig) } function removeVariant(variantId) { if (!pluginService || !pluginId) { return } pluginService.removePluginVariant(pluginId, variantId) } function updateVariant(variantId, variantConfig) { if (!pluginService || !pluginId) { return } pluginService.updatePluginVariant(pluginId, variantId, variantConfig) } width: isVertical ? (hasVerticalPill ? verticalPill.width : 0) : (hasHorizontalPill ? horizontalPill.width : 0) height: isVertical ? (hasVerticalPill ? verticalPill.height : 0) : (hasHorizontalPill ? horizontalPill.height : 0) BasePill { id: horizontalPill visible: !isVertical && hasHorizontalPill axis: root.axis section: root.section popoutTarget: hasPopout ? pluginPopout : null parentScreen: root.parentScreen widgetThickness: root.widgetThickness barThickness: root.barThickness content: root.horizontalBarPill onClicked: { if (pillClickAction) { if (pillClickAction.length === 0) { pillClickAction() } else { const globalPos = mapToGlobal(0, 0) const currentScreen = parentScreen || Screen const pos = SettingsData.getPopupTriggerPosition(globalPos, currentScreen, barThickness, width) pillClickAction(pos.x, pos.y, pos.width, section, currentScreen) } } else if (hasPopout) { pluginPopout.toggle() } } } BasePill { id: verticalPill visible: isVertical && hasVerticalPill axis: root.axis section: root.section popoutTarget: hasPopout ? pluginPopout : null parentScreen: root.parentScreen widgetThickness: root.widgetThickness barThickness: root.barThickness content: root.verticalBarPill isVerticalOrientation: true onClicked: { if (pillClickAction) { if (pillClickAction.length === 0) { pillClickAction() } else { const globalPos = mapToGlobal(0, 0) const currentScreen = parentScreen || Screen const pos = SettingsData.getPopupTriggerPosition(globalPos, currentScreen, barThickness, width) pillClickAction(pos.x, pos.y, pos.width, section, currentScreen) } } else if (hasPopout) { pluginPopout.toggle() } } } function closePopout() { if (pluginPopout) { pluginPopout.close() } } PluginPopout { id: pluginPopout contentWidth: root.popoutWidth contentHeight: root.popoutHeight pluginContent: root.popoutContent } }