private void NavigateDocumentContainer(DocumentContainer documentContainer) { InitializeDocumentContainer(documentContainer); switch (documentContainer.State) { case DocumentContainerState.Empty: // Do nothing break; case DocumentContainerState.ContainsDocuments: WriteDocuments(documentContainer, documentContainer.Documents.OfType <DocumentContent>()); break; case DocumentContainerState.SplitHorizontally: NavigateDocumentGrid(documentContainer.Content as Grid); break; case DocumentContainerState.SplitVertically: NavigateDocumentGrid(documentContainer.Content as Grid); break; default: throw new ArgumentOutOfRangeException(); } FinalizeDocumentContainer(documentContainer); }
/// <summary> /// Navigates the document container /// </summary> /// <param name="documentContainer">The document container.</param> private void NavigateDocumentContainer(DocumentContainer documentContainer) { DocumentContainerState state = InitializeDocumentContainer(documentContainer); switch (state) { case DocumentContainerState.Empty: // Do Nothing break; case DocumentContainerState.ContainsDocuments: ReadDocuments(documentContainer); break; case DocumentContainerState.SplitHorizontally: NavigateDocumentGrid(documentContainer, true); break; case DocumentContainerState.SplitVertically: NavigateDocumentGrid(documentContainer, false); break; default: throw new ArgumentOutOfRangeException(); } FinalizeDocumentContainer(); }
/// <summary> /// Adds the document containers by splitting the current document container /// </summary> /// <param name="childContainers">The child containers.</param> /// <param name="isHorizontal">if set to <c>true</c> indicates horizontal orientation otherwise vertical orientation</param> /// <exception cref="ArgumentNullException">childContainers is null</exception> /// <exception cref="InvalidOperationException"> /// Current document container is not empty or /// current state is not SplitHorizontally or SplitVertically /// childContainers is empty or /// childContainers has more than two containers /// or the containers overlap with each other /// </exception> public void AddDocumentContainers(IEnumerable <DocumentContainer> childContainers, bool isHorizontal) { Validate.Assert <InvalidOperationException>(Content == null); Validate.NotNull(childContainers, "childContainers"); List <DocumentContainer> childContainerList = new List <DocumentContainer>(childContainers); Validate.Assert <InvalidOperationException>((childContainerList.Count > 0) && (childContainerList.Count < 3)); Grid splitGrid = isHorizontal ? SplitHorizontally(true) : SplitVertically(true); splitGrid.Children.RemoveAt(1); int position = -1; for (int i = 0; i < 2; i++) { DocumentContainer childContainer; if (i < childContainerList.Count) { childContainer = childContainerList[i]; int row = Grid.GetRow(childContainer); int column = Grid.GetColumn(childContainer); if (isHorizontal) { Validate.Assert <InvalidOperationException>((row == 0) && (position != column)); position = column; } else { Validate.Assert <InvalidOperationException>((column == 0) && (position != row)); position = row; } } else { childContainer = new DocumentContainer(); int row = 0; int column = 0; if (isHorizontal) { column = position != 0 ? 0 : 2; } else { row = position != 0 ? 0 : 2; } Grid.SetColumn(childContainer, column); Grid.SetRow(childContainer, row); } splitGrid.Children.Add(childContainer); } }
/// <summary> /// Initializes the document container. /// </summary> /// <param name="documentContainer">The document container.</param> protected override void InitializeDocumentContainer(DocumentContainer documentContainer) { ValidateStackNotEmpty(); XmlElement documentContainerElement = _document.CreateElement("DocumentContainer"); documentContainerElement.SetAttribute("State", Enum.GetName(typeof(DocumentContainerState), documentContainer.State)); documentContainerElement.SetAttribute("Row", Grid.GetRow(documentContainer).ToString()); documentContainerElement.SetAttribute("Column", Grid.GetColumn(documentContainer).ToString()); _elementStack.Peek().AppendChild(documentContainerElement); _elementStack.Push(documentContainerElement); }
/// <summary> /// Reads the document containers within current split and sets the State as well as dimensions for read DocumentContainer(s) /// </summary> /// <returns>Read document containers</returns> protected override IEnumerable <DocumentContainer> ReadDocumentContainers() { ValidateStackNotEmpty(); XmlElement parentElement = _elementStack.Peek(); foreach (XmlElement documentContainer in parentElement.SelectNodes("DocumentContainer").OfType <XmlElement>()) { DocumentContainer container = new DocumentContainer(); _documentContainerToDefinitionMapping[container] = documentContainer; yield return(container); } }
/// <summary> /// Writes the documents within a document container /// </summary> /// <param name="container">The container.</param> /// <param name="documents">The documents.</param> protected override void WriteDocuments(DocumentContainer container, IEnumerable <DocumentContent> documents) { ValidateStackNotEmpty(); XmlElement documentContainerElement = _elementStack.Peek(); Validate.Assert <InvalidOperationException>(documentContainerElement.Name == "DocumentContainer"); foreach (DocumentContent document in documents) { XmlElement documentElement = _document.CreateElement("Document"); documentElement.SetAttribute("Data", _documentWriter(document)); documentContainerElement.AppendChild(documentElement); } }
/// <summary> /// Initializes the split. /// </summary> /// <param name="parentContainer">The parent container.</param> protected override void InitializeSplit(DocumentContainer parentContainer) { ValidateStackNotEmpty(); XmlElement documentContainerElement = _elementStack.Peek(); Validate.Assert <InvalidOperationException>(documentContainerElement.Name == "DocumentContainer"); XmlElement splitElement = documentContainerElement.FirstChild as XmlElement; Validate.Assert <NullReferenceException>(splitElement != null); Validate.Assert <InvalidOperationException>(splitElement.Name == "Split"); _elementStack.Push(splitElement); }
/// <summary> /// Initializes the document container. /// </summary> /// <param name="documentContainer">The document container.</param> /// <returns>Document container state</returns> protected override DocumentContainerState InitializeDocumentContainer(DocumentContainer documentContainer) { ValidateStackNotEmpty(); XmlElement documentContainerElement; Validate.Assert<InvalidOperationException>(_documentContainerToDefinitionMapping.TryGetValue(documentContainer, out documentContainerElement) && (documentContainerElement.Name == "DocumentContainer")); Grid.SetRow(documentContainer, int.Parse(documentContainerElement.GetAttribute("Row"))); Grid.SetColumn(documentContainer, int.Parse(documentContainerElement.GetAttribute("Column"))); _elementStack.Push(documentContainerElement); return (DocumentContainerState)Enum.Parse(typeof(DocumentContainerState), documentContainerElement.GetAttribute("State")); }
/// <summary> /// Reads the documents for current document container /// </summary> /// <param name="documentContainer">The document container.</param> protected override void ReadDocuments(DocumentContainer documentContainer) { ValidateStackNotEmpty(); XmlElement documentContainerElement = _elementStack.Peek(); Validate.Assert <InvalidOperationException>(documentContainerElement.Name == "DocumentContainer"); foreach (XmlElement documentElement in documentContainerElement.SelectNodes(@"Document").OfType <XmlElement>()) { DockPane dockPane = new DockPane(); _dockPaneReader(dockPane, documentElement.GetAttribute("Data")); documentContainer.AddDocument(dockPane); } }
/// <summary> /// Navigates the document grid. /// </summary> /// <param name="parentContainer">The parent container.</param> /// <param name="isHorizontal">if set to <c>true</c> orientation is horizontal otherwise orientation is vertical</param> private void NavigateDocumentGrid(DocumentContainer parentContainer, bool isHorizontal) { InitializeSplit(parentContainer); List <DocumentContainer> childContainers = new List <DocumentContainer>(); foreach (DocumentContainer documentContainer in ReadDocumentContainers()) { NavigateDocumentContainer(documentContainer); childContainers.Add(documentContainer); } parentContainer.AddDocumentContainers(childContainers, isHorizontal); FinalizeSplit(); }
/// <summary> /// Initializes the document container. /// </summary> /// <param name="documentContainer">The document container.</param> /// <returns>Document container state</returns> protected override DocumentContainerState InitializeDocumentContainer(DocumentContainer documentContainer) { ValidateStackNotEmpty(); XmlElement documentContainerElement; Validate.Assert <InvalidOperationException>(_documentContainerToDefinitionMapping.TryGetValue(documentContainer, out documentContainerElement) && (documentContainerElement.Name == "DocumentContainer")); Grid.SetRow(documentContainer, int.Parse(documentContainerElement.GetAttribute("Row"))); Grid.SetColumn(documentContainer, int.Parse(documentContainerElement.GetAttribute("Column"))); _elementStack.Push(documentContainerElement); return((DocumentContainerState)Enum.Parse(typeof(DocumentContainerState), documentContainerElement.GetAttribute("State"))); }
/// <summary> /// Splits the content vertically /// </summary> /// <param name="contentIsInTopSplit">if set to <c>true</c>content is in top split.</param> /// <returns></returns> private Grid SplitVertically(bool contentIsInTopSplit) { Grid grid = new Grid(); grid.RowDefinitions.Add(new RowDefinition()); RowDefinition splitterRowDefinition = new RowDefinition(); splitterRowDefinition.Height = GridLength.Auto; grid.RowDefinitions.Add(splitterRowDefinition); grid.RowDefinitions.Add(new RowDefinition()); GridSplitter splitter = new GridSplitter(); splitter.HorizontalAlignment = HorizontalAlignment.Stretch; splitter.Height = 4; splitter.ResizeDirection = GridResizeDirection.Rows; splitter.ResizeBehavior = GridResizeBehavior.PreviousAndNext; Grid.SetRow(splitter, 1); grid.Children.Add(splitter); UIElement content = Content as UIElement; if (content == null) { content = new DocumentContainer(); } if (contentIsInTopSplit) { Grid.SetRow(content, 0); } else { Grid.SetRow(content, 2); } Content = grid; grid.Children.Add(content); State = DocumentContainerState.SplitVertically; return(grid); }
/// <summary> /// Splits the content horizontally /// </summary> /// <param name="contentIsInRightSplit">if set to <c>true</c>content is in right split.</param> /// <returns></returns> private Grid SplitHorizontally(bool contentIsInRightSplit) { Grid grid = new Grid(); grid.ColumnDefinitions.Add(new ColumnDefinition()); ColumnDefinition splitterColumnDefinition = new ColumnDefinition(); splitterColumnDefinition.Width = GridLength.Auto; grid.ColumnDefinitions.Add(splitterColumnDefinition); grid.ColumnDefinitions.Add(new ColumnDefinition()); GridSplitter splitter = new GridSplitter(); splitter.VerticalAlignment = VerticalAlignment.Stretch; splitter.Width = 4; splitter.ResizeDirection = GridResizeDirection.Columns; splitter.ResizeBehavior = GridResizeBehavior.PreviousAndNext; Grid.SetColumn(splitter, 1); grid.Children.Add(splitter); UIElement content = Content as UIElement; if (content == null) { content = new DocumentContainer(); } if (contentIsInRightSplit) { Grid.SetColumn(content, 0); } else { Grid.SetColumn(content, 2); } Content = grid; grid.Children.Add(content); State = DocumentContainerState.SplitHorizontally; return(grid); }
/// <summary> /// Clears the windows manager /// </summary> public void Clear() { Action <Panel> clearAction = panel => panel.Children.Clear(); clearAction(TopPinnedWindows); clearAction(TopWindowHeaders); clearAction(BottomPinnedWindows); clearAction(BottomWindowHeaders); clearAction(LeftPinnedWindows); clearAction(LeftWindowHeaders); clearAction(RightPinnedWindows); clearAction(RightWindowHeaders); clearAction(FloatingPanel); clearAction(PopupArea); DocumentContainer.Content = null; DocumentContainer.Clear(); _dockPaneStateMonitorList.Clear(); _popupTimer.Stop(); }
/// <summary> /// Splits and adds document to the split window /// </summary> /// <param name="pane">The pane</param> /// <param name="dockPoint">The dock point</param> private void SplitAndAddDocument(DockPane pane, ContentDockPoint dockPoint) { DocumentContainer container = new DocumentContainer(); Grid splitGrid = null; switch (dockPoint) { case ContentDockPoint.Top: splitGrid = SplitVertically(false); Grid.SetRow(container, 0); break; case ContentDockPoint.Left: splitGrid = SplitHorizontally(false); Grid.SetColumn(container, 0); break; case ContentDockPoint.Right: splitGrid = SplitHorizontally(true); Grid.SetColumn(container, 2); break; case ContentDockPoint.Bottom: splitGrid = SplitVertically(true); Grid.SetRow(container, 2); break; case ContentDockPoint.Content: AddDocument(pane); return; break; default: break; } container.AddDocument(pane); splitGrid.Children.Add(container); }
/// <summary> /// Determines whether content can be merged at the specified dock point /// </summary> /// <param name="dockPoint">The dock point.</param> /// <param name="targetContainer">If merge can be performed, this is the target container for merge; otherwise this will be null</param> /// <returns> /// <c>true</c> if content can be merged at the specified dock point; otherwise, <c>false</c>. /// </returns> private bool CanMergeContent(ContentDockPoint dockPoint, out DocumentContainer targetContainer) { Grid contentGrid = Content as Grid; targetContainer = null; if (contentGrid == null) { return(false); } foreach (object item in contentGrid.Children) { if (item is DocumentContainer) { DocumentContainer container = item as DocumentContainer; if (container.State == DocumentContainerState.Empty) { int column = Grid.GetColumn(container); int row = Grid.GetRow(container); if (((dockPoint == ContentDockPoint.Top) && (row == 0)) || ((dockPoint == ContentDockPoint.Bottom) && (row == 2)) || ((dockPoint == ContentDockPoint.Left) && (column == 0)) || ((dockPoint == ContentDockPoint.Right) && (column == 2))) { targetContainer = container; return(true); } } } } return(false); }
/// <summary> /// Finalizes the document container. /// </summary> /// <param name="documentContainer">The document container.</param> protected override void FinalizeDocumentContainer(DocumentContainer documentContainer) { FinalizeElement("DocumentContainer"); }
/// <summary> /// Finalizes the document container. /// </summary> /// <param name="documentContainer">The document container.</param> protected abstract void FinalizeDocumentContainer(DocumentContainer documentContainer);
private void WriteDocumentContainers(DocumentContainer documentContainer) { NavigateDocumentContainer(documentContainer); }
/// <summary> /// Splits the content vertically /// </summary> /// <param name="contentIsInTopSplit">if set to <c>true</c>content is in top split.</param> /// <returns></returns> private Grid SplitVertically(bool contentIsInTopSplit) { Grid grid = new Grid(); grid.RowDefinitions.Add(new RowDefinition()); RowDefinition splitterRowDefinition = new RowDefinition(); splitterRowDefinition.Height = GridLength.Auto; grid.RowDefinitions.Add(splitterRowDefinition); grid.RowDefinitions.Add(new RowDefinition()); GridSplitter splitter = new GridSplitter(); splitter.HorizontalAlignment = HorizontalAlignment.Stretch; splitter.Height = 4; splitter.ResizeDirection = GridResizeDirection.Rows; splitter.ResizeBehavior = GridResizeBehavior.PreviousAndNext; Grid.SetRow(splitter, 1); grid.Children.Add(splitter); UIElement content = Content as UIElement; if (content == null) { content = new DocumentContainer(); } if (contentIsInTopSplit) { Grid.SetRow(content, 0); } else { Grid.SetRow(content, 2); } Content = grid; grid.Children.Add(content); State = DocumentContainerState.SplitVertically; return grid; }
/// <summary> /// Splits the content horizontally /// </summary> /// <param name="contentIsInRightSplit">if set to <c>true</c>content is in right split.</param> /// <returns></returns> private Grid SplitHorizontally(bool contentIsInRightSplit) { Grid grid = new Grid(); grid.ColumnDefinitions.Add(new ColumnDefinition()); ColumnDefinition splitterColumnDefinition = new ColumnDefinition(); splitterColumnDefinition.Width = GridLength.Auto; grid.ColumnDefinitions.Add(splitterColumnDefinition); grid.ColumnDefinitions.Add(new ColumnDefinition()); GridSplitter splitter = new GridSplitter(); splitter.VerticalAlignment = VerticalAlignment.Stretch; splitter.Width = 4; splitter.ResizeDirection = GridResizeDirection.Columns; splitter.ResizeBehavior = GridResizeBehavior.PreviousAndNext; Grid.SetColumn(splitter, 1); grid.Children.Add(splitter); UIElement content = Content as UIElement; if (content == null) { content = new DocumentContainer(); } if (contentIsInRightSplit) { Grid.SetColumn(content, 0); } else { Grid.SetColumn(content, 2); } Content = grid; grid.Children.Add(content); State = DocumentContainerState.SplitHorizontally; return grid; }
/// <summary> /// Merges the empty document containers /// </summary> /// <returns>New content that should be child of parent DocumentContainer</returns> private object MergeEmptyDocumentContainers() { object newChild = null; switch (State) { case DocumentContainerState.ContainsDocuments: if (Documents.Count == 0) { State = DocumentContainerState.Empty; } else { newChild = this; } break; case DocumentContainerState.SplitHorizontally: case DocumentContainerState.SplitVertically: Grid contentGrid = Content as Grid; if (contentGrid != null) { DocumentContainer firstChild = contentGrid.Children[1] as DocumentContainer; Validate.NotNull(firstChild, "firstChild"); DocumentContainer secondChild = contentGrid.Children[2] as DocumentContainer; Validate.NotNull(secondChild, "secondChild"); object firstReduceResult = ReduceChild(firstChild); object secondReduceResult = ReduceChild(secondChild); if ((firstReduceResult != null) && (secondReduceResult != null)) { newChild = this; } else if ((firstReduceResult == null) && (secondReduceResult == null)) { Content = null; State = DocumentContainerState.Empty; } else if (firstReduceResult != null) { secondChild.Clear(); newChild = this; } else /*if (secondReduceResult != null)*/ { firstChild.Clear(); newChild = this; } } break; } return(newChild); }
/// <summary> /// Writes the documents within a document container /// </summary> /// <param name="container">The container.</param> /// <param name="documents">The documents.</param> protected abstract void WriteDocuments(DocumentContainer container, IEnumerable<DocumentContent> documents);
/// <summary> /// Reads the documents for current document container /// </summary> /// <param name="documentContainer">The document container.</param> protected abstract void ReadDocuments(DocumentContainer documentContainer);
/// <summary> /// Reads the document containers within current split and sets the State as well as dimensions for read DocumentContainer(s) /// </summary> /// <returns>Read document containers</returns> protected override IEnumerable<DocumentContainer> ReadDocumentContainers() { ValidateStackNotEmpty(); XmlElement parentElement = _elementStack.Peek(); foreach(XmlElement documentContainer in parentElement.SelectNodes("DocumentContainer").OfType<XmlElement>()) { DocumentContainer container = new DocumentContainer(); _documentContainerToDefinitionMapping[container] = documentContainer; yield return container; } }
private void NavigateDocumentContainer(DocumentContainer documentContainer) { InitializeDocumentContainer(documentContainer); switch (documentContainer.State) { case DocumentContainerState.Empty: // Do nothing break; case DocumentContainerState.ContainsDocuments: WriteDocuments(documentContainer, documentContainer.Documents.OfType<DocumentContent>()); break; case DocumentContainerState.SplitHorizontally: NavigateDocumentGrid(documentContainer.Content as Grid); break; case DocumentContainerState.SplitVertically: NavigateDocumentGrid(documentContainer.Content as Grid); break; default: throw new ArgumentOutOfRangeException(); } FinalizeDocumentContainer(documentContainer); }
/// <summary> /// Initializes the document container. /// </summary> /// <param name="documentContainer">The document container.</param> protected abstract void InitializeDocumentContainer(DocumentContainer documentContainer);
/// <summary> /// Initializes the split. /// </summary> /// <param name="parentContainer">The parent container.</param> protected override void InitializeSplit(DocumentContainer parentContainer) { ValidateStackNotEmpty(); XmlElement documentContainerElement = _elementStack.Peek(); Validate.Assert<InvalidOperationException>(documentContainerElement.Name == "DocumentContainer"); XmlElement splitElement = documentContainerElement.FirstChild as XmlElement; Validate.Assert<NullReferenceException>(splitElement != null); Validate.Assert<InvalidOperationException>(splitElement.Name == "Split"); _elementStack.Push(splitElement); }
/// <summary> /// Writes the documents within a document container /// </summary> /// <param name="container">The container.</param> /// <param name="documents">The documents.</param> protected abstract void WriteDocuments(DocumentContainer container, IEnumerable <DocumentContent> documents);
/// <summary> /// Reads the documents for current document container /// </summary> /// <param name="documentContainer">The document container.</param> protected override void ReadDocuments(DocumentContainer documentContainer) { ValidateStackNotEmpty(); XmlElement documentContainerElement = _elementStack.Peek(); Validate.Assert<InvalidOperationException>(documentContainerElement.Name == "DocumentContainer"); foreach (XmlElement documentElement in documentContainerElement.SelectNodes(@"Document").OfType<XmlElement>()) { DockPane dockPane = new DockPane(); _dockPaneReader(dockPane, documentElement.GetAttribute("Data")); documentContainer.AddDocument(dockPane); } }
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { switch (connectionId) { case 1: this.UserControl = ((MixModes.Synergy.VisualFramework.Windows.WindowsManager)(target)); return; case 2: this.LayoutRoot = ((System.Windows.Controls.Grid)(target)); return; case 3: this.TopWindowHeaders = ((System.Windows.Controls.StackPanel)(target)); return; case 4: this.LeftWindowHeaders = ((System.Windows.Controls.StackPanel)(target)); return; case 5: this.RightWindowHeaders = ((System.Windows.Controls.StackPanel)(target)); return; case 6: this.BottomWindowHeaders = ((System.Windows.Controls.StackPanel)(target)); return; case 7: this.LeftPinnedWindows = ((System.Windows.Controls.DockPanel)(target)); return; case 8: this.RightPinnedWindows = ((System.Windows.Controls.DockPanel)(target)); return; case 9: this.TopPinnedWindows = ((System.Windows.Controls.DockPanel)(target)); return; case 10: this.BottomPinnedWindows = ((System.Windows.Controls.DockPanel)(target)); return; case 11: this.DocumentContainer = ((MixModes.Synergy.VisualFramework.Windows.DocumentContainer)(target)); return; case 12: this.DockingIllustrationPanel = ((System.Windows.Controls.DockPanel)(target)); return; case 13: this.PopupArea = ((System.Windows.Controls.DockPanel)(target)); return; case 14: this.FloatingPanel = ((System.Windows.Controls.Canvas)(target)); return; case 15: this.DockingPanel = ((System.Windows.Controls.DockPanel)(target)); return; } this._contentLoaded = true; }
/// <summary> /// Adds the document containers by splitting the current document container /// </summary> /// <param name="childContainers">The child containers.</param> /// <param name="isHorizontal">if set to <c>true</c> indicates horizontal orientation otherwise vertical orientation</param> /// <exception cref="ArgumentNullException">childContainers is null</exception> /// <exception cref="InvalidOperationException"> /// Current document container is not empty or /// current state is not SplitHorizontally or SplitVertically /// childContainers is empty or /// childContainers has more than two containers /// or the containers overlap with each other /// </exception> public void AddDocumentContainers(IEnumerable<DocumentContainer> childContainers, bool isHorizontal) { Validate.Assert<InvalidOperationException>(Content == null); Validate.NotNull(childContainers, "childContainers"); List<DocumentContainer> childContainerList = new List<DocumentContainer>(childContainers); Validate.Assert<InvalidOperationException>((childContainerList.Count > 0) && (childContainerList.Count < 3)); Grid splitGrid = isHorizontal ? SplitHorizontally(true) : SplitVertically(true); splitGrid.Children.RemoveAt(1); int position = -1; for (int i = 0; i < 2; i++) { DocumentContainer childContainer; if (i < childContainerList.Count) { childContainer = childContainerList[i]; int row = Grid.GetRow(childContainer); int column = Grid.GetColumn(childContainer); if (isHorizontal) { Validate.Assert<InvalidOperationException>((row == 0) && (position != column)); position = column; } else { Validate.Assert<InvalidOperationException>((column == 0) && (position != row)); position = row; } } else { childContainer = new DocumentContainer(); int row = 0; int column = 0; if (isHorizontal) { column = position != 0 ? 0 : 2; } else { row = position != 0 ? 0 : 2; } Grid.SetColumn(childContainer, column); Grid.SetRow(childContainer, row); } splitGrid.Children.Add(childContainer); } }
/// <summary> /// Initializes the split. /// </summary> /// <param name="parentContainer">The parent container.</param> protected abstract void InitializeSplit(DocumentContainer parentContainer);
/// <summary> /// Determines whether content can be merged at the specified dock point /// </summary> /// <param name="dockPoint">The dock point.</param> /// <param name="targetContainer">If merge can be performed, this is the target container for merge; otherwise this will be null</param> /// <returns> /// <c>true</c> if content can be merged at the specified dock point; otherwise, <c>false</c>. /// </returns> private bool CanMergeContent(ContentDockPoint dockPoint, out DocumentContainer targetContainer) { Grid contentGrid = Content as Grid; targetContainer = null; if (contentGrid == null) { return false; } foreach (object item in contentGrid.Children) { if (item is DocumentContainer) { DocumentContainer container = item as DocumentContainer; if (container.State == DocumentContainerState.Empty) { int column = Grid.GetColumn(container); int row = Grid.GetRow(container); if (((dockPoint == ContentDockPoint.Top) && (row == 0)) || ((dockPoint == ContentDockPoint.Bottom) && (row == 2)) || ((dockPoint == ContentDockPoint.Left) && (column == 0)) || ((dockPoint == ContentDockPoint.Right) && (column == 2))) { targetContainer = container; return true; } } } } return false; }
/// <summary> /// Initializes the document container. /// </summary> /// <param name="documentContainer">The document container.</param> /// <returns>Document container state</returns> protected abstract DocumentContainerState InitializeDocumentContainer(DocumentContainer documentContainer);
/// <summary> /// Splits and adds document to the split window /// </summary> /// <param name="pane">The pane</param> /// <param name="dockPoint">The dock point</param> private void SplitAndAddDocument(DockPane pane, ContentDockPoint dockPoint) { DocumentContainer container = new DocumentContainer(); Grid splitGrid = null; switch (dockPoint) { case ContentDockPoint.Top: splitGrid = SplitVertically(false); Grid.SetRow(container, 0); break; case ContentDockPoint.Left: splitGrid = SplitHorizontally(false); Grid.SetColumn(container, 0); break; case ContentDockPoint.Right: splitGrid = SplitHorizontally(true); Grid.SetColumn(container, 2); break; case ContentDockPoint.Bottom: splitGrid = SplitVertically(true); Grid.SetRow(container, 2); break; case ContentDockPoint.Content: AddDocument(pane); return; default: break; } container.AddDocument(pane); splitGrid.Children.Add(container); }