private void RestoreWorkspaceLayout(WorkspaceLayout layout) { if (null == View) { return; } View.WidgetDockManager.RestoreLayoutFromStream(new MemoryStream(layout.DockingLayout)); var instances = new List <IWidget>(); foreach (var widget in layout.Widgets) { var widgetInstance = Dashboard.CreateWidget(Type.GetType(widget.Type), widget.ViewModelId).Result; if (null == widgetInstance) { throw new MissingWidgetException(widget.Type); } widgetInstance.ParentName = widget.ParentName; widgetInstance.GridsLayout = widget.GridsLayout; widgetInstance.PivotGridsLayout = widget.PivotGridsLayout; widgetInstance.DockId = widget.DockId; instances.Add(widgetInstance); } Widgets.AddRange(instances, false); VisualTreeWalker <LayoutPanel> .Execute(View, FillPanel, instances); RestoreFloatingWidgets(); }
public async Task LoadLayout(WorkspaceLayout providedLayout = null) { Widgets.Clear(); var layout = providedLayout ?? await FindRelevantLayout(); if (null == layout) { return; } RestoreWorkspaceLayout(layout); RestoreGridLayouts(layout.Widgets); }
public WorkspaceLayout GetCurrentLayout() { var processedPanels = new List <LayoutPanel>(); VisualTreeWalker <LayoutPanel> .Execute(View, SetNameOnPanel); View.WidgetDockManager.ClosedPanels.Clear(); var layout = new WorkspaceLayout { Widgets = Widgets.Select(y => y.GetDescriptor()).ToList() }; var layoutId = DateTime.Now.Ticks; VisualTreeWalker <LayoutPanel> .Execute(View, layoutPanel => { var widget = layoutPanel.DataContext as IWidget; if (null == widget) { return; } if (processedPanels.Contains(layoutPanel)) { return; } processedPanels.Add(layoutPanel); layoutPanel.Name = widget.ParentName; if (widget.AllowGridSaveLayout) { VisualTreeWalker <GridControl> .Execute(widget.View, b => { using (var ms = new MemoryStream()) { b.SaveLayoutToStream(ms); ms.Position = 0; widget.GridsLayout.RemoveAll(y => y.GridLayoutId != layoutId); widget.GridsLayout.Add(new GridLayoutItem() { GridLayoutId = layoutId, Layout = ms.ToArray(), WidgetId = widget.DockId } ); } }); VisualTreeWalker <PivotGridControl> .Execute(widget.View, b => { using (var ms = new MemoryStream()) { b.SaveLayoutToStream(ms); ms.Position = 0; widget.PivotGridsLayout.RemoveAll(y => y.GridLayoutId != layoutId); widget.PivotGridsLayout.Add(new GridLayoutItem() { GridLayoutId = layoutId, Layout = ms.ToArray(), WidgetId = widget.DockId }); } }); } }); SaveFloatingWidgetsGridLayouts(); using (var ms = new MemoryStream()) { View.WidgetDockManager.SaveLayoutToStream(ms); ms.Position = 0; layout.DockingLayout = ms.ToArray(); } return(layout); }