예제 #1
0
        public BaseDockableContent(object rootModel, object view, DockArea dockArea, bool isDocument = false)
        {
            var dockableContent = view as BaseDockableContent;

            if (dockableContent != null)
            {
                Content       = view;
                IsCloseable   = dockableContent.IsCloseable;
                HideOnClose   = dockableContent.HideOnClose;
                Model         = dockableContent.Model;
                DockArea      = dockableContent.DockArea;
                DockableStyle = DockableStyle.Dockable;
                //DockableStyle = dockableContent.DockableStyle;
                DataContext = rootModel;
            }
            else
            {
                var fe = view as FrameworkElement;
                if ((fe != null) && (fe.Parent != null))
                {
                    var parent = fe.Parent as BaseDockableContent;
                    if (parent != null)
                    {
                        parent.Content = null;
                    }
                }
                Content       = view;
                IsCloseable   = true;
                HideOnClose   = false;
                Model         = rootModel;
                DockArea      = dockArea;
                DockableStyle = DockableStyle.Dockable;
                //DockableStyle = isDocument ? DockableStyle.Document : DockableStyle.Dockable;
                DataContext = rootModel;

                //dockableContent.IsCloseable = viewModel.CanClose;
                //Image img = new Image();
                //img.Source = new BitmapImage(new Uri(@"Resources/Data.png", UriKind.Relative));
                //dockableContent.Icon = img.Source;
            }
        }
예제 #2
0
        public ContentArea(DockArea dockArea)
        {
            DockArea = dockArea;
            //DockingManager = new DockingManager { Name = dockArea.ToString() };

            DockableContentList = new List <DockableContent>();

            DockablePane = new DockablePane
            {
                Name = dockArea.ToString(),
                HorizontalAlignment        = HorizontalAlignment.Stretch,
                HorizontalContentAlignment = HorizontalAlignment.Stretch,
                VerticalAlignment          = VerticalAlignment.Stretch,
                VerticalContentAlignment   = VerticalAlignment.Stretch,
                // ItemsSource = DockableContentList
            };

            //DockableContentPane = new DockableContent { Content = DockablePane, Name = dockArea.ToString() };

            //DockableContent = new ContainerDockableContent
            //{
            //    //Name = DockingManager.Name,
            //    //Title = DockingManager.Name,
            //    //Content = DockingManager,
            //    Focusable = true,
            //    DockableStyle = DockableStyle.Dockable,
            //    HideOnClose = false,
            //    DockArea = dockArea,
            //    HorizontalAlignment = HorizontalAlignment.Stretch,
            //    HorizontalContentAlignment = HorizontalAlignment.Stretch,
            //    VerticalAlignment = VerticalAlignment.Stretch,
            //    VerticalContentAlignment = VerticalAlignment.Stretch
            //};

            DockablePane.SetValue(DockablePane.AnchorPropertyKey, AnchorStyle.Bottom);
            //DockablePane.Items.Add(DockableContent);
        }
예제 #3
0
        public void ShowDockedWindow(object viewModel, DockArea dockArea, object context = null,
                                     bool selectWhenShown       = true, DockSide dockSide = DockSide.Left,
                                     double startupVisibleWidth = -1, bool hideOnClose    = false, bool isCloseable = true)
        {
            var dockingManager = GetDockingManager();

            var anchor = GetAnchorStyle(dockSide);

            // TODO
            //if (anchor == AnchorStyle.Left && dockArea != DockArea.Master)
            //{
            //    var istview = IoC.Get<FacilitiesViewModel>();
            //    var instdockable = GetDockable(istview, null, DockArea.Master);

            //    instdockable.Show(dockingManager, anchor);
            //}

            var dockableContent = GetDockable(viewModel, context, dockArea);

            dockableContent.HideOnClose = hideOnClose;
            dockableContent.IsCloseable = isCloseable;
            dockableContent.Show(dockingManager, anchor);

            if (startupVisibleWidth >= 0)
            {
                var width = new GridLength(startupVisibleWidth);
                ResizingPanel.SetResizeWidth(dockableContent.ContainerPane, width);
            }

            if (selectWhenShown)
            {
                dockableContent.Activate();
            }
            //else
            //    dockableContent.ToggleAutoHide();
        }
