/// <summary> /// Transfers the windows manager contents after desealization has finished /// </summary> /// <param name="windowsManager">The windows manager.</param> private void TransferWindowsManagerContents(WindowsManager windowsManager) { windowsManager.Clear(); // Transfer auto hide and pinned windows for all dock points); foreach (Dock dockPosition in DockPositions) { DockedWindows dockedWindows = _dockedWindows[dockPosition]; foreach (DockPane pinnedPane in dockedWindows.PinnedPanes) { windowsManager.AddPinnedWindow(pinnedPane, dockPosition); } foreach (DockPane autoHidePane in dockedWindows.AutoHidePanes) { windowsManager.AddAutoHideWindow(autoHidePane, dockPosition); } } // Transfer floating windows foreach (DockPane floatingPane in _floatingWindows) { windowsManager.AddFloatingWindow(floatingPane); } // Transfer document content switch (_rootContainer.State) { case DocumentContainerState.Empty: break; case DocumentContainerState.ContainsDocuments: List <object> documents = new List <object>(_rootContainer.Documents); _rootContainer.Clear(); foreach (object document in documents) { if (document is DocumentContent) { DocumentContent documentContent = (document as DocumentContent); documentContent.DetachDockPane(); windowsManager.DocumentContainer.AddDocument(documentContent.DockPane); } } break; case DocumentContainerState.SplitHorizontally: TransferDocumentGrid(windowsManager, true); break; case DocumentContainerState.SplitVertically: TransferDocumentGrid(windowsManager, false); break; default: throw new ArgumentOutOfRangeException(); } }
/// <summary> /// Reads the pinned panes. /// </summary> private void ReadPinnedPanes() { foreach (Dock dock in DockPositions) { DockedWindows dockedWindows = _dockedWindows[dock]; foreach (DockPane dockpane in ReadPinnedPanes(dock)) { dockedWindows.PinnedPanes.Add(dockpane); } } }
/// <summary> /// Deserializes the specified windows manager from the stream. /// </summary> /// <param name="stream">The stream.</param> /// <param name="windowsManager">The windows manager.</param> /// <exception cref="ArgumentNullException">stream or windowsManager are null</exception> /// <exception cref="InvalidOperationException">stream is not readable</exception> public void Deserialize(Stream stream, WindowsManager windowsManager) { Validate.NotNull(stream, "stream"); Validate.NotNull(windowsManager, "windowsManager"); Validate.Assert <InvalidOperationException>(stream.CanRead); _dockedWindows = new Dictionary <Dock, DockedWindows>(); _floatingWindows = new List <DockPane>(); _rootContainer = null; DockPositions.ForEach(dock => _dockedWindows[dock] = new DockedWindows()); // Initialize stream InitializeStream(stream); // Navigate windows manager NavigateWindowsManager(); // Finalize deserialization FinalizeDeserialization(); // Transfer contents to windows manager TransferWindowsManagerContents(windowsManager); }