public override IDock CreateLayout()
        {
            var document1 = new Document1ViewModel
            {
                Id    = "Document1",
                Title = "Document1"
            };

            var document2 = new Document2ViewModel
            {
                Id    = "Document2",
                Title = "Document2"
            };

            var leftTopTool1 = new LeftTopTool1ViewModel
            {
                Id    = "LeftTop1",
                Title = "LeftTop1"
            };

            var leftTopTool2 = new LeftTopTool2ViewModel
            {
                Id    = "LeftTop2",
                Title = "LeftTop2"
            };

            var leftBottomTool1 = new LeftBottomTool1ViewModel
            {
                Id    = "LeftBottom1",
                Title = "LeftBottom1"
            };

            var leftBottomTool2 = new LeftBottomTool2ViewModel
            {
                Id    = "LeftBottom2",
                Title = "LeftBottom2"
            };

            var rightTopTool1 = new RightTopTool1ViewModel
            {
                Id    = "RightTop1",
                Title = "RightTop1"
            };

            var rightTopTool2 = new RightTopTool2ViewModel
            {
                Id    = "RightTop2",
                Title = "RightTop2"
            };

            var rightBottomTool1 = new RightBottomTool1ViewModel
            {
                Id    = "RightBottom1",
                Title = "RightBottom1"
            };

            var rightBottomTool2 = new RightBottomTool2ViewModel
            {
                Id    = "RightBottom2",
                Title = "RightBottom2"
            };

            var mainLayout = new ProportionalDock
            {
                Id               = "MainLayout",
                Title            = "MainLayout",
                Proportion       = double.NaN,
                Orientation      = Orientation.Horizontal,
                ActiveDockable   = null,
                VisibleDockables = CreateList <IDockable>
                                   (
                    new ProportionalDock
                {
                    Id               = "LeftPane",
                    Title            = "LeftPane",
                    Proportion       = double.NaN,
                    Orientation      = Orientation.Vertical,
                    ActiveDockable   = null,
                    VisibleDockables = CreateList <IDockable>
                                       (
                        new ToolDock
                    {
                        Id               = "LeftPaneTop",
                        Title            = "LeftPaneTop",
                        Proportion       = double.NaN,
                        ActiveDockable   = leftTopTool1,
                        VisibleDockables = CreateList <IDockable>
                                           (
                            leftTopTool1,
                            leftTopTool2
                                           )
                    },
                        new SplitterDock()
                    {
                        Id    = "LeftPaneTopSplitter",
                        Title = "LeftPaneTopSplitter"
                    },
                        new ToolDock
                    {
                        Id               = "LeftPaneBottom",
                        Title            = "LeftPaneBottom",
                        Proportion       = double.NaN,
                        ActiveDockable   = leftBottomTool1,
                        VisibleDockables = CreateList <IDockable>
                                           (
                            leftBottomTool1,
                            leftBottomTool2
                                           )
                    }
                                       )
                },
                    new SplitterDock()
                {
                    Id    = "LeftSplitter",
                    Title = "LeftSplitter"
                },
                    new DocumentDock
                {
                    Id               = "DocumentsPane",
                    Title            = "DocumentsPane",
                    Proportion       = double.NaN,
                    ActiveDockable   = document1,
                    VisibleDockables = CreateList <IDockable>
                                       (
                        document1,
                        document2
                                       )
                },
                    new SplitterDock()
                {
                    Id    = "RightSplitter",
                    Title = "RightSplitter"
                },
                    new ProportionalDock
                {
                    Id               = "RightPane",
                    Title            = "RightPane",
                    Proportion       = double.NaN,
                    Orientation      = Orientation.Vertical,
                    ActiveDockable   = null,
                    VisibleDockables = CreateList <IDockable>
                                       (
                        new ToolDock
                    {
                        Id               = "RightPaneTop",
                        Title            = "RightPaneTop",
                        Proportion       = double.NaN,
                        ActiveDockable   = rightTopTool1,
                        VisibleDockables = CreateList <IDockable>
                                           (
                            rightTopTool1,
                            rightTopTool2
                                           )
                    },
                        new SplitterDock()
                    {
                        Id    = "RightPaneTopSplitter",
                        Title = "RightPaneTopSplitter"
                    },
                        new ToolDock
                    {
                        Id               = "RightPaneBottom",
                        Title            = "RightPaneBottom",
                        Proportion       = double.NaN,
                        ActiveDockable   = rightBottomTool1,
                        VisibleDockables = CreateList <IDockable>
                                           (
                            rightBottomTool1,
                            rightBottomTool2
                                           )
                    }
                                       )
                }
                                   )
            };

            var dashboardView = new DashboardViewModel
            {
                Id    = "Dashboard",
                Title = "Dashboard"
            };

            var homeView = new HomeViewModel
            {
                Id               = "Home",
                Title            = "Home",
                ActiveDockable   = mainLayout,
                VisibleDockables = CreateList <IDockable>(mainLayout)
            };

            var root = CreateRootDock();

            root.Id               = "Root";
            root.Title            = "Root";
            root.ActiveDockable   = dashboardView;
            root.DefaultDockable  = dashboardView;
            root.VisibleDockables = CreateList <IDockable>(dashboardView, homeView);
            root.Top              = CreatePinDock();
            root.Top.Alignment    = Alignment.Top;
            root.Bottom           = CreatePinDock();
            root.Bottom.Alignment = Alignment.Bottom;
            root.Left             = CreatePinDock();
            root.Left.Alignment   = Alignment.Left;
            root.Right            = CreatePinDock();
            root.Right.Alignment  = Alignment.Right;

            return(root);
        }
        public override IRootDock CreateLayout()
        {
            var document1 = new TestDocumentViewModel
            {
                Id    = "Document1",
                Title = "Document1"
            };

            var document2 = new TestDocumentViewModel
            {
                Id    = "Document2",
                Title = "Document2"
            };

            var leftTopTool1 = new LeftTopTool1ViewModel
            {
                Id    = "LeftTop1",
                Title = "LeftTop1"
            };

            var leftTopTool2 = new LeftTopTool2ViewModel
            {
                Id    = "LeftTop2",
                Title = "LeftTop2"
            };

            var leftBottomTool1 = new LeftBottomTool1ViewModel
            {
                Id    = "LeftBottom1",
                Title = "LeftBottom1"
            };

            var leftBottomTool2 = new LeftBottomTool2ViewModel
            {
                Id    = "LeftBottom2",
                Title = "LeftBottom2"
            };

            var rightTopTool1 = new RightTopTool1ViewModel
            {
                Id    = "RightTop1",
                Title = "RightTop1"
            };

            var rightTopTool2 = new RightTopTool2ViewModel
            {
                Id    = "RightTop2",
                Title = "RightTop2"
            };

            var rightBottomTool1 = new RightBottomTool1ViewModel
            {
                Id    = "RightBottom1",
                Title = "RightBottom1"
            };

            var rightBottomTool2 = new RightBottomTool2ViewModel
            {
                Id    = "RightBottom2",
                Title = "RightBottom2"
            };

            var documentDock = new DocumentDock
            {
                Id               = "DocumentsPane",
                Title            = "DocumentsPane",
                Proportion       = double.NaN,
                ActiveDockable   = document1,
                VisibleDockables = CreateList <IDockable>
                                   (
                    document1,
                    document2
                                   )
            };

            documentDock.CanCreateDocument = true;
            documentDock.CreateDocument    = ReactiveCommand.Create(() =>
            {
                var index    = documentDock.VisibleDockables?.Count + 1;
                var document = new TestDocumentViewModel {
                    Id = $"Document{index}", Title = $"Document{index}"
                };
                this.AddDockable(documentDock, document);
                this.SetActiveDockable(document);
                this.SetFocusedDockable(documentDock, document);
            });

            var mainLayout = new ProportionalDock
            {
                Id               = "MainLayout",
                Title            = "MainLayout",
                Proportion       = double.NaN,
                Orientation      = Orientation.Horizontal,
                ActiveDockable   = null,
                VisibleDockables = CreateList <IDockable>
                                   (
                    new ProportionalDock
                {
                    Id               = "LeftPane",
                    Title            = "LeftPane",
                    Proportion       = double.NaN,
                    Orientation      = Orientation.Vertical,
                    ActiveDockable   = null,
                    VisibleDockables = CreateList <IDockable>
                                       (
                        new ToolDock
                    {
                        Id               = "LeftPaneTop",
                        Title            = "LeftPaneTop",
                        Proportion       = double.NaN,
                        ActiveDockable   = leftTopTool1,
                        VisibleDockables = CreateList <IDockable>
                                           (
                            leftTopTool1,
                            leftTopTool2
                                           ),
                        Alignment = Alignment.Left,
                        GripMode  = GripMode.Visible
                    },
                        new SplitterDockable()
                    {
                        Id    = "LeftPaneTopSplitter",
                        Title = "LeftPaneTopSplitter"
                    },
                        new ToolDock
                    {
                        Id               = "LeftPaneBottom",
                        Title            = "LeftPaneBottom",
                        Proportion       = double.NaN,
                        ActiveDockable   = leftBottomTool1,
                        VisibleDockables = CreateList <IDockable>
                                           (
                            leftBottomTool1,
                            leftBottomTool2
                                           ),
                        Alignment = Alignment.Left,
                        GripMode  = GripMode.Visible
                    }
                                       )
                },
                    new SplitterDockable()
                {
                    Id    = "LeftSplitter",
                    Title = "LeftSplitter"
                },
                    documentDock,
                    new SplitterDockable()
                {
                    Id    = "RightSplitter",
                    Title = "RightSplitter"
                },
                    new ProportionalDock
                {
                    Id               = "RightPane",
                    Title            = "RightPane",
                    Proportion       = double.NaN,
                    Orientation      = Orientation.Vertical,
                    ActiveDockable   = null,
                    VisibleDockables = CreateList <IDockable>
                                       (
                        new ToolDock
                    {
                        Id               = "RightPaneTop",
                        Title            = "RightPaneTop",
                        Proportion       = double.NaN,
                        ActiveDockable   = rightTopTool1,
                        VisibleDockables = CreateList <IDockable>
                                           (
                            rightTopTool1,
                            rightTopTool2
                                           ),
                        Alignment = Alignment.Right,
                        GripMode  = GripMode.Visible
                    },
                        new SplitterDockable()
                    {
                        Id    = "RightPaneTopSplitter",
                        Title = "RightPaneTopSplitter"
                    },
                        new ToolDock
                    {
                        Id               = "RightPaneBottom",
                        Title            = "RightPaneBottom",
                        Proportion       = double.NaN,
                        ActiveDockable   = rightBottomTool1,
                        VisibleDockables = CreateList <IDockable>
                                           (
                            rightBottomTool1,
                            rightBottomTool2
                                           ),
                        Alignment = Alignment.Right,
                        GripMode  = GripMode.Visible
                    }
                                       )
                }
                                   )
            };

            var mainView = new MainViewModel
            {
                Id               = "Main",
                Title            = "Main",
                ActiveDockable   = mainLayout,
                VisibleDockables = CreateList <IDockable>(mainLayout)
            };

            var root = CreateRootDock();

            root.Id               = "Root";
            root.Title            = "Root";
            root.ActiveDockable   = mainView;
            root.DefaultDockable  = mainView;
            root.VisibleDockables = CreateList <IDockable>(mainView);

            _documentDock = documentDock;

            return(root);
        }