From afc066088f8e3d455184711b07d7a3ca4de3dfc4 Mon Sep 17 00:00:00 2001 From: Pawel Baran Date: Sat, 10 Oct 2026 22:35:01 +0200 Subject: [PATCH 1/2] versioning of UIManagementSettings added --- BHoMUpgrades/CustomUpgrades/v100.cs | 79 ++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/BHoMUpgrades/CustomUpgrades/v100.cs b/BHoMUpgrades/CustomUpgrades/v100.cs index 1fdfb96..8e069a1 100644 --- a/BHoMUpgrades/CustomUpgrades/v100.cs +++ b/BHoMUpgrades/CustomUpgrades/v100.cs @@ -22,7 +22,6 @@ using BH.oM.Versioning; using System.Collections.Generic; -using System; namespace BH.Upgraders { @@ -33,6 +32,84 @@ public static class v100 /**** Public Methods ****/ /***************************************************/ + [VersioningTarget("BH.Revit.oM.UI.UIManagementSettings")] + public static Dictionary UpgradeUIManagementSettings(Dictionary oldVersion) + { + if (oldVersion == null) + return null; + + Dictionary newVersion = new Dictionary(); + newVersion["_t"] = "BH.Revit.oM.UI.ButtonLayoutSettings"; + + if (oldVersion.ContainsKey("Name")) + newVersion["Name"] = oldVersion["Name"]; + + if (oldVersion.ContainsKey("BHoM_Guid")) + newVersion["BHoM_Guid"] = oldVersion["BHoM_Guid"]; + + if (oldVersion.ContainsKey("CustomData")) + newVersion["CustomData"] = oldVersion["CustomData"]; + + Dictionary buttonLayout = new Dictionary(); + buttonLayout["_t"] = "BH.Revit.oM.UI.ButtonLayout"; + buttonLayout["Tabs"] = new List>(); + + if (oldVersion.ContainsKey("PinnedItems")) + { + List> pinnedItems = oldVersion["PinnedItems"] as List>; + if (pinnedItems != null) + { + Dictionary>>> tabPanelMapping = new Dictionary>>>(); + foreach (Dictionary item in pinnedItems) + { + if (!item.ContainsKey("_t")) + continue; + + if (item["_t"] != "BH.Revit.oM.UI.PinnedItemInfo") + continue; + + if (!item.ContainsKey("PanelName") || !item.ContainsKey("TabName")) + continue; + + string tabName = item["TabName"] as string; + string panelName = item["PanelName"] as string; + + if (string.IsNullOrWhiteSpace(tabName) || string.IsNullOrWhiteSpace(panelName)) + continue; + + if (!tabPanelMapping.ContainsKey(tabName)) + tabPanelMapping[tabName] = new Dictionary>>(); + + if (!tabPanelMapping[tabName].ContainsKey(panelName)) + tabPanelMapping[tabName][panelName] = new List>(); + + tabPanelMapping[tabName][panelName].Add(item); + } + + foreach (KeyValuePair>>> tab in tabPanelMapping) + { + Dictionary tabDict = new Dictionary(); + tabDict["_t"] = "BH.Revit.oM.UI.TabLayout"; + tabDict["Name"] = tab.Key; + tabDict["Panels"] = new List>(); + foreach (KeyValuePair>> panel in tab.Value) + { + Dictionary panelDict = new Dictionary(); + panelDict["_t"] = "BH.Revit.oM.UI.Panel"; + panelDict["Name"] = panel.Key; + panelDict["Items"] = panel.Value; + (tabDict["Panels"] as List>).Add(panelDict); + } + (buttonLayout["Tabs"] as List>).Add(tabDict); + } + } + } + + newVersion["Layout"] = buttonLayout; + + return newVersion; + } + /***************************************************/ } } \ No newline at end of file From a80bc2328a29468ccf83631fdbe8321cf5b6e0de Mon Sep 17 00:00:00 2001 From: Pawel Baran Date: Fri, 16 Oct 2026 22:07:29 +0200 Subject: [PATCH 2/2] versioning fixed --- BHoMUpgrades/CustomUpgrades/v100.cs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/BHoMUpgrades/CustomUpgrades/v100.cs b/BHoMUpgrades/CustomUpgrades/v100.cs index 8e069a1..159304e 100644 --- a/BHoMUpgrades/CustomUpgrades/v100.cs +++ b/BHoMUpgrades/CustomUpgrades/v100.cs @@ -50,22 +50,29 @@ public static Dictionary UpgradeUIManagementSettings(Dictionary< if (oldVersion.ContainsKey("CustomData")) newVersion["CustomData"] = oldVersion["CustomData"]; + if (oldVersion.ContainsKey("Fragments")) + newVersion["Fragments"] = oldVersion["Fragments"]; + Dictionary buttonLayout = new Dictionary(); buttonLayout["_t"] = "BH.Revit.oM.UI.ButtonLayout"; buttonLayout["Tabs"] = new List>(); if (oldVersion.ContainsKey("PinnedItems")) { - List> pinnedItems = oldVersion["PinnedItems"] as List>; + object[] pinnedItems = oldVersion["PinnedItems"] as object[]; if (pinnedItems != null) { Dictionary>>> tabPanelMapping = new Dictionary>>>(); - foreach (Dictionary item in pinnedItems) + foreach (object obj in pinnedItems) { + Dictionary item = obj as Dictionary; + if (item == null) + continue; + if (!item.ContainsKey("_t")) continue; - if (item["_t"] != "BH.Revit.oM.UI.PinnedItemInfo") + if (item["_t"] as string != "BH.Revit.oM.UI.PinnedItemInfo") continue; if (!item.ContainsKey("PanelName") || !item.ContainsKey("TabName")) @@ -83,7 +90,19 @@ public static Dictionary UpgradeUIManagementSettings(Dictionary< if (!tabPanelMapping[tabName].ContainsKey(panelName)) tabPanelMapping[tabName][panelName] = new List>(); - tabPanelMapping[tabName][panelName].Add(item); + Dictionary newItem = new Dictionary(item); + newItem["_t"] = "BH.Revit.oM.UI.PinnedButton"; + + if (newItem.ContainsKey("BHoM_Guid")) + newItem.Remove("BHoM_Guid"); + + if (newItem.ContainsKey("CustomData")) + newItem.Remove("CustomData"); + + if (newItem.ContainsKey("Fragments")) + newItem.Remove("Fragments"); + + tabPanelMapping[tabName][panelName].Add(newItem); } foreach (KeyValuePair>>> tab in tabPanelMapping)