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:
@@ -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});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) => {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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})))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user