Exemplo n.º 1
0
            internal void ResolvePeerRelationships(Dictionary <int, DockableCollection> dockableCollections, DockableCollection dockableCollection)
            {
                LayoutContext dockableCollectionLayoutContext = DockingPanel.GetLayoutContext(dockableCollection);

                dockableCollectionLayoutContext.Edges[System.Windows.Controls.Dock.Bottom].PhysicalNeighbors.Clear();
                foreach (int internalId in BottomPeers)
                {
                    DockableCollection peer = dockableCollections[internalId];
                    LayoutContext      peerLayoutContext = DockingPanel.GetLayoutContext(peer);
                    dockableCollectionLayoutContext.Edges[System.Windows.Controls.Dock.Bottom].PhysicalNeighbors.AddLast(peerLayoutContext);
                }
                dockableCollectionLayoutContext.Edges[System.Windows.Controls.Dock.Left].PhysicalNeighbors.Clear();
                foreach (int internalId in LeftPeers)
                {
                    DockableCollection peer = dockableCollections[internalId];
                    LayoutContext      peerLayoutContext = DockingPanel.GetLayoutContext(peer);
                    dockableCollectionLayoutContext.Edges[System.Windows.Controls.Dock.Left].PhysicalNeighbors.AddLast(peerLayoutContext);
                }
                dockableCollectionLayoutContext.Edges[System.Windows.Controls.Dock.Right].PhysicalNeighbors.Clear();
                foreach (int internalId in RightPeers)
                {
                    DockableCollection peer = dockableCollections[internalId];
                    LayoutContext      peerLayoutContext = DockingPanel.GetLayoutContext(peer);
                    dockableCollectionLayoutContext.Edges[System.Windows.Controls.Dock.Right].PhysicalNeighbors.AddLast(peerLayoutContext);
                }
                dockableCollectionLayoutContext.Edges[System.Windows.Controls.Dock.Top].PhysicalNeighbors.Clear();
                foreach (int internalId in TopPeers)
                {
                    DockableCollection peer = dockableCollections[internalId];
                    LayoutContext      peerLayoutContext = DockingPanel.GetLayoutContext(peer);
                    dockableCollectionLayoutContext.Edges[System.Windows.Controls.Dock.Top].PhysicalNeighbors.AddLast(peerLayoutContext);
                }
            }
Exemplo n.º 2
0
            private void SavePeerLinkages()
            {
                //  Load the DockableCollections into a dictionary for fast access

                Dictionary <DockableCollection, int> dockableCollections = new Dictionary <DockableCollection, int>();

                foreach (DockableCollectionDescriptor desc in DockedCollections)
                {
                    dockableCollections.Add(desc.DockableCollection, desc.InternalId);
                }

                //  Now save the peer linkages for each DockableCollection

                foreach (DockableCollectionDescriptor desc in DockedCollections)
                {
                    foreach (LayoutContext layoutContext in DockingPanel.GetLayoutContext(desc.DockableCollection).Edges[System.Windows.Controls.Dock.Bottom].PhysicalNeighbors)
                    {
                        desc.BottomPeers.Add(dockableCollections[layoutContext.DockableCollection as DockableCollection]);
                    }
                    foreach (LayoutContext layoutContext in DockingPanel.GetLayoutContext(desc.DockableCollection).Edges[System.Windows.Controls.Dock.Left].PhysicalNeighbors)
                    {
                        desc.LeftPeers.Add(dockableCollections[layoutContext.DockableCollection as DockableCollection]);
                    }
                    foreach (LayoutContext layoutContext in DockingPanel.GetLayoutContext(desc.DockableCollection).Edges[System.Windows.Controls.Dock.Right].PhysicalNeighbors)
                    {
                        desc.RightPeers.Add(dockableCollections[layoutContext.DockableCollection as DockableCollection]);
                    }
                    foreach (LayoutContext layoutContext in DockingPanel.GetLayoutContext(desc.DockableCollection).Edges[System.Windows.Controls.Dock.Top].PhysicalNeighbors)
                    {
                        desc.TopPeers.Add(dockableCollections[layoutContext.DockableCollection as DockableCollection]);
                    }
                }
            }