예제 #4
0
    public Vector4 GetArea( DockArea area )
    {
        Vector4 dims = new Vector4();

        int d = (int)area.MainArea;
        if( !_dockAreaList[d].ContainsValue( area ) )
        {
            Debug.LogError( "Area '" + area.name + "' not registered." );
            return dims;
        }

        int count = _dockAreaList[d].Count;

        if( area.MainArea == Dockable.Center )
        {
            dims.x = Screen.width - ( _dockAreas[(int)Dockable.Left].TotalValue + _dockAreas[(int)Dockable.Right].TotalValue );
            dims.y = Screen.height - ( _dockAreas[(int)Dockable.Top].TotalValue + _dockAreas[(int)Dockable.Bottom].TotalValue );

            dims.z = ( _dockAreas[(int)Dockable.Left].TotalValue - _dockAreas[(int)Dockable.Right].TotalValue ) / 2.0f;
            dims.w = ( _dockAreas[(int)Dockable.Bottom].TotalValue - _dockAreas[(int)Dockable.Top].TotalValue ) / 2.0f;

            // TODO: Configure multiple docks in center
        }
        else if( area.MainArea == Dockable.Left || area.MainArea == Dockable.Right )
        {
            dims.x = _dockAreas[(int)area.MainArea].TotalValue;
            dims.y = Screen.height - ( _dockAreas[(int)Dockable.Top].TotalValue + _dockAreas[(int)Dockable.Bottom].TotalValue );

            if( area.MainArea == Dockable.Left )
                dims.z = dims.x / 2;
            else if( area.MainArea == Dockable.Right )
                dims.z = ( -dims.x ) / 2;

            dims.w = ( _dockAreas[(int)Dockable.Bottom].TotalValue - _dockAreas[(int)Dockable.Top].TotalValue ) / 2.0f;

            foreach( DockCorners dc in area.Corners )
            {
                if( dc == DockCorners.TopLeft || dc == DockCorners.TopRight )
                {
                    dims.y += _dockAreas[(int)Dockable.Top].TotalValue;
                    dims.w += _dockAreas[(int)Dockable.Top].TotalValue / 2;
                }
                else if( dc == DockCorners.BottomLeft || dc == DockCorners.BottomRight )
                {
                    dims.y += _dockAreas[(int)Dockable.Bottom].TotalValue;
                    dims.w -= _dockAreas[(int)Dockable.Bottom].TotalValue / 2;
                }
            }

            dims.y /= count;
            dims.w += ( ( ( count / 2.0f ) - 0.5f ) - _dockAreaList[d].IndexOfValue( area ) ) * dims.y;
        }
        else if( area.MainArea == Dockable.Top || area.MainArea == Dockable.Bottom )
        {
            dims.x = Screen.width - ( _dockAreas[(int)Dockable.Left].TotalValue + _dockAreas[(int)Dockable.Right].TotalValue );
            dims.y = _dockAreas[(int)area.MainArea].TotalValue;

            if( area.MainArea == Dockable.Top )
                dims.w = ( -dims.y ) / 2;
            else if( area.MainArea == Dockable.Bottom )
                dims.w = dims.y / 2;

            dims.z = ( _dockAreas[(int)Dockable.Left].TotalValue - _dockAreas[(int)Dockable.Right].TotalValue ) / 2.0f;

            foreach( DockCorners dc in area.Corners )
            {
                if( dc == DockCorners.TopLeft || dc == DockCorners.BottomLeft )
                {
                    dims.x += _dockAreas[(int)Dockable.Left].TotalValue;
                    dims.z -= _dockAreas[(int)Dockable.Left].TotalValue / 2;
                }
                else if( dc == DockCorners.TopRight || dc == DockCorners.BottomRight )
                {
                    dims.x += _dockAreas[(int)Dockable.Right].TotalValue;
                    dims.z += _dockAreas[(int)Dockable.Right].TotalValue / 2;
                }
            }

            dims.x /= count;
            dims.z += ( ( ( count / 2.0f ) - 0.5f ) - _dockAreaList[d].IndexOfValue( area ) ) * dims.x;
        }

        return dims;
    }
예제 #5
0
    public void UnregisterArea( DockArea area )
    {
        int d = (int)area.MainArea;

        if( _dockAreaList[d].ContainsValue( area ) )
            _dockAreaList[d].RemoveAt( _dockAreaList[d].IndexOfValue( area ) );
    }
예제 #6
0
    public void RegisterArea( DockArea area )
    {
        int d = (int)area.MainArea;

        if( !_dockAreaList[d].ContainsValue( area ) )
            _dockAreaList[d].Add( area.Weight, area );
    }
