/// <summary>
        ///		Abre / cierra un panel lateral
        /// </summary>
        public void OpenGroup(DockPosition position)
        {
            LayoutAnchorGroup layoutGroup = GetGroupPane(Layout, position);

            // Abre el panel
            if (layoutGroup.Children.Count > 0)
            {
                // Cambia el ancho / alto del grupo
                switch (position)
                {
                case DockPosition.Left:
                case DockPosition.Right:
                    layoutGroup.Children[0].AutoHideWidth    = 400;
                    layoutGroup.Children[0].AutoHideMinWidth = 200;
                    break;

                default:
                    layoutGroup.Children[0].AutoHideHeight    = 600;
                    layoutGroup.Children[0].AutoHideMinHeight = 600;
                    break;
                }
                // Cambia el autohide para que aparezca
                //? Después de ejecutar esta instrucción, parece que se cambia el grupo, por tanto ya no podemos utilizar layoutGroup.Children[0]
                //? que provocaría una excepción
                layoutGroup.Children[0].ToggleAutoHide();
            }
        }
        internal LayoutAnchorGroupControl(LayoutAnchorGroup model)
        {
            _model = model;
            CreateChildrenViews();

            _model.Children.CollectionChanged += (s, e) => OnModelChildrenCollectionChanged(e);
        }
        /// <summary>
        ///		Añade / selecciona un panel
        /// </summary>
        public void AddPane(string id, string header, UserControl control, object tag = null, DockPosition position = DockPosition.Bottom)
        {
            DockLayoutDocument previous = GetDocument(id);

            if (previous != null)
            {
                previous.LayoutContent.IsActive = true;
                ActiveDocument = previous;
            }
            else
            {
                LayoutAnchorGroup layoutGroup = GetGroupPane(Layout, position);
                LayoutAnchorable  layoutPane  = new LayoutAnchorable {
                    Title = header, ToolTip = header
                };

                // Añade el contenido
                layoutPane.Content   = control;
                layoutPane.ContentId = id;
                // Añade el contenido al grupo
                layoutGroup.Children.Add(layoutPane);
                layoutPane.IsActive  = true;
                layoutPane.IsVisible = true;
                // Asigna los parámetros del grupo
                layoutPane.FloatingHeight = 400;
                layoutPane.FloatingWidth  = 400;
                // Añade el panel a la lista de documentos del controlador
                AddDocument(id, header, DockLayoutDocument.DocumentType.Panel, layoutPane, control, tag);
            }
        }
Exemple #4
0
        public static LayoutAnchorGroup AddGroup(this LayoutAnchorSide side)
        {
            var group = new LayoutAnchorGroup();

            side.AddChild(group);
            return(group);
        }
        internal LayoutAnchorGroupControl(LayoutAnchorGroup model)
        {
            _model = model;
            CreateChildrenViews();

            _model.Children.CollectionChanged += (s, e) => OnModelChildrenCollectionChanged(e);
        }
        /// <summary>
        /// Activates the dockable pane that contains the given control.
        /// The search is performed by matching the pane's ContentId to the
        /// controls's Name. If no dockable pane contains the control, one is
        /// created at the bottom side of the docking root; in this case, the
        /// control's ToolTip (if it is a non-null string) is used as the
        /// pane's Title.
        /// </summary>
        /// <param name="control">The control to activate.</param>
        /// <remarks>
        /// This code is partly adapted from AvalonDock samples. It's not
        /// clear how it's done, but normally it works.
        /// </remarks>
        private void ActivateToolWindow(Control control)
        {
            if (control == null)
            {
                throw new ArgumentNullException("control");
            }

            string contentId = control.Name;

            LayoutAnchorable pane = dockingManager.Layout.Descendents().OfType <
                LayoutAnchorable>().SingleOrDefault(a => a.ContentId == contentId);

            if (pane == null)
            {
                // The pane is not created. This can happen for example when
                // we load from an old layout configuration file, and the
                // pane is not defined in that file. In this case, we add the
                // control to a default location.
                var anchorSide = dockingManager.BottomSidePanel.Model as LayoutAnchorSide;
                LayoutAnchorGroup anchorGroup;
                if (anchorSide.ChildrenCount == 0)
                {
                    anchorGroup = new LayoutAnchorGroup();
                    anchorSide.Children.Add(anchorGroup);
                }
                else
                {
                    anchorGroup = anchorSide.Children[0];
                }

                pane           = new LayoutAnchorable();
                pane.ContentId = contentId;
                pane.Content   = control;
                if (control.ToolTip is string)
                {
                    pane.Title = (string)control.ToolTip;
                }
                anchorGroup.Children.Add(pane);
            }

            if (pane.IsHidden)
            {
                pane.Show();
            }
            else if (pane.IsVisible)
            {
                pane.IsActive = true;
            }
            else
            {
                pane.AddToLayout(dockingManager,
                                 AnchorableShowStrategy.Bottom |
                                 AnchorableShowStrategy.Most);
            }

            //control.Focus
            //if (!control.Focus())
            //    throw new InvalidOperationException();
            //Keyboard.Focus(control);
        }
Exemple #7
0
        /// <summary>
        ///		Muestra un panel
        /// </summary>
        public void ShowPane(string windowID, string title, System.Windows.Controls.UserControl control,
                             SystemControllerEnums.DockPosition position = SystemControllerEnums.DockPosition.Bottomm)
        {
            LayoutContent previous = GetLayoutPrevious(windowID);

            if (previous != null)
            {
                previous.IsActive = true;
            }
            else
            {
                LayoutAnchorGroup layoutGroup = GetGroupPane(DockManager.Layout, position);
                LayoutAnchorable  layoutPane  = new LayoutAnchorable {
                    Title = title, ToolTip = title
                };

                // Añade el contenido
                layoutPane.Content   = control;
                layoutPane.ContentId = windowID;
                // Añade el contenido al grupo
                layoutGroup.Children.Add(layoutPane);
                // Añade el panel a la lista de documentos del controlador
                AddDocument(new ToolViewModel(windowID, title, layoutPane, control, position));
            }
        }
        private void AddTwoDocuments_click(object sender, RoutedEventArgs e)
        {
            var firstDocumentPane = dockManager.Layout.Descendents().OfType <LayoutDocumentPane>().FirstOrDefault();

            if (firstDocumentPane != null)
            {
                LayoutDocument doc = new LayoutDocument();
                doc.Title = "Test1";
                firstDocumentPane.Children.Add(doc);

                LayoutDocument doc2 = new LayoutDocument();
                doc2.Title = "Test2";
                firstDocumentPane.Children.Add(doc2);
            }

            var leftAnchorGroup = dockManager.Layout.LeftSide.Children.FirstOrDefault();

            if (leftAnchorGroup == null)
            {
                leftAnchorGroup = new LayoutAnchorGroup();
                dockManager.Layout.LeftSide.Children.Add(leftAnchorGroup);
            }

            leftAnchorGroup.Children.Add(new LayoutAnchorable()
            {
                Title = "New Anchorable"
            });
        }
        /// <summary>
        /// 添加内容面板
        /// </summary>
        /// <param name="documentPane"></param>
        /// <param name="title"></param>
        internal LayoutAnchorable AddLayoutAnchorable(LayoutAnchorGroup pane, string title)
        {
            LayoutAnchorable anchorable = new LayoutAnchorable();

            anchorable.Title = title;
            pane.Children.Add(anchorable);
            return(anchorable);
        }
Exemple #10
0
        /// <summary>
        /// 初始化主要内容的容器控件
        /// </summary>
        private void initMianContentControl()
        {
            mianContentControl                 = new DockingManager();
            mianContentControl.BorderBrush     = Utility.Windows.ResourceHelper.FindResource(@"AccentColorBrush") as System.Windows.Media.Brush;
            mianContentControl.Theme           = new Xceed.Wpf.AvalonDock.Themes.MetroTheme();
            mianContentControl.DocumentClosed += MianContentControl_DocumentClosed;
            var          v            = Utility.Windows.ResourceHelper.FindResource(@"DockDocumentHeaderTemplate");
            DataTemplate dataTemplate = v as DataTemplate;

            mianContentControl.DocumentHeaderTemplate = dataTemplate;
            LayoutRoot layoutRoot = new LayoutRoot();

            mianContentControl.Layout = layoutRoot;

            LayoutAnchorSide layoutAnchorSide = new LayoutAnchorSide();

            layoutRoot.LeftSide = layoutAnchorSide;
            LayoutAnchorGroup layoutAnchorGroup = new LayoutAnchorGroup();

            layoutAnchorSide.Children.Add(layoutAnchorGroup);
            LayoutAnchorable layoutAnchorable = new LayoutAnchorable();

            layoutAnchorable.Title      = Utility.Windows.ResourceHelper.FindResource(@"NavigationMenu").ToString();
            layoutAnchorable.IconSource = Utility.Windows.BitmapImageHelper.GetBitmapImage("Images/Folder_32.png", 16, 16);

            layoutAnchorable.CanAutoHide      = true;
            layoutAnchorable.CanClose         = false;
            layoutAnchorable.CanFloat         = false;
            layoutAnchorable.CanHide          = false;
            layoutAnchorable.IsMaximized      = false;
            layoutAnchorable.AutoHideMinWidth = (double)Utility.Windows.ResourceHelper.FindResource(@"LeftTreeAutoHideMinWidth");

            layoutAnchorGroup.Children.Add(layoutAnchorable);
            layoutAnchorable.ToggleAutoHide();
            //TreeView treeView = new TreeView();
            //layoutAnchorable.Content = new ContentControl ()(Prism.Regions.RegionManager.SetRegionName ("");
            //Prism.Regions.RegionManager.GetRegionName(layoutAnchorable, "TreeMenuModule");
            //treeView.ItemsSource = this.MenuItems;
            //layoutAnchorable.Content =
            //Style style = new Style(); ;
            //style.TargetType = typeof(TreeViewItem);
            //style.BasedOn = Utility.Windows.ResourceHelper.FindResource(@"MetroTreeViewItem") as Style;
            //treeView.ItemContainerStyle = style;
            var treeMenuContent = new ContentControl();

            layoutAnchorable.Content = treeMenuContent;

            Prism.Regions.RegionManager.SetRegionName(treeMenuContent, "TreeMenuRegion");
            //Prism.Regions.RegionManager.SetRegionName(layoutAnchorable, "TreeMenuModule");
            //var regionManager = containerProvider.Resolve<IRegionManager>();
            //regionManager.RegisterViewWithRegion("ShellContentRegion", typeof(ShellView));

            LayoutDocumentPaneGroup layoutDocumentPaneGroup = new LayoutDocumentPaneGroup();

            layoutRoot.RootPanel.Orientation = Orientation.Horizontal;
            layoutRoot.RootPanel.Children[1] = layoutDocumentPaneGroup;
            layoutDocumentPaneGroup.InsertChildAt(0, layoutDocumentPane);
        }
Exemple #11
0
        public void AddChildrenToRightSide(string title, FrameworkElement element)
        {
            LayoutAnchorGroup dp = this.DManager.Layout.RightSide.Children[0] as LayoutAnchorGroup;
            LayoutAnchorable  d  = new LayoutAnchorable();

            d.Title   = title;
            d.Content = element;
            dp.Children.Add(d);
        }
Exemple #12
0
        internal void Show(LayoutAnchorControl anchor)
        {
            if (!(anchor.Model.Parent.Parent is LayoutAnchorSide))
            {
                //var root = Root;
                if (anchor.Model is LayoutAnchorable &&
                    anchor.Model.Parent is LayoutRoot)
                {
                    var model          = anchor.Model as LayoutAnchorable;
                    var root           = anchor.Model.Parent as LayoutRoot;
                    var newAnchorGroup = new LayoutAnchorGroup();
                    newAnchorGroup.Children.Add(model);
                    AnchorSide anchorSide = LayoutSetting.GetDefaultSideAnchorable(model.Title);

                    switch (anchorSide)
                    {
                    case AnchorSide.Right:
                        root.RightSide.Children.Add(newAnchorGroup);
                        break;

                    case AnchorSide.Left:
                        root.LeftSide.Children.Add(newAnchorGroup);
                        break;

                    case AnchorSide.Top:
                        root.TopSide.Children.Add(newAnchorGroup);
                        break;

                    case AnchorSide.Bottom:
                        root.BottomSide.Children.Add(newAnchorGroup);
                        break;
                    }
                }
                else
                {
                    return;
                }
            }

            if (_model != null)
            {
                throw new InvalidOperationException();
            }

            _anchor  = anchor;
            _model   = anchor.Model as LayoutAnchorable;
            _side    = (anchor.Model.Parent.Parent as LayoutAnchorSide).Side;
            _manager = _model.Root.Manager;
            CreateInternalGrid();

            _model.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_model_PropertyChanged);

            Visibility = System.Windows.Visibility.Visible;
            InvalidateMeasure();
            UpdateWindowPos();
            Trace.WriteLine("LayoutAutoHideWindowControl.Show()");
        }
Exemple #13
0
        public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer)
        {
            //AD wants to add the anchorable into destinationContainer
            //just for test provide a new anchorablepane
            //if the pane is floating let the manager go ahead



            LayoutAnchorablePane destPane = destinationContainer as LayoutAnchorablePane;

            if (destinationContainer != null &&
                destinationContainer.FindParent <LayoutFloatingWindow>() != null)
            {
                return(false);
            }

            //var toolsPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "ToolsPane");

            Type toolType = anchorableToShow.Content.GetType();

            var docData = _dockViewmodel.Data.DocumentTypeData.FirstOrDefault(a => a.DocType == _dockViewmodel.Data.ActiveDocument.GetType());

            var pos = docData.DicToolDockPosition[toolType];

            LayoutAnchorSide side = GetAnchorSide(pos, layout);


            if (side.Children.Count == 0)
            {
                var group = new LayoutAnchorGroup();



                group.Children.Add(anchorableToShow);


                side.Children.Add(group);
                SetToolPaneProperties(anchorableToShow);

                return(true);
            }
            else
            {
                side.Children[0].Children.Add(anchorableToShow);

                SetToolPaneProperties(anchorableToShow);
                return(true);
            }



            return(false);

            //return true;
        }
Exemple #14
0
        public static LayoutAnchorGroup FirstOrAdd(this LayoutAnchorSide side)
        {
            var group = side.Children.FirstOrDefault <LayoutAnchorGroup>();

            if (group is null)
            {
                group = new LayoutAnchorGroup();
                side.AddChild(group);
            }
            return(group);
        }
        //http://avalondock.codeplex.com/wikipage?title=AvalonDock%202.0%20Getting%20Start%20Guide&referringTitle=Documentation
		public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer)
		{
            if (anchorableToShow.Content is ITool)
            {
                var preferredLocation = ((ITool) anchorableToShow.Content).PreferredLocation;
                string paneName = GetPaneName(preferredLocation);
                var toolsPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == paneName);
                if (toolsPane == null)
                {
                    switch (preferredLocation)
                    {
                        case PaneLocation.Left:
                        {
                            //TODO: this should use two steps: first, try to add to existing "LayoutAnchorablePane" if not create layoutAnchorGroup like below
                            var layoutAnchorSide = layout.Descendents().OfType<LayoutAnchorSide>().First(side => side.Side == AnchorSide.Left);
                            var layoutAnchorGroup = new LayoutAnchorGroup();
                            layoutAnchorGroup.InsertChildAt(0, anchorableToShow);
                            layoutAnchorSide.InsertChildAt(0, layoutAnchorGroup);
                            anchorableToShow.AutoHideWidth = 200;

                            //var parent = layout.Descendents().OfType<LayoutPanel>().First(d => d.Orientation == Orientation.Horizontal);
                            //toolsPane = new LayoutAnchorablePane { DockWidth = new GridLength(200, GridUnitType.Pixel) };
                        }
                            break;
                        case PaneLocation.Right:
                        {
                            var parent = layout.Descendents().OfType<LayoutPanel>().First(d => d.Orientation == Orientation.Horizontal);
                            toolsPane = new LayoutAnchorablePane { DockWidth = new GridLength(200, GridUnitType.Pixel) };
                            parent.Children.Add(toolsPane);
                        }
                            break;
                        case PaneLocation.Bottom:
                        {
                            var ds = layout.Descendents().ToList();
                            var items = layout.Descendents().OfType<LayoutPanel>().ToList();
                            var items2 = layout.Descendents().OfType<LayoutAnchorGroup>().ToList();
                            //var parent = items2.First();
                            var parent = layout.Descendents().OfType<LayoutPanel>().First(d => d.Orientation == Orientation.Vertical);
                            toolsPane = new LayoutAnchorablePane { DockHeight = new GridLength(300, GridUnitType.Pixel) };
                            parent.Children.Add(toolsPane);
                        }
                            break;
                        default:
                            throw new ArgumentOutOfRangeException();
                    }
                }
                if(toolsPane != null)
                    toolsPane.Children.Add(anchorableToShow);
                return true;
            }

			return false;
		}
Exemple #16
0
        /// <summary>
        /// 初始化主要内容的容器控件
        /// </summary>
        private void initMianContentControl()
        {
            mianContentControl                 = new DockingManager();
            mianContentControl.BorderBrush     = Utility.Windows.ResourceHelper.FindResource(@"AccentColorBrush") as System.Windows.Media.Brush;
            mianContentControl.Theme           = new Xceed.Wpf.AvalonDock.Themes.MetroTheme();
            mianContentControl.DocumentClosed += MianContentControl_DocumentClosed;
            var          v            = Utility.Windows.ResourceHelper.FindResource(@"DockDocumentHeaderTemplate");
            DataTemplate dataTemplate = v as DataTemplate;

            mianContentControl.DocumentHeaderTemplate = dataTemplate;
            mianContentControl.Background             = Utility.Windows.ResourceHelper.FindResource(@"DesktopBackground") as System.Windows.Media.ImageBrush;

            LayoutRoot layoutRoot = new LayoutRoot();

            mianContentControl.Layout = layoutRoot;

            LayoutAnchorSide layoutAnchorSide = new LayoutAnchorSide();

            layoutRoot.LeftSide = layoutAnchorSide;
            LayoutAnchorGroup layoutAnchorGroup = new LayoutAnchorGroup();

            layoutAnchorSide.Children.Add(layoutAnchorGroup);
            LayoutAnchorable layoutAnchorable = new LayoutAnchorable();

            layoutAnchorable.Title      = Utility.Windows.ResourceHelper.FindResource(@"NavigationMenu").ToString();
            layoutAnchorable.IconSource = Utility.Windows.ResourceHelper.FindResource(@"Folder_32x32") as System.Windows.Media.ImageSource;

            layoutAnchorable.CanAutoHide      = true;
            layoutAnchorable.CanClose         = false;
            layoutAnchorable.CanFloat         = false;
            layoutAnchorable.CanHide          = false;
            layoutAnchorable.IsMaximized      = false;
            layoutAnchorable.AutoHideMinWidth = (double)Utility.Windows.ResourceHelper.FindResource(@"LeftTreeAutoHideMinWidth");

            layoutAnchorGroup.Children.Add(layoutAnchorable);
            layoutAnchorable.ToggleAutoHide();
            TreeView treeView = new TreeView();

            layoutAnchorable.Content = treeView;
            treeView.ItemsSource     = this.MenuItems;

            Style style = new Style();;

            style.TargetType            = typeof(TreeViewItem);
            style.BasedOn               = Utility.Windows.ResourceHelper.FindResource(@"MetroTreeViewItem") as Style;
            treeView.ItemContainerStyle = style;
            LayoutDocumentPaneGroup layoutDocumentPaneGroup = new LayoutDocumentPaneGroup();

            layoutRoot.RootPanel.Orientation = Orientation.Horizontal;
            layoutRoot.RootPanel.Children[1] = layoutDocumentPaneGroup;
            layoutDocumentPaneGroup.InsertChildAt(0, layoutDocumentPane);
        }
        /// <summary>
        /// Initializes static members of the <see cref="AvalonDockHelper"/> class.
        /// </summary>
        static AvalonDockHelper()
        {
            ContextualViewModelManager      = ServiceLocator.Default.ResolveType <IContextualViewModelManager>();
            DockingManager                  = ServiceLocator.Default.ResolveType <DockingManager>();
            DockingManager.DocumentClosing += OnDockingManagerDocumentClosing;
            DockingManager.DocumentClosed  += OnDockingManagerDocumentClosed;

            DockingManager.ActiveContentChanged += DockingManagerActiveContentChanged;

            LayoutDocumentPane = ServiceLocator.Default.ResolveType <LayoutDocumentPane>();
            LayoutAnchorGroup  = ServiceLocator.Default.ResolveType <LayoutAnchorGroup>();

            RightLayoutAnchorablePane = (LayoutAnchorablePane)ServiceLocator.Default.ResolveType(typeof(LayoutAnchorablePane), "rightPropertiesPane");
            LeftLayoutAnchorablePane  = (LayoutAnchorablePane)ServiceLocator.Default.ResolveType(typeof(LayoutAnchorablePane), "leftPropertiesPane");
            BottomPropertiesPane      = (LayoutAnchorGroup)ServiceLocator.Default.ResolveType(typeof(LayoutAnchorGroup), "bottomPropertiesPane");
            TopPropertiesPane         = (LayoutAnchorGroup)ServiceLocator.Default.ResolveType(typeof(LayoutAnchorGroup), "topPropertiesPane");
        }
Exemple #18
0
        private static LayoutAnchorGroup FindAnchorableGroup(LayoutRoot layout,
                                                             PaneLocation location)
        {
            try
            {
                LayoutAnchorSide panelGroupParent = null;

                switch (location)
                {
                case PaneLocation.Left:
                    panelGroupParent = layout.LeftSide;
                    break;

                case PaneLocation.Right:
                    panelGroupParent = layout.RightSide;
                    break;

                case PaneLocation.Bottom:
                    panelGroupParent = layout.BottomSide;
                    break;

                default:
                    throw new ArgumentOutOfRangeException("location:" + location);
                }

                if (panelGroupParent.Children.Count == 0)
                {
                    var layoutAnchorGroup = new LayoutAnchorGroup();

                    panelGroupParent.Children.Add(layoutAnchorGroup);

                    return(layoutAnchorGroup);
                }
                else
                {
                    return(panelGroupParent.Children[0]);
                }
            }
            catch (Exception exp)
            {
                logger.Error(exp);
            }

            return(null);
        }
Exemple #19
0
        /// <summary>
        /// 接入新的Window到侧边栏(WPF Only)
        /// </summary>
        /// <param name="wd">WPF窗口</param>
        /// <param name="title">标题</param>
        public void AddSidebarWpf(Object wd, String title)
        {
            var rightAnchorGp = _dManager.Layout.RightSide.Children.FirstOrDefault();

            if (rightAnchorGp == null)
            {
                rightAnchorGp = new LayoutAnchorGroup();
                _dManager.Layout.RightSide.Children.Add(rightAnchorGp);
            }

            var layAnc = new LayoutAnchorable
            {
                Title       = title,
                Content     = wd,
                CanAutoHide = true
            };

            rightAnchorGp.Children.Add(layAnc);
        }
Exemple #20
0
        /// <summary>
        /// Method is called when a completely new layout item is
        /// to be inserted into the current avalondock layout.
        /// </summary>
        /// <param name="layout"></param>
        /// <param name="anchorableToShow"></param>
        /// <param name="destinationContainer"></param>
        /// <returns></returns>
        public bool BeforeInsertAnchorable(LayoutRoot layout,
                                           LayoutAnchorable anchorableToShow,
                                           ILayoutContainer destinationContainer)
        {
            if (anchorableToShow.Content is IToolWindow)
            {
                IToolWindow tool = anchorableToShow.Content as IToolWindow;

                var preferredLocation = tool.PreferredLocation;

                LayoutAnchorGroup layoutGroup = null;

                switch (preferredLocation)
                {
                case PaneLocation.Left:
                    layoutGroup = FindAnchorableGroup(layout, preferredLocation);
                    break;

                case PaneLocation.Right:
                    layoutGroup = FindAnchorableGroup(layout, preferredLocation);
                    break;

                case PaneLocation.Bottom:
                    layoutGroup = FindAnchorableGroup(layout, preferredLocation);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                if (layoutGroup != null)
                {
                    ////group.InsertChildAt(0, anchorableToShow);
                    layoutGroup.Children.Add(anchorableToShow);
                }

                return(true);
            }

            return(false);
        }
        private void AddTwoDocuments_click(object sender, RoutedEventArgs e)
        {
            var firstDocumentPane = dockManager.Layout.Descendents().OfType<LayoutDocumentPane>().FirstOrDefault();
            if (firstDocumentPane != null)
            {
                LayoutDocument doc = new LayoutDocument();
                doc.Title = "Test1";
                firstDocumentPane.Children.Add(doc);

                LayoutDocument doc2 = new LayoutDocument();
                doc2.Title = "Test2";
                firstDocumentPane.Children.Add(doc2);
            }

            var leftAnchorGroup = dockManager.Layout.LeftSide.Children.FirstOrDefault();
            if (leftAnchorGroup == null)
            {
                leftAnchorGroup = new LayoutAnchorGroup();
                dockManager.Layout.LeftSide.Children.Add(leftAnchorGroup);
            }

            leftAnchorGroup.Children.Add(new LayoutAnchorable() { Title = "New Anchorable" });

        }
Exemple #22
0
        /// <summary>
        /// 接入新的Window到侧边栏(WPF Only)
        /// </summary>
        /// <param name="wd">WPF窗口</param>
        /// <param name="title">标题</param>
        public void AddSidebarWpf(Object wd, String title)
        {
            var rightAnchorGp = _dManager.Layout.RightSide.Children.FirstOrDefault();
            if (rightAnchorGp == null)
            {
                rightAnchorGp = new LayoutAnchorGroup();
                _dManager.Layout.RightSide.Children.Add(rightAnchorGp);
            }

            var layAnc = new LayoutAnchorable
            {
                Title = title,
                Content = wd,
                CanAutoHide = true
            };

            rightAnchorGp.Children.Add(layAnc);
        }
Exemple #23
0
        //http://avalondock.codeplex.com/wikipage?title=AvalonDock%202.0%20Getting%20Start%20Guide&referringTitle=Documentation
        public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer)
        {
            if (anchorableToShow.Content is ITool)
            {
                var    preferredLocation = ((ITool)anchorableToShow.Content).PreferredLocation;
                string paneName          = GetPaneName(preferredLocation);
                var    toolsPane         = layout.Descendents().OfType <LayoutAnchorablePane>().FirstOrDefault(d => d.Name == paneName);
                if (toolsPane == null)
                {
                    switch (preferredLocation)
                    {
                    case PaneLocation.Left:
                    {
                        //TODO: this should use two steps: first, try to add to existing "LayoutAnchorablePane" if not create layoutAnchorGroup like below
                        var layoutAnchorSide  = layout.Descendents().OfType <LayoutAnchorSide>().First(side => side.Side == AnchorSide.Left);
                        var layoutAnchorGroup = new LayoutAnchorGroup();
                        layoutAnchorGroup.InsertChildAt(0, anchorableToShow);
                        layoutAnchorSide.InsertChildAt(0, layoutAnchorGroup);
                        anchorableToShow.AutoHideWidth = 200;

                        //var parent = layout.Descendents().OfType<LayoutPanel>().First(d => d.Orientation == Orientation.Horizontal);
                        //toolsPane = new LayoutAnchorablePane { DockWidth = new GridLength(200, GridUnitType.Pixel) };
                    }
                    break;

                    case PaneLocation.Right:
                    {
                        var parent = layout.Descendents().OfType <LayoutPanel>().First(d => d.Orientation == Orientation.Horizontal);
                        toolsPane = new LayoutAnchorablePane {
                            DockWidth = new GridLength(200, GridUnitType.Pixel)
                        };
                        parent.Children.Add(toolsPane);
                    }
                    break;

                    case PaneLocation.Bottom:
                    {
                        var ds     = layout.Descendents().ToList();
                        var items  = layout.Descendents().OfType <LayoutPanel>().ToList();
                        var items2 = layout.Descendents().OfType <LayoutAnchorGroup>().ToList();
                        //var parent = items2.First();
                        var parent = layout.Descendents().OfType <LayoutPanel>().First(d => d.Orientation == Orientation.Vertical);
                        toolsPane = new LayoutAnchorablePane {
                            DockHeight = new GridLength(300, GridUnitType.Pixel)
                        };
                        parent.Children.Add(toolsPane);
                    }
                    break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
                if (toolsPane != null)
                {
                    toolsPane.Children.Add(anchorableToShow);
                }
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// Activates the dockable pane that contains the given control.
        /// The search is performed by matching the pane's ContentId to the
        /// controls's Name. If no dockable pane contains the control, one is
        /// created at the bottom side of the docking root; in this case, the
        /// control's ToolTip (if it is a non-null string) is used as the
        /// pane's Title.
        /// </summary>
        /// <param name="control">The control to activate.</param>
        /// <remarks>
        /// This code is partly adapted from AvalonDock samples. It's not
        /// clear how it's done, but normally it works.
        /// </remarks>
        private void ActivateToolWindow(Control control)
        {
            if (control == null)
                throw new ArgumentNullException("control");

            string contentId = control.Name;

            LayoutAnchorable pane = dockingManager.Layout.Descendents().OfType<
                LayoutAnchorable>().SingleOrDefault(a => a.ContentId == contentId);

            if (pane == null)
            {
                // The pane is not created. This can happen for example when
                // we load from an old layout configuration file, and the
                // pane is not defined in that file. In this case, we add the
                // control to a default location.
                var anchorSide = dockingManager.BottomSidePanel.Model as LayoutAnchorSide;
                LayoutAnchorGroup anchorGroup;
                if (anchorSide.ChildrenCount == 0)
                {
                    anchorGroup = new LayoutAnchorGroup();
                    anchorSide.Children.Add(anchorGroup);
                }
                else
                {
                    anchorGroup = anchorSide.Children[0];
                }

                pane = new LayoutAnchorable();
                pane.ContentId = contentId;
                pane.Content = control;
                if (control.ToolTip is string)
                {
                    pane.Title = (string)control.ToolTip;
                }
                anchorGroup.Children.Add(pane);
            }

            if (pane.IsHidden)
            {
                pane.Show();
            }
            else if (pane.IsVisible)
            {
                pane.IsActive = true;
            }
            else
            {
                pane.AddToLayout(dockingManager,
                    AnchorableShowStrategy.Bottom |
                    AnchorableShowStrategy.Most);
            }

            //control.Focus
            //if (!control.Focus())
            //    throw new InvalidOperationException();
            //Keyboard.Focus(control);
        }
Exemple #25
0
 internal LayoutAnchorGroupControl(LayoutAnchorGroup model)
 {
     this._model = model;
     this.CreateChildrenViews();
     this._model.Children.CollectionChanged += new NotifyCollectionChangedEventHandler((object s, NotifyCollectionChangedEventArgs e) => this.OnModelChildrenCollectionChanged(e));
 }
Exemple #26
0
		public void ToggleAutoHide()
		{
			#region Anchorable is already auto hidden
			if (IsAutoHidden)
			{
				var parentGroup = Parent as LayoutAnchorGroup;
				var parentSide = parentGroup.Parent as LayoutAnchorSide;
				var previousContainer = ((ILayoutPreviousContainer)parentGroup).PreviousContainer as LayoutAnchorablePane;

				if (previousContainer == null)
				{
					AnchorSide side = (parentGroup.Parent as LayoutAnchorSide).Side;
					switch (side)
					{
						case AnchorSide.Right:
							if (parentGroup.Root.RootPanel.Orientation == Orientation.Horizontal)
							{
								previousContainer = new LayoutAnchorablePane();
								parentGroup.Root.RootPanel.Children.Add(previousContainer);
							}
							else
							{
								previousContainer = new LayoutAnchorablePane();
								LayoutPanel panel = new LayoutPanel() { Orientation = Orientation.Horizontal };
								LayoutRoot root = parentGroup.Root as LayoutRoot;
								LayoutPanel oldRootPanel = parentGroup.Root.RootPanel as LayoutPanel;
								root.RootPanel = panel;
								panel.Children.Add(oldRootPanel);
								panel.Children.Add(previousContainer);
							}
							break;
						case AnchorSide.Left:
							if (parentGroup.Root.RootPanel.Orientation == Orientation.Horizontal)
							{
								previousContainer = new LayoutAnchorablePane();
								parentGroup.Root.RootPanel.Children.Insert(0, previousContainer);
							}
							else
							{
								previousContainer = new LayoutAnchorablePane();
								LayoutPanel panel = new LayoutPanel() { Orientation = Orientation.Horizontal };
								LayoutRoot root = parentGroup.Root as LayoutRoot;
								LayoutPanel oldRootPanel = parentGroup.Root.RootPanel as LayoutPanel;
								root.RootPanel = panel;
								panel.Children.Add(previousContainer);
								panel.Children.Add(oldRootPanel);
							}
							break;
						case AnchorSide.Top:
							if (parentGroup.Root.RootPanel.Orientation == Orientation.Vertical)
							{
								previousContainer = new LayoutAnchorablePane();
								parentGroup.Root.RootPanel.Children.Insert(0, previousContainer);
							}
							else
							{
								previousContainer = new LayoutAnchorablePane();
								LayoutPanel panel = new LayoutPanel() { Orientation = Orientation.Vertical };
								LayoutRoot root = parentGroup.Root as LayoutRoot;
								LayoutPanel oldRootPanel = parentGroup.Root.RootPanel as LayoutPanel;
								root.RootPanel = panel;
								panel.Children.Add(previousContainer);
								panel.Children.Add(oldRootPanel);
							}
							break;
						case AnchorSide.Bottom:
							if (parentGroup.Root.RootPanel.Orientation == Orientation.Vertical)
							{
								previousContainer = new LayoutAnchorablePane();
								parentGroup.Root.RootPanel.Children.Add(previousContainer);
							}
							else
							{
								previousContainer = new LayoutAnchorablePane();
								LayoutPanel panel = new LayoutPanel() { Orientation = Orientation.Vertical };
								LayoutRoot root = parentGroup.Root as LayoutRoot;
								LayoutPanel oldRootPanel = parentGroup.Root.RootPanel as LayoutPanel;
								root.RootPanel = panel;
								panel.Children.Add(oldRootPanel);
								panel.Children.Add(previousContainer);
							}
							break;
					}
				}
				else
				{
					//I'm about to remove parentGroup, redirect any content (ie hidden contents) that point to it
					//to previousContainer
					LayoutRoot root = parentGroup.Root as LayoutRoot;
					foreach (var cnt in root.Descendents().OfType<ILayoutPreviousContainer>().Where(c => c.PreviousContainer == parentGroup))
					{
						cnt.PreviousContainer = previousContainer;
					}
				}


				foreach (var anchorableToToggle in parentGroup.Children.ToArray())
				{
					previousContainer.Children.Add(anchorableToToggle);
				}

				parentSide.Children.Remove(parentGroup);
			}
			#endregion
			#region Anchorable is docked
			else if (Parent is LayoutAnchorablePane)
			{
				var root = Root;
				var parentPane = Parent as LayoutAnchorablePane;

				var newAnchorGroup = new LayoutAnchorGroup();

				((ILayoutPreviousContainer)newAnchorGroup).PreviousContainer = parentPane;

				foreach (var anchorableToImport in parentPane.Children.ToArray())
					newAnchorGroup.Children.Add(anchorableToImport);

				//detect anchor side for the pane
				var anchorSide = parentPane.GetSide();

				switch (anchorSide)
				{
					case AnchorSide.Right:
						root.RightSide.Children.Add(newAnchorGroup);
						break;
					case AnchorSide.Left:
						root.LeftSide.Children.Add(newAnchorGroup);
						break;
					case AnchorSide.Top:
						root.TopSide.Children.Add(newAnchorGroup);
						break;
					case AnchorSide.Bottom:
						root.BottomSide.Children.Add(newAnchorGroup);
						break;
				}
			}
			#endregion
		}
Exemple #27
0
        public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer)
        {
            //AD wants to add the anchorable into destinationContainer
            //just for test provide a new anchorablepane
            //if the pane is floating let the manager go ahead
            LayoutAnchorablePane destPane = destinationContainer as LayoutAnchorablePane;

            if (destinationContainer != null && destinationContainer.FindParent <LayoutFloatingWindow>() != null)
            {
                return(false);
            }

            anchorableToShow.AutoHideWidth  = 256;
            anchorableToShow.AutoHideHeight = 128;
            anchorableToShow.CanShowOnHover = false;

            if (anchorableToShow.Content is ExplorerViewModel)
            {
                var explorerPane = layout.Descendents().OfType <LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "ExplorerPane");

                if (explorerPane != null)
                {
                    explorerPane.Children.Add(anchorableToShow);
                    return(true);
                }
            }

            if (anchorableToShow.Content is PropertiesViewModel)
            {
                var propertiesPane = layout.Descendents().OfType <LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "PropertiesPane");

                if (propertiesPane != null)
                {
                    propertiesPane.Children.Add(anchorableToShow);
                    return(true);
                }
            }

            if (anchorableToShow.Content is OutputViewModel)
            {
                var outputPane = layout.Descendents().OfType <LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "OutputPane");

                if (outputPane != null)
                {
                    outputPane.Children.Add(anchorableToShow);
                    return(true);
                }
            }

            if (anchorableToShow.Content is ToolboxViewModel)
            {
                var leftGroup = new LayoutAnchorGroup();
                leftGroup.Children.Add(anchorableToShow);
                layout.LeftSide.Children.Add(leftGroup);
                return(true);
            }

            if (anchorableToShow.Content is GitChangesViewModel)
            {
                var rightGroup = new LayoutAnchorGroup();
                rightGroup.Children.Add(anchorableToShow);
                layout.RightSide.Children.Add(rightGroup);
                return(true);
            }

            if (anchorableToShow.Content is ErrorViewModel)
            {
                var bottomGroup = new LayoutAnchorGroup();
                bottomGroup.Children.Add(anchorableToShow);
                layout.BottomSide.Children.Add(bottomGroup);
                return(true);
            }

            return(false);
        }