Exemplo n.º 3
0
            internal DockableCollection Create(Dock dock, DockableContextContentCreator contentCreator)
            {
                DockableCollection newCollection = new DockableCollection()
                {
                    Description = this.Description,
                    HorizontalContentAlignment = this.HorizontalContentAlignment,
                    State       = this.State,
                    TabPosition = this.TabPosition,
                    VerticalContentAlignment = this.VerticalContentAlignment,
                };

                DockingPanel.SetDockPosition(newCollection, this.DockPosition);

                if (newCollection.IsCollapsed)
                {
                    newCollection.CollapsedTabPosition = this.CollapsedTabPosition;
                }

                foreach (DockableContentDescriptor desc in Content)
                {
                    FrameworkElement content = desc.RestoreDockedLayout(newCollection, contentCreator);
                    if (content != null && desc.InternalId == CurrentTab)
                    {
                        newCollection.SetVisibleContent(content);
                    }
                }
                dock.Items.Add(newCollection);

                if (!newCollection.IsCollapsed)
                {
                    LayoutContext layoutContext = DockingPanel.GetLayoutContext(newCollection);
                    layoutContext.Left = Left;
                    layoutContext.Top  = Top;
                    if (IsHeightSplitterActive)
                    {
                        layoutContext.Size.Height.SetSplitter(LayoutHeight.Value);
                    }
                    else
                    {
                        layoutContext.Size.Height.SetInternalValue(LayoutHeight);
                    }
                    if (IsWidthSplitterActive)
                    {
                        layoutContext.Size.Width.SetSplitter(LayoutWidth.Value);
                    }
                    else
                    {
                        layoutContext.Size.Width.SetInternalValue(LayoutWidth);
                    }
                    layoutContext.Size.Height.SetUserValue(Height.Value);
                    layoutContext.Size.Width.SetUserValue(Width.Value);
                }

                return(newCollection);
            }
Exemplo n.º 4
0
            public DockableCollectionDescriptor(DockableCollection dockableCollection, DockDescriptor dock, int internalId)
            {
                DockableCollection = dockableCollection;
                Description        = dockableCollection.Description;
                DockPosition       = DockingPanel.GetDockPosition(dockableCollection);
                State       = dockableCollection.State;
                TabPosition = dockableCollection.TabPosition;
                HorizontalContentAlignment = dockableCollection.HorizontalContentAlignment;
                VerticalContentAlignment   = dockableCollection.VerticalContentAlignment;

                if (dockableCollection.IsCollapsed)
                {
                    CollapsedTabPosition = dockableCollection.CollapsedTabPosition;
                }
                else
                {
                    LayoutContext layoutContext = DockingPanel.GetLayoutContext(dockableCollection);
                    Left                   = layoutContext.Left.Value;
                    Top                    = layoutContext.Top.Value;
                    LayoutHeight           = layoutContext.Size.Height.HasInternalValue ? layoutContext.Size.Height.InternalValue : (double?)null;
                    LayoutWidth            = layoutContext.Size.Width.HasInternalValue ? layoutContext.Size.Width.InternalValue : (double?)null;
                    Height                 = layoutContext.Size.Height.UserValue;
                    Width                  = layoutContext.Size.Width.UserValue;
                    IsHeightSplitterActive = layoutContext.Size.Height.IsSplitterActive;
                    IsWidthSplitterActive  = layoutContext.Size.Width.IsSplitterActive;
                }

                BottomPeers = new List <int>();
                LeftPeers   = new List <int>();
                RightPeers  = new List <int>();
                TopPeers    = new List <int>();
                Content     = new List <DockableContentDescriptor>();

                InternalId = internalId;

                dock.DockedCollections.Add(this);

                int contentId = 1;

                foreach (FrameworkElement dockableContent in dockableCollection.Items)
                {
                    if (dockableCollection.VisibleContent == dockableContent)
                    {
                        CurrentTab = contentId;
                    }
                    new DockableContentDescriptor(dockableContent, this, contentId++);
                }
            }