public DevDesktop.Workspace.FreeWorkspaceLayout GetWorkspaceLayout(Guid workspaceGuid, string workspaceLayoutName) { DevDesktop.Workspace.FreeWorkspaceLayout layout = null; DevCore.Settings.SettingsGuidValue paletteGuidValue = null; DevCore.Settings.SettingsNode workspaceNode = null; DevCore.Settings.ApplicationSettings appSettings = default(DevCore.Settings.ApplicationSettings); bool isCanvas = false; bool isStacked = false; appSettings = DevCore.Application.Settings; //// Resolve the layout name //if (!e.WorkspaceConfiguration.TryGetValue("LAYOUTNAME", e.WorkspaceLayoutName)) //{ // e.WorkspaceLayoutName = "Default"; //} // Resolve the stored layout if (appSettings.TryGetNode(string.Format("Workspaces\\{0}\\{1}", workspaceGuid, workspaceLayoutName), ref workspaceNode)) { if (workspaceNode.Nodes.Count > 0) { layout = new DevDesktop.Workspace.FreeWorkspaceLayout(workspaceGuid, workspaceNode.GetStringValue("WorkspaceName", string.Empty).Value); foreach (DevCore.Settings.SettingsNode areaNode in workspaceNode.Nodes) { DevDesktop.Workspace.FreeWorkspaceArea layoutArea = default(DevDesktop.Workspace.FreeWorkspaceArea); DevDesktop.Workspace.WorkspacePanelBase layoutPanel = default(DevDesktop.Workspace.WorkspacePanelBase); DevDesktop.Workspace.WorkspaceComponentExtents extents = default(DevDesktop.Workspace.WorkspaceComponentExtents); DevDesktop.Workspace.WorkspaceAreaLocation location = default(DevDesktop.Workspace.WorkspaceAreaLocation); // Do we have the canvas area? if (areaNode.Key == "area:canvas") { isCanvas = true; } else { isCanvas = false; } // Do we have a stacked area isStacked = areaNode.GetBooleanValue("IsStacked", false).Value; // Resolve the extents if (isCanvas) { extents = new DevDesktop.Workspace.WorkspaceComponentExtents(0); } else { extents = new DevDesktop.Workspace.WorkspaceComponentExtents(areaNode.GetIntegerValue("RelativeExtent", 100).Value); } // Resolve the location switch (areaNode.GetStringValue("Location", string.Empty).Value) { case "Left": location = DevDesktop.Workspace.WorkspaceAreaLocation.Left; break; case "Right": location = DevDesktop.Workspace.WorkspaceAreaLocation.Right; break; case "Bottom": location = DevDesktop.Workspace.WorkspaceAreaLocation.Bottom; break; case "Top": location = DevDesktop.Workspace.WorkspaceAreaLocation.Top; break; default: location = DevDesktop.Workspace.WorkspaceAreaLocation.Undefined; break; } layoutArea = new DevDesktop.Workspace.FreeWorkspaceArea(extents, location); layout.AddArea(layoutArea, isCanvas, isStacked); // Add the panels to the area foreach (DevCore.Settings.SettingsNode panelNode in areaNode.Nodes) { layoutPanel = this.AddPanelToWorkspace(panelNode); if (layoutPanel != null) { layoutArea.Panels.Add(layoutPanel); } } } } } return(layout); }
public void PersistWorkspaceLayout(DevDesktop.Frame.ApplicationWorkspace applicationWorkspace) { DevDesktop.Workspace.FreeWorkspaceLayout layout = null; DevCore.Settings.ApplicationSettings appSettings = default(DevCore.Settings.ApplicationSettings); // Bail out if we are resetting the workspace //if (_resettingWorkspace) //{ // return; //} // Get the current layout applicationWorkspace.TryGetCurrentLayout(ref layout); layout.ReIndex(); //Don't persist if the layout is empty if (layout.Areas.Count > 0) { // Get the application settings appSettings = DevCore.Application.Settings; DevCore.Settings.SettingsNode workspacesNode = default(DevCore.Settings.SettingsNode); workspacesNode = appSettings.Nodes.GetOrAdd("Workspaces"); workspacesNode.Location = "Workspaces\\User.index"; DevCore.Settings.SettingsNode workspaceNode = default(DevCore.Settings.SettingsNode); workspaceNode = workspacesNode.Nodes.GetOrAdd(layout.ModuleGuid.ToString()); workspaceNode.Location = string.Format("User.{0}", layout.ModuleName.ToLower()); workspaceNode.SetOrAddValue("WorkspaceName", layout.ModuleName); DevCore.Settings.SettingsNode namedLayoutNode = default(DevCore.Settings.SettingsNode); if (layout.HasLayoutName) { namedLayoutNode = workspaceNode.Nodes.GetOrAdd(layout.LayoutName); } else { namedLayoutNode = workspaceNode.Nodes.GetOrAdd("Default"); } // Clear any previous definitions namedLayoutNode.Values.Clear(); namedLayoutNode.Nodes.Clear(); int areaCounter = 0; int groupCounter = 0; foreach (DevDesktop.Workspace.FreeWorkspaceArea area in layout.Areas) { DevCore.Settings.SettingsNode areaNode = default(DevCore.Settings.SettingsNode); if (area.IsCanvasArea) { areaNode = namedLayoutNode.GetOrAddNode("area:canvas"); } else { areaCounter += 1; areaNode = namedLayoutNode.GetOrAddNode("area:" + areaCounter); areaNode.SetOrAddValue("RelativeExtent", area.InitialExtents.RelativeExtent); } areaNode.SetOrAddValue("Location", area.Location.ToString()); areaNode.SetOrAddValue("IsStacked", area.IsStacked); // Add the panels foreach (DevDesktop.Workspace.WorkspacePanelBase panel in area.Panels) { this.AddWorkspaceLayoutPanel(panel, areaNode, area.Panels.Count, ref groupCounter); } } } }