/// <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>
        /// 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);
        }