-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLayoutMerger.cs
58 lines (57 loc) · 3.12 KB
/
LayoutMerger.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Collections.Generic;
using System.Linq;
using DevExpress.DashboardCommon;
namespace DashboardMergeExample {
public static class LayoutMerger {
public static void MergeLayout(DashboardLayoutGroup layoutRoot, string newPageName, DashboardMerger dashboardMerger) {
TabContainerDashboardItem tabContainer = dashboardMerger.TabContainer;
Dashboard targetDashboard = dashboardMerger.TargetDashboard;
IDictionary<string, string> dashboardItemNamesMap = dashboardMerger.DashboardItemNamesMap;
IDictionary<string, string> groupNamesMap = dashboardMerger.GroupNamesMap;
IEnumerable<DashboardItem> newItems = dashboardMerger.NewItems;
DashboardTabPage newTabPage = tabContainer.CreateTabPage();
DashboardLayoutTabPage layoutPage = new DashboardLayoutTabPage(newTabPage);
foreach(DashboardLayoutNode node in layoutRoot.GetNodesRecursive()) {
if(node.DashboardItem != null) {
DashboardItemGroup group = node.DashboardItem as DashboardItemGroup;
if(group != null) {
string groupComponentName = group.ComponentName;
string newGroupComponentName = String.Empty;
if(!groupNamesMap.TryGetValue(group.ComponentName, out newGroupComponentName)) {
newGroupComponentName = group.ComponentName;
}
node.DashboardItem = newItems.Single(itm => itm.ComponentName == newGroupComponentName);
} else {
DashboardItem item = node.DashboardItem;
string newItemName = String.Empty;
if(!dashboardItemNamesMap.TryGetValue(item.ComponentName, out newItemName)) {
newItemName = item.ComponentName;
}
node.DashboardItem = newItems.Single(itm => itm.ComponentName == newItemName);
}
}
}
layoutPage.ChildNodes.Add(layoutRoot);
foreach(DashboardItem item in newItems) {
if(item.ParentContainer == null) {
item.ParentContainer = newTabPage;
} else {
IDashboardItemContainer container = item.ParentContainer;
if(container is DashboardItemGroup) {
string newGroupName = String.Empty;
if(!groupNamesMap.TryGetValue(container.ComponentName, out newGroupName)) {
newGroupName = container.ComponentName;
}
item.ParentContainer = targetDashboard.Groups[newGroupName];
} else {
item.ParentContainer = newTabPage;
}
}
}
DashboardLayoutTabContainer layoutTabContainer = targetDashboard.LayoutRoot.FindRecursive(tabContainer);
layoutTabContainer.ChildNodes.Add(layoutPage);
newTabPage.Name = newPageName;
}
}
}