예제 #1
0
        private IEnumerable <DockPane> GetPinnedDockPanes(WindowsManager windowsManager, Dock dock)
        {
            DockPanel dockPanel;

            switch (dock)
            {
            case Dock.Top:
                dockPanel = windowsManager.TopPinnedWindows;
                break;

            case Dock.Bottom:
                dockPanel = windowsManager.BottomPinnedWindows;
                break;

            case Dock.Left:
                dockPanel = windowsManager.LeftPinnedWindows;
                break;

            default:
                dockPanel = windowsManager.RightPinnedWindows;
                break;
            }

            return((from FrameworkElement element in dockPanel.Children select element).OfType <DockPane>().OrderBy(Panel.GetZIndex));
        }
        public VisualPropertyPageManager(Cuisine.Windows.WindowsManager manager)
        {
            t_manager = manager;
            _app      = PaintualUI.Code.Application.Instance;

            _app.ActiveContentHelper.CurrentDrawingBoardChanged += Refresh;
        }
예제 #3
0
        /// <summary>
        /// Gets the dock panel from headers.
        /// </summary>
        /// <param name="windowsManager">The windows manager.</param>
        /// <param name="headerDock">The header dock.</param>
        /// <returns></returns>
        private IEnumerable <DockPane> GetDockPanelFromHeaders(WindowsManager windowsManager, Dock headerDock)
        {
            StackPanel headerHost;

            switch (headerDock)
            {
            case Dock.Top:
                headerHost = windowsManager.TopWindowHeaders;
                break;

            case Dock.Bottom:
                headerHost = windowsManager.BottomWindowHeaders;
                break;

            case Dock.Left:
                headerHost = windowsManager.LeftWindowHeaders;
                break;

            default:
                headerHost = windowsManager.RightWindowHeaders;
                break;
            }

            return((from FrameworkElement element in headerHost.Children select element.DataContext).OfType <DockPane>().OrderBy(Panel.GetZIndex));
        }
        /// <summary>
        /// Writes the windows manager.
        /// </summary>
        /// <param name="windowsManager">The windows manager.</param>
        protected override void WriteWindowsManager(WindowsManager windowsManager)
        {
            XmlElement xmlElement = _document.CreateElement("WindowsManager");

            _document.AppendChild(xmlElement);
            _elementStack.Push(xmlElement);
        }
예제 #5
0
        /// <summary>
        /// Transfers the windows manager contents after desealization has finished
        /// </summary>
        /// <param name="windowsManager">The windows manager.</param>
        private void TransferWindowsManagerContents(WindowsManager windowsManager)
        {
            windowsManager.Clear();

            // Transfer auto hide and pinned windows for all dock points);
            foreach (Dock dockPosition in DockPositions)
            {
                DockedWindows dockedWindows = _dockedWindows[dockPosition];

                foreach (DockPane pinnedPane in dockedWindows.PinnedPanes)
                {
                    windowsManager.AddPinnedWindow(pinnedPane, dockPosition);
                }

                foreach (DockPane autoHidePane in dockedWindows.AutoHidePanes)
                {
                    windowsManager.AddAutoHideWindow(autoHidePane, dockPosition);
                }
            }

            // Transfer floating windows
            foreach (DockPane floatingPane in _floatingWindows)
            {
                windowsManager.AddFloatingWindow(floatingPane);
            }

            // Transfer document content
            switch (_rootContainer.State)
            {
            case DocumentContainerState.Empty:
                break;

            case DocumentContainerState.ContainsDocuments:
                List <object> documents = new List <object>(_rootContainer.Documents);
                _rootContainer.Clear();
                foreach (object document in documents)
                {
                    if (document is DocumentContent)
                    {
                        DocumentContent documentContent = (document as DocumentContent);
                        documentContent.DetachDockPane();
                        windowsManager.DocumentContainer.AddDocument(documentContent.DockPane);
                    }
                }
                break;

            case DocumentContainerState.SplitHorizontally:
                TransferDocumentGrid(windowsManager, true);
                break;

            case DocumentContainerState.SplitVertically:
                TransferDocumentGrid(windowsManager, false);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #6
0
        /// <summary>
        /// Serializes the specified windows manager to the stream
        /// </summary>
        /// <remarks>Caller must be responsible for closing the stream</remarks>
        /// <param name="stream">Stream to serialize contents of windows manager to</param>
        /// <param name="windowsManager">Windows manager to serialize</param>
        /// <exception cref="ArgumentNullException">stream or windowsManager are null</exception>
        /// <exception cref="InvalidOperationException">stream is not writable</exception>
        public void Serialize(Stream stream, WindowsManager windowsManager)
        {
            Cuisine.Utilities.Validate.NotNull(stream, "stream");
            Cuisine.Utilities.Validate.NotNull(windowsManager, "windowsManager");
            Cuisine.Utilities.Validate.Assert <InvalidOperationException>(stream.CanWrite);

            InitializeStream(stream);
            NavigateWindowsManager(windowsManager);
        }
예제 #7
0
        private void WritePinnedPanes(WindowsManager windowsManager)
        {
            InitializePinnedPanes();
            Dock[] docks = new[] { Dock.Left, Dock.Top, Dock.Right, Dock.Bottom };

            foreach (Dock dock in docks)
            {
                WritePinnedPanes(GetPinnedDockPanes(windowsManager, dock), dock);
            }
            FinalizePinnedPanes();
        }
예제 #8
0
        /// <summary>
        /// Transfers the document grid from _rootContainer to the main document container of specified windows manager
        /// </summary>
        /// <param name="windowsManager">The windows manager whose document content is the target of transferred child contents from _rootContainer</param>
        /// <param name="isHorizontal">if set to <c>true</c> indicates horizontal orientation otherwise vertical orientation</param>
        private void TransferDocumentGrid(WindowsManager windowsManager, bool isHorizontal)
        {
            Grid contentGrid = _rootContainer.Content as Grid;

            Cuisine.Utilities.Validate.Assert <ArgumentNullException>(contentGrid != null);

            _rootContainer.Clear();
            List <DocumentContainer> documentContainers = new List <DocumentContainer>(contentGrid.Children.OfType <DocumentContainer>());

            contentGrid.Children.Clear();

            windowsManager.DocumentContainer.AddDocumentContainers(documentContainers, isHorizontal);
        }
예제 #9
0
        /// <summary>
        /// Called when tab item is dragged
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The <see cref="System.Windows.Input.MouseButtonEventArgs"/> instance containing the event data.</param>
        private void OnTabItemMouseMove(object sender, RoutedEventArgs args)
        {
            if ((Mouse.LeftButton != MouseButtonState.Pressed) || (!DragStarted))
            {
                return;
            }

            // Check for minimum distance in order to start drag
            Vector distance = Mouse.GetPosition(this) - DragStartPoint;

            if ((Math.Abs(distance.X) < SystemParameters.MinimumHorizontalDragDistance) &&
                (Math.Abs(distance.Y) < SystemParameters.MinimumVerticalDragDistance))
            {
                return;
            }

            DragStarted = false;

            WindowsManager windowsManager = this.GetLogicalParent <WindowsManager>();
            TabItem        currentItem    = (args.OriginalSource as FrameworkElement).GetVisualParent <TabItem>();

            if (currentItem == null)
            {
                return;
            }

            currentItem.Header  = null;
            currentItem.Content = null;

            DocumentContent dockPaneContent = currentItem.DataContext as DocumentContent;

            Documents.Remove(dockPaneContent);
            dockPaneContent.DetachDockPane();

            windowsManager.DocumentContainer.MergeEmptyDocumentContainers();

            Point    currentMousePoint = Mouse.GetPosition(windowsManager);
            DockPane pane = dockPaneContent.DockPane;

            Canvas.SetLeft(pane, currentMousePoint.X - pane.ActualWidth / 2);
            Canvas.SetTop(pane, currentMousePoint.Y);
            windowsManager.AddFloatingWindow(pane);
        }
예제 #10
0
        /// <summary>
        /// Navigates the windows manager and serializes content
        /// </summary>
        /// <param name="windowsManager">The windows manager.</param>
        private void NavigateWindowsManager(WindowsManager windowsManager)
        {
            // Write windows manager itself
            WriteWindowsManager(windowsManager);

            // Write header panes
            WriteHeaderPanes(windowsManager);

            // Write pinned panes
            WritePinnedPanes(windowsManager);

            // Write floating panes
            WriteFloatingPanes(windowsManager);

            // Write document container
            WriteDocumentContainers(windowsManager.DocumentContainer);

            FinalizeSerialization();
        }
예제 #11
0
        /// <summary>
        /// Removes the document.
        /// </summary>
        /// <param name="documentContent">DocumentContent to remove</param>
        private void RemoveDocument(DocumentContent documentContent)
        {
            if (documentContent == null)
            {
                return;
            }

            Documents.Remove(documentContent);

            documentContent.DockPane.CloseCommand.Execute(null);

            if (Documents.Count == 0)
            {
                State = DocumentContainerState.Empty;

                WindowsManager parentWindowsManager = this.GetVisualParent <WindowsManager>();
                if (parentWindowsManager != null)
                {
                    ReduceChild(parentWindowsManager.DocumentContainer);
                }
            }
        }
예제 #12
0
        /// <summary>
        /// Deserializes the specified windows manager from the stream.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="windowsManager">The windows manager.</param>
        /// <exception cref="ArgumentNullException">stream or windowsManager are null</exception>
        /// <exception cref="InvalidOperationException">stream is not readable</exception>
        public void Deserialize(Stream stream, WindowsManager windowsManager)
        {
            Cuisine.Utilities.Validate.NotNull(stream, "stream");
            Cuisine.Utilities.Validate.NotNull(windowsManager, "windowsManager");
            Cuisine.Utilities.Validate.Assert <InvalidOperationException>(stream.CanRead);

            _dockedWindows   = new Dictionary <Dock, DockedWindows>();
            _floatingWindows = new List <DockPane>();
            _rootContainer   = null;
            DockPositions.ForEach(dock => _dockedWindows[dock] = new DockedWindows());

            // Initialize stream
            InitializeStream(stream);

            // Navigate windows manager
            NavigateWindowsManager();

            // Finalize deserialization
            FinalizeDeserialization();

            // Transfer contents to windows manager
            TransferWindowsManagerContents(windowsManager);
        }
예제 #13
0
 /// <summary>
 /// Writes the windows manager.
 /// </summary>
 /// <param name="windowsManager">The windows manager.</param>
 protected abstract void WriteWindowsManager(WindowsManager windowsManager);
예제 #14
0
        private void WriteFloatingPanes(WindowsManager windowsManager)
        {
            IEnumerable <DockPane> floatingPanes = (from FrameworkElement element in windowsManager.FloatingPanel.Children select element).OfType <DockPane>();

            WriteFloatingPanes(floatingPanes);
        }