コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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();
        }
コード例 #3
0
        /// <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);
            }
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
            }
        }
コード例 #6
0
        /// <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);
            }
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        /// <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"));
        }
コード例 #9
0
        /// <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);
            }
        }
コード例 #10
0
        /// <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();
        }
コード例 #11
0
        /// <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")));
        }
コード例 #12
0
        /// <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);
        }
コード例 #13
0
        /// <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);
        }
コード例 #14
0
        /// <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();
        }
コード例 #15
0
        /// <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);
        }
コード例 #16
0
        /// <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);
        }
コード例 #17
0
 /// <summary>
 /// Finalizes the document container.
 /// </summary>
 /// <param name="documentContainer">The document container.</param>
 protected override void FinalizeDocumentContainer(DocumentContainer documentContainer)
 {
     FinalizeElement("DocumentContainer");
 }
コード例 #18
0
 /// <summary>
 /// Finalizes the document container.
 /// </summary>
 /// <param name="documentContainer">The document container.</param>
 protected abstract void FinalizeDocumentContainer(DocumentContainer documentContainer);
コード例 #19
0
 private void WriteDocumentContainers(DocumentContainer documentContainer)
 {
     NavigateDocumentContainer(documentContainer);
 }
コード例 #20
0
        /// <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;
        }
コード例 #21
0
        /// <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;
        }
コード例 #22
0
        /// <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);
        }
コード例 #23
0
 /// <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);
コード例 #24
0
 /// <summary>
 /// Reads the documents for current document container
 /// </summary>
 /// <param name="documentContainer">The document container.</param>
 protected abstract void ReadDocuments(DocumentContainer documentContainer);
コード例 #25
0
 /// <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;
     }
 }
コード例 #26
0
        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);
        }
コード例 #27
0
 private void WriteDocumentContainers(DocumentContainer documentContainer)
 {
     NavigateDocumentContainer(documentContainer);
 }
コード例 #28
0
 /// <summary>
 /// Initializes the document container.
 /// </summary>
 /// <param name="documentContainer">The document container.</param>
 protected abstract void InitializeDocumentContainer(DocumentContainer documentContainer);
コード例 #29
0
 /// <summary>
 /// Finalizes the document container.
 /// </summary>
 /// <param name="documentContainer">The document container.</param>
 protected abstract void FinalizeDocumentContainer(DocumentContainer documentContainer);
コード例 #30
0
        /// <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);
        }
コード例 #31
0
 /// <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);
コード例 #32
0
        /// <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);
            }
        }
コード例 #33
0
 /// <summary>
 /// Initializes the document container.
 /// </summary>
 /// <param name="documentContainer">The document container.</param>
 protected abstract void InitializeDocumentContainer(DocumentContainer documentContainer);
コード例 #34
0
        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;
        }
コード例 #35
0
        /// <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);
            }
        }
コード例 #36
0
 /// <summary>
 /// Initializes the split.
 /// </summary>
 /// <param name="parentContainer">The parent container.</param>
 protected abstract void InitializeSplit(DocumentContainer parentContainer);
コード例 #37
0
        /// <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;
        }
コード例 #38
0
 /// <summary>
 /// Initializes the document container.
 /// </summary>
 /// <param name="documentContainer">The document container.</param>
 /// <returns>Document container state</returns>
 protected abstract DocumentContainerState InitializeDocumentContainer(DocumentContainer documentContainer);
コード例 #39
0
        /// <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);
        }