1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-07 05:55:37 -05:00

Logic updates to re-ordering topbar widgets

This commit is contained in:
purian23
2025-08-01 23:14:19 -04:00
parent 12c62720b3
commit 8fb8281988
4 changed files with 94 additions and 111 deletions

View File

@@ -497,7 +497,10 @@ Singleton {
function updateListModel(listModel, order) { function updateListModel(listModel, order) {
listModel.clear(); listModel.clear();
for (var i = 0; i < order.length; i++) { for (var i = 0; i < order.length; i++) {
listModel.append({"widgetId": order[i]}); // Handle both old string format and new object format
var widgetId = typeof order[i] === "string" ? order[i] : order[i].id;
var enabled = typeof order[i] === "string" ? true : order[i].enabled;
listModel.append({"widgetId": widgetId, "enabled": enabled});
} }
} }

View File

@@ -110,10 +110,25 @@ ScrollView {
} }
] ]
// Default widget configurations for each section // Default widget configurations for each section (with enabled states)
property var defaultLeftWidgets: ["launcherButton", "workspaceSwitcher", "focusedWindow"] property var defaultLeftWidgets: [
property var defaultCenterWidgets: ["music", "clock", "weather"] {id: "launcherButton", enabled: true},
property var defaultRightWidgets: ["systemTray", "clipboard", "systemResources", "notificationButton", "battery", "controlCenterButton"] {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: "systemResources", enabled: true},
{id: "notificationButton", enabled: true},
{id: "battery", enabled: true},
{id: "controlCenterButton", enabled: true}
]
Component.onCompleted: { Component.onCompleted: {
// Initialize sections with defaults if they're empty // Initialize sections with defaults if they're empty
@@ -133,14 +148,17 @@ ScrollView {
var centerWidgets = Prefs.topBarCenterWidgets.slice() var centerWidgets = Prefs.topBarCenterWidgets.slice()
var rightWidgets = Prefs.topBarRightWidgets.slice() var rightWidgets = Prefs.topBarRightWidgets.slice()
// Create widget object with enabled state
var widgetObj = {id: widgetId, enabled: true}
if (targetSection === "left") { if (targetSection === "left") {
leftWidgets.push(widgetId) leftWidgets.push(widgetObj)
Prefs.setTopBarLeftWidgets(leftWidgets) Prefs.setTopBarLeftWidgets(leftWidgets)
} else if (targetSection === "center") { } else if (targetSection === "center") {
centerWidgets.push(widgetId) centerWidgets.push(widgetObj)
Prefs.setTopBarCenterWidgets(centerWidgets) Prefs.setTopBarCenterWidgets(centerWidgets)
} else if (targetSection === "right") { } else if (targetSection === "right") {
rightWidgets.push(widgetId) rightWidgets.push(widgetObj)
Prefs.setTopBarRightWidgets(rightWidgets) Prefs.setTopBarRightWidgets(rightWidgets)
} }
} }
@@ -162,34 +180,44 @@ ScrollView {
} }
} }
function handleItemEnabledChanged(itemId, enabled) { function handleItemEnabledChanged(sectionId, itemId, enabled) {
// Update the widget's enabled state in preferences // Update the specific widget instance's enabled state in the section
if (itemId === "focusedWindow") { var widgets = []
Prefs.setShowFocusedWindow(enabled)
} else if (itemId === "weather") { if (sectionId === "left") {
Prefs.setShowWeather(enabled) widgets = Prefs.topBarLeftWidgets.slice()
} else if (itemId === "music") { } else if (sectionId === "center") {
Prefs.setShowMusic(enabled) widgets = Prefs.topBarCenterWidgets.slice()
} else if (itemId === "clipboard") { } else if (sectionId === "right") {
Prefs.setShowClipboard(enabled) widgets = Prefs.topBarRightWidgets.slice()
} else if (itemId === "systemResources") { }
Prefs.setShowSystemResources(enabled)
} else if (itemId === "systemTray") { // Find and update the specific widget instance
Prefs.setShowSystemTray(enabled) for (var i = 0; i < widgets.length; i++) {
} else if (itemId === "clock") { // Handle both old string format and new object format for backward compatibility
Prefs.setShowClock(enabled) var widget = widgets[i]
} else if (itemId === "notificationButton") { var widgetId = typeof widget === "string" ? widget : widget.id
Prefs.setShowNotificationButton(enabled)
} else if (itemId === "controlCenterButton") { // Update the enabled state for this specific instance
Prefs.setShowControlCenterButton(enabled) if (widgetId === itemId) {
} else if (itemId === "battery") { if (typeof widget === "string") {
Prefs.setShowBattery(enabled) // Convert old string format to object format
} else if (itemId === "launcherButton") { widgets[i] = {id: widget, enabled: enabled}
Prefs.setShowLauncherButton(enabled) } else {
} else if (itemId === "workspaceSwitcher") { widgets[i] = {id: widget.id, enabled: enabled}
Prefs.setShowWorkspaceSwitcher(enabled) }
break
}
}
// Save the updated widgets array
if (sectionId === "left") {
Prefs.setTopBarLeftWidgets(widgets)
} else if (sectionId === "center") {
Prefs.setTopBarCenterWidgets(widgets)
} else if (sectionId === "right") {
Prefs.setTopBarRightWidgets(widgets)
} }
// Note: spacer and separator don't need preference handling as they're always enabled
} }
function handleItemOrderChanged(sectionId, newOrder) { function handleItemOrderChanged(sectionId, newOrder) {
@@ -204,47 +232,26 @@ ScrollView {
function getItemsForSection(sectionId) { function getItemsForSection(sectionId) {
var widgets = [] var widgets = []
var widgetIds = [] var widgetData = []
if (sectionId === "left") { if (sectionId === "left") {
widgetIds = Prefs.topBarLeftWidgets || [] widgetData = Prefs.topBarLeftWidgets || []
} else if (sectionId === "center") { } else if (sectionId === "center") {
widgetIds = Prefs.topBarCenterWidgets || [] widgetData = Prefs.topBarCenterWidgets || []
} else if (sectionId === "right") { } else if (sectionId === "right") {
widgetIds = Prefs.topBarRightWidgets || [] widgetData = Prefs.topBarRightWidgets || []
} }
widgetIds.forEach(widgetId => { widgetData.forEach(widget => {
// Handle both old string format and new object format for backward compatibility
var widgetId = typeof widget === "string" ? widget : widget.id
var widgetEnabled = typeof widget === "string" ? true : widget.enabled
var widgetDef = baseWidgetDefinitions.find(w => w.id === widgetId) var widgetDef = baseWidgetDefinitions.find(w => w.id === widgetId)
if (widgetDef) { if (widgetDef) {
var item = Object.assign({}, widgetDef) var item = Object.assign({}, widgetDef)
// Set enabled state based on preferences // Use the per-instance enabled state
if (widgetId === "focusedWindow") { item.enabled = widgetEnabled
item.enabled = Prefs.showFocusedWindow
} else if (widgetId === "weather") {
item.enabled = Prefs.showWeather
} else if (widgetId === "music") {
item.enabled = Prefs.showMusic
} else if (widgetId === "clipboard") {
item.enabled = Prefs.showClipboard
} else if (widgetId === "systemResources") {
item.enabled = Prefs.showSystemResources
} else if (widgetId === "systemTray") {
item.enabled = Prefs.showSystemTray
} else if (widgetId === "clock") {
item.enabled = Prefs.showClock
} else if (widgetId === "notificationButton") {
item.enabled = Prefs.showNotificationButton
} else if (widgetId === "controlCenterButton") {
item.enabled = Prefs.showControlCenterButton
} else if (widgetId === "battery") {
item.enabled = Prefs.showBattery
} else if (widgetId === "launcherButton") {
item.enabled = Prefs.showLauncherButton
} else if (widgetId === "workspaceSwitcher") {
item.enabled = Prefs.showWorkspaceSwitcher
}
// spacer and separator are always enabled (no preference toggle needed)
widgets.push(item) widgets.push(item)
} }
}) })
@@ -320,24 +327,10 @@ ScrollView {
hoverEnabled: true hoverEnabled: true
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onClicked: { onClicked: {
// Reset all sections to defaults // Reset all sections to defaults (with per-instance enabled states)
Prefs.setTopBarLeftWidgets(defaultLeftWidgets) Prefs.setTopBarLeftWidgets(defaultLeftWidgets)
Prefs.setTopBarCenterWidgets(defaultCenterWidgets) Prefs.setTopBarCenterWidgets(defaultCenterWidgets)
Prefs.setTopBarRightWidgets(defaultRightWidgets) Prefs.setTopBarRightWidgets(defaultRightWidgets)
// Reset all widget enabled states to defaults (all enabled)
Prefs.setShowFocusedWindow(true)
Prefs.setShowWeather(true)
Prefs.setShowMusic(true)
Prefs.setShowClipboard(true)
Prefs.setShowSystemResources(true)
Prefs.setShowSystemTray(true)
Prefs.setShowClock(true)
Prefs.setShowNotificationButton(true)
Prefs.setShowControlCenterButton(true)
Prefs.setShowBattery(true)
Prefs.setShowLauncherButton(true)
Prefs.setShowWorkspaceSwitcher(true)
} }
} }
@@ -393,8 +386,8 @@ ScrollView {
allWidgets: widgetsTab.baseWidgetDefinitions allWidgets: widgetsTab.baseWidgetDefinitions
items: widgetsTab.getItemsForSection("left") items: widgetsTab.getItemsForSection("left")
onItemEnabledChanged: (itemId, enabled) => { onItemEnabledChanged: (sectionId, itemId, enabled) => {
widgetsTab.handleItemEnabledChanged(itemId, enabled) widgetsTab.handleItemEnabledChanged(sectionId, itemId, enabled)
} }
onItemOrderChanged: (newOrder) => { onItemOrderChanged: (newOrder) => {
@@ -421,8 +414,8 @@ ScrollView {
allWidgets: widgetsTab.baseWidgetDefinitions allWidgets: widgetsTab.baseWidgetDefinitions
items: widgetsTab.getItemsForSection("center") items: widgetsTab.getItemsForSection("center")
onItemEnabledChanged: (itemId, enabled) => { onItemEnabledChanged: (sectionId, itemId, enabled) => {
widgetsTab.handleItemEnabledChanged(itemId, enabled) widgetsTab.handleItemEnabledChanged(sectionId, itemId, enabled)
} }
onItemOrderChanged: (newOrder) => { onItemOrderChanged: (newOrder) => {
@@ -449,8 +442,8 @@ ScrollView {
allWidgets: widgetsTab.baseWidgetDefinitions allWidgets: widgetsTab.baseWidgetDefinitions
items: widgetsTab.getItemsForSection("right") items: widgetsTab.getItemsForSection("right")
onItemEnabledChanged: (itemId, enabled) => { onItemEnabledChanged: (sectionId, itemId, enabled) => {
widgetsTab.handleItemEnabledChanged(itemId, enabled) widgetsTab.handleItemEnabledChanged(sectionId, itemId, enabled)
} }
onItemOrderChanged: (newOrder) => { onItemOrderChanged: (newOrder) => {

View File

@@ -153,23 +153,10 @@ PanelWindow {
readonly property bool spacingTight: validLayout && (leftToMediaGap < 150 || clockToRightGap < 100) readonly property bool spacingTight: validLayout && (leftToMediaGap < 150 || clockToRightGap < 100)
readonly property bool overlapping: validLayout && (leftToMediaGap < 100 || clockToRightGap < 50) readonly property bool overlapping: validLayout && (leftToMediaGap < 100 || clockToRightGap < 50)
// Helper functions // Helper functions - now uses per-instance enabled state from model
function getWidgetEnabled(widgetId) { function getWidgetEnabled(enabled) {
switch (widgetId) { // Use the enabled state directly from the model
case "launcherButton": return Prefs.showLauncherButton return enabled !== undefined ? enabled : true
case "workspaceSwitcher": return Prefs.showWorkspaceSwitcher
case "focusedWindow": return Prefs.showFocusedWindow
case "clock": return Prefs.showClock
case "music": return Prefs.showMusic
case "weather": return Prefs.showWeather
case "systemTray": return Prefs.showSystemTray
case "clipboard": return Prefs.showClipboard
case "systemResources": return Prefs.showSystemResources
case "notificationButton": return Prefs.showNotificationButton
case "battery": return Prefs.showBattery
case "controlCenterButton": return Prefs.showControlCenterButton
default: return false
}
} }
function getWidgetVisible(widgetId) { function getWidgetVisible(widgetId) {
@@ -247,7 +234,7 @@ PanelWindow {
Loader { Loader {
anchors.verticalCenter: parent ? parent.verticalCenter : undefined anchors.verticalCenter: parent ? parent.verticalCenter : undefined
active: topBarContent.getWidgetEnabled(model.widgetId) && topBarContent.getWidgetVisible(model.widgetId) active: topBarContent.getWidgetEnabled(model.enabled) && topBarContent.getWidgetVisible(model.widgetId)
sourceComponent: topBarContent.getWidgetComponent(model.widgetId) sourceComponent: topBarContent.getWidgetComponent(model.widgetId)
property string widgetId: model.widgetId property string widgetId: model.widgetId
@@ -272,7 +259,7 @@ PanelWindow {
Loader { Loader {
anchors.verticalCenter: parent ? parent.verticalCenter : undefined anchors.verticalCenter: parent ? parent.verticalCenter : undefined
active: topBarContent.getWidgetEnabled(model.widgetId) && topBarContent.getWidgetVisible(model.widgetId) active: topBarContent.getWidgetEnabled(model.enabled) && topBarContent.getWidgetVisible(model.widgetId)
sourceComponent: topBarContent.getWidgetComponent(model.widgetId) sourceComponent: topBarContent.getWidgetComponent(model.widgetId)
property string widgetId: model.widgetId property string widgetId: model.widgetId
@@ -298,7 +285,7 @@ PanelWindow {
Loader { Loader {
anchors.verticalCenter: parent ? parent.verticalCenter : undefined anchors.verticalCenter: parent ? parent.verticalCenter : undefined
active: topBarContent.getWidgetEnabled(model.widgetId) && topBarContent.getWidgetVisible(model.widgetId) active: topBarContent.getWidgetEnabled(model.enabled) && topBarContent.getWidgetVisible(model.widgetId)
sourceComponent: topBarContent.getWidgetComponent(model.widgetId) sourceComponent: topBarContent.getWidgetComponent(model.widgetId)
property string widgetId: model.widgetId property string widgetId: model.widgetId

View File

@@ -12,7 +12,7 @@ Column {
property string titleIcon: "widgets" property string titleIcon: "widgets"
property string sectionId: "" property string sectionId: ""
signal itemEnabledChanged(string itemId, bool enabled) signal itemEnabledChanged(string sectionId, string itemId, bool enabled)
signal itemOrderChanged(var newOrder) signal itemOrderChanged(var newOrder)
signal addWidget(string sectionId) signal addWidget(string sectionId)
signal removeLastWidget(string sectionId) signal removeLastWidget(string sectionId)
@@ -142,7 +142,7 @@ Column {
hideText: true hideText: true
checked: modelData.enabled checked: modelData.enabled
onToggled: (checked) => { onToggled: (checked) => {
root.itemEnabledChanged(modelData.id, checked) root.itemEnabledChanged(root.sectionId, modelData.id, checked)
} }
} }
@@ -183,7 +183,7 @@ Column {
var draggedItem = newItems.splice(index, 1)[0] var draggedItem = newItems.splice(index, 1)[0]
newItems.splice(newIndex, 0, draggedItem) newItems.splice(newIndex, 0, draggedItem)
root.itemOrderChanged(newItems.map(item => item.id)) root.itemOrderChanged(newItems.map(item => ({id: item.id, enabled: item.enabled})))
} }
} }