예제 #7
0
        public void CheckAreas(DockingManager dockingManager)
        {
            if (dockingManager == null)
            {
                dockingManager = GetDockingManager();
            }
            var newdocumentsarea = dockingManager.MainDocumentPane.HasItems
                                    ? dockingManager.MainDocumentPane.Items.Cast <BaseDockableContent>().First().DockArea
                                    : DockArea.Master;
            var docked =
                dockingManager.DockableContents.Cast <BaseDockableContent>()
                .Where(d => d.DockArea != DockArea.Master && d.DockArea != _documentArea)
                .Where(c => c.Title != "Jacket Navigation")
                .Select(s => s.DockArea)
                .Distinct()
                .ToList();

            // nothing has changed
            if (_documentArea == newdocumentsarea && _openMenuItems.Count(m => m != DockArea.Master) == docked.Count)
            {
                return;
            }

            var prevjacketnav = _openMenuItems.Contains(DockArea.PrepareJackets);

            _documentArea = newdocumentsarea;

            if (_documentArea == DockArea.Master && docked.Any())
            {
                _documentArea = docked.First();

                //var tomove = dockingManager.DockableContents.Cast<BaseDockableContent>()
                //    .Where(d => d.DockArea == _documentArea &&
                //        d.Title != "Jacket Navigation").ToList();

                var tomove = dockingManager.DockableContents.Cast <BaseDockableContent>()
                             .Where(d => d.DockArea == _documentArea)
                             .ToList();

                foreach (var dockableContent in tomove)
                {
                    try
                    {
                        dockableContent.ShowAsDocument(dockingManager);
                    }
                    // see bug 3116
                    catch (InvalidOperationException ex)
                    {
                        if (ex.Message.Contains("Cannot set Visibility to Visible"))
                        {
                            continue;
                        }
                        throw;
                    }
                }
                docked.Remove(_documentArea);
            }

            _openMenuItems.Clear();
            _openMenuItems.Add(_documentArea);
            _openMenuItems.AddRange(docked);

            // TODO
            //if (prevjacketnav && !_openMenuItems.Contains(DockArea.PrepareJackets))
            //{
            //    var jacketnavview = IoC.Get<JacketNavigationViewModel>();

            //    var dockablecontent = FindDockableContent(jacketnavview);
            //    if (dockablecontent != null)
            //    {
            //        dockablecontent.IsCloseable = true;
            //        dockablecontent.Close();
            //    }

            //    var istview = IoC.Get<FacilitiesViewModel>();
            //    HideDockWindow(istview);
            //}

            //var eventAggregator = IoC.Get<IEventAggregator>();
            //eventAggregator.PublishOnUIThread(new OpenMenuItemsChangedEvent(_openMenuItems));
        }
예제 #8
0
 public void ClearOpenMenuItems()
 {
     _openMenuItems.Clear();
     _documentArea = DockArea.Master;
 }
예제 #9
0
 //MEF constructor
 public DockWindowManager()
 {
     _documentArea  = DockArea.Master;
     _openMenuItems = new List <DockArea>();
 }
예제 #10
0
        public void ShowDocumentWindow(object viewModel, object context = null, bool selectWhenShown = true, DockArea dockArea = DockArea.Master)
        {
            var dockingManager = GetDockingManager();

            var dockableContent = GetDockable(viewModel, context, dockArea, true);

            ShowWindowInLocation(dockArea, dockingManager, dockableContent);
        }
예제 #11
0
        void OnNodeSelected(object sender, SelectionChangedEventArgs e)
        {
            UpdateHistoryButtons();

            IView[] newViews;
            if (e.Selection == null)
            {
                newViews = new IView[0];
            }
            else if (!e.Selection.ShowViews)
            {
                return;
            }
            else
            {
                newViews = Views.LocateViews(e.Selection).ToArray();
            }

            var newActualViews = new Dictionary <IView, DockContent>();

            foreach (var view in newViews)
            {
                DockContent content;
                if (!currentViews.TryGetValue(view, out content))
                {
                    content = new DockContent {
                        HideOnClose        = true,
                        CloseButtonVisible = false,
                        CloseButton        = false
                    };
                    content.DockHandler.ActivateOnShow = false;
                    view.ViewControl.Dock = DockStyle.Fill;
                    UpdateViewContainer(e.Selection.Node, view, content);

                    content.Controls.Add(view.ViewControl);
                    Modules.Activate();
                }
                newActualViews.Add(view, content);
            }

            DockArea.SuspendLayout(true);

            IDockContent activeView = null;

            if (currentViews.Count > 0)
            {
                activeView = currentViews.Values.First().PanelPane.ActiveContent;
            }
            if (!newActualViews.Values.Contains(activeView))
            {
                activeView = null;
            }

            foreach (var view in newActualViews)
            {
                view.Key.Model = e.Selection;
                view.Value.Show(DockArea, DockState.Document);
                if (activeView == null)
                {
                    activeView = view.Value;
                }
            }

            foreach (var prevView in currentViews)
            {
                if (!newActualViews.ContainsKey(prevView.Key))
                {
                    prevView.Value.Hide();
                    prevView.Key.Model = null;
                }
                else
                {
                    UpdateViewContainer(e.Selection.Node, prevView.Key, prevView.Value);
                }
            }
            currentViews = newActualViews;

            if (activeView != null)
            {
                activeView.DockHandler.PanelPane.ActiveContent = activeView;
            }
            Modules.Activate();
            DockArea.ResumeLayout(true, true);
        }
예제 #12
0
 void MainFormFormClosing(object sender, FormClosingEventArgs e)
 {
     DockArea.SaveAsXml("LaserGRBL.Docking.xml");
     Core.CloseCom();
 }
예제 #13
0
 public DockRegionState(DockArea area, Size size) : this(area)
 {
     Size = size;
 }
예제 #14
0
 public DockRegionState(DockArea area) : this()
 {
     Area = area;
 }
예제 #15
0
 public CrownDockTabArea(DockArea dockArea)
 {
     DockArea = dockArea;
 }
예제 #16
0
 public ContentArea(DockingManager manager, DockArea dockArea)
     : this(dockArea)
 {
     DockingManager = manager;
 }