private IEnumerable <DockPane> GetPinnedDockPanes(WindowsManager windowsManager, Dock dock) { DockPanel dockPanel; switch (dock) { case Dock.Top: dockPanel = windowsManager.TopPinnedWindows; break; case Dock.Bottom: dockPanel = windowsManager.BottomPinnedWindows; break; case Dock.Left: dockPanel = windowsManager.LeftPinnedWindows; break; default: dockPanel = windowsManager.RightPinnedWindows; break; } return((from FrameworkElement element in dockPanel.Children select element).OfType <DockPane>().OrderBy(Panel.GetZIndex)); }
public VisualPropertyPageManager(Cuisine.Windows.WindowsManager manager) { t_manager = manager; _app = PaintualUI.Code.Application.Instance; _app.ActiveContentHelper.CurrentDrawingBoardChanged += Refresh; }
/// <summary> /// Gets the dock panel from headers. /// </summary> /// <param name="windowsManager">The windows manager.</param> /// <param name="headerDock">The header dock.</param> /// <returns></returns> private IEnumerable <DockPane> GetDockPanelFromHeaders(WindowsManager windowsManager, Dock headerDock) { StackPanel headerHost; switch (headerDock) { case Dock.Top: headerHost = windowsManager.TopWindowHeaders; break; case Dock.Bottom: headerHost = windowsManager.BottomWindowHeaders; break; case Dock.Left: headerHost = windowsManager.LeftWindowHeaders; break; default: headerHost = windowsManager.RightWindowHeaders; break; } return((from FrameworkElement element in headerHost.Children select element.DataContext).OfType <DockPane>().OrderBy(Panel.GetZIndex)); }
/// <summary> /// Writes the windows manager. /// </summary> /// <param name="windowsManager">The windows manager.</param> protected override void WriteWindowsManager(WindowsManager windowsManager) { XmlElement xmlElement = _document.CreateElement("WindowsManager"); _document.AppendChild(xmlElement); _elementStack.Push(xmlElement); }
/// <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> /// Serializes the specified windows manager to the stream /// </summary> /// <remarks>Caller must be responsible for closing the stream</remarks> /// <param name="stream">Stream to serialize contents of windows manager to</param> /// <param name="windowsManager">Windows manager to serialize</param> /// <exception cref="ArgumentNullException">stream or windowsManager are null</exception> /// <exception cref="InvalidOperationException">stream is not writable</exception> public void Serialize(Stream stream, WindowsManager windowsManager) { Cuisine.Utilities.Validate.NotNull(stream, "stream"); Cuisine.Utilities.Validate.NotNull(windowsManager, "windowsManager"); Cuisine.Utilities.Validate.Assert <InvalidOperationException>(stream.CanWrite); InitializeStream(stream); NavigateWindowsManager(windowsManager); }
private void WritePinnedPanes(WindowsManager windowsManager) { InitializePinnedPanes(); Dock[] docks = new[] { Dock.Left, Dock.Top, Dock.Right, Dock.Bottom }; foreach (Dock dock in docks) { WritePinnedPanes(GetPinnedDockPanes(windowsManager, dock), dock); } FinalizePinnedPanes(); }
/// <summary> /// Transfers the document grid from _rootContainer to the main document container of specified windows manager /// </summary> /// <param name="windowsManager">The windows manager whose document content is the target of transferred child contents from _rootContainer</param> /// <param name="isHorizontal">if set to <c>true</c> indicates horizontal orientation otherwise vertical orientation</param> private void TransferDocumentGrid(WindowsManager windowsManager, bool isHorizontal) { Grid contentGrid = _rootContainer.Content as Grid; Cuisine.Utilities.Validate.Assert <ArgumentNullException>(contentGrid != null); _rootContainer.Clear(); List <DocumentContainer> documentContainers = new List <DocumentContainer>(contentGrid.Children.OfType <DocumentContainer>()); contentGrid.Children.Clear(); windowsManager.DocumentContainer.AddDocumentContainers(documentContainers, isHorizontal); }
/// <summary> /// Called when tab item is dragged /// </summary> /// <param name="sender">The sender.</param> /// <param name="args">The <see cref="System.Windows.Input.MouseButtonEventArgs"/> instance containing the event data.</param> private void OnTabItemMouseMove(object sender, RoutedEventArgs args) { if ((Mouse.LeftButton != MouseButtonState.Pressed) || (!DragStarted)) { return; } // Check for minimum distance in order to start drag Vector distance = Mouse.GetPosition(this) - DragStartPoint; if ((Math.Abs(distance.X) < SystemParameters.MinimumHorizontalDragDistance) && (Math.Abs(distance.Y) < SystemParameters.MinimumVerticalDragDistance)) { return; } DragStarted = false; WindowsManager windowsManager = this.GetLogicalParent <WindowsManager>(); TabItem currentItem = (args.OriginalSource as FrameworkElement).GetVisualParent <TabItem>(); if (currentItem == null) { return; } currentItem.Header = null; currentItem.Content = null; DocumentContent dockPaneContent = currentItem.DataContext as DocumentContent; Documents.Remove(dockPaneContent); dockPaneContent.DetachDockPane(); windowsManager.DocumentContainer.MergeEmptyDocumentContainers(); Point currentMousePoint = Mouse.GetPosition(windowsManager); DockPane pane = dockPaneContent.DockPane; Canvas.SetLeft(pane, currentMousePoint.X - pane.ActualWidth / 2); Canvas.SetTop(pane, currentMousePoint.Y); windowsManager.AddFloatingWindow(pane); }
/// <summary> /// Navigates the windows manager and serializes content /// </summary> /// <param name="windowsManager">The windows manager.</param> private void NavigateWindowsManager(WindowsManager windowsManager) { // Write windows manager itself WriteWindowsManager(windowsManager); // Write header panes WriteHeaderPanes(windowsManager); // Write pinned panes WritePinnedPanes(windowsManager); // Write floating panes WriteFloatingPanes(windowsManager); // Write document container WriteDocumentContainers(windowsManager.DocumentContainer); FinalizeSerialization(); }
/// <summary> /// Removes the document. /// </summary> /// <param name="documentContent">DocumentContent to remove</param> private void RemoveDocument(DocumentContent documentContent) { if (documentContent == null) { return; } Documents.Remove(documentContent); documentContent.DockPane.CloseCommand.Execute(null); if (Documents.Count == 0) { State = DocumentContainerState.Empty; WindowsManager parentWindowsManager = this.GetVisualParent <WindowsManager>(); if (parentWindowsManager != null) { ReduceChild(parentWindowsManager.DocumentContainer); } } }
/// <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) { Cuisine.Utilities.Validate.NotNull(stream, "stream"); Cuisine.Utilities.Validate.NotNull(windowsManager, "windowsManager"); Cuisine.Utilities.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); }
/// <summary> /// Writes the windows manager. /// </summary> /// <param name="windowsManager">The windows manager.</param> protected abstract void WriteWindowsManager(WindowsManager windowsManager);
private void WriteFloatingPanes(WindowsManager windowsManager) { IEnumerable <DockPane> floatingPanes = (from FrameworkElement element in windowsManager.FloatingPanel.Children select element).OfType <DockPane>(); WriteFloatingPanes(floatingPanes); }