private static LayoutAnchorablePane CreateAnchorablePane(LayoutRoot layout, Orientation orientation, string paneName, InsertPosition position) { var layoutPanels = layout.Descendents().OfType<LayoutPanel>().ToArray(); var parent = layoutPanels.FirstOrDefault(d => d != null && d.Orientation == orientation); if (parent == null) { parent = layoutPanels.FirstOrDefault(); position = InsertPosition.Start; } var toolsPane = new LayoutAnchorablePane { Name = paneName }; if (parent != null) { if (position == InsertPosition.Start) parent.InsertChildAt(0, toolsPane); else parent.Children.Add(toolsPane); } else { var layoutAnchorableFloatingWindow = new LayoutAnchorableFloatingWindow(); toolsPane.Parent = layoutAnchorableFloatingWindow; } return toolsPane; }
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { switch (connectionId) { case 1: this.ToolBarTray = ((System.Windows.Controls.ToolBarTray)(target)); return; case 2: this.DockingManager = ((Xceed.Wpf.AvalonDock.DockingManager)(target)); return; case 3: this._layoutRoot = ((Xceed.Wpf.AvalonDock.Layout.LayoutRoot)(target)); return; case 4: this.AMLDocumentTree = ((Aml.Toolkit.View.AMLTreeView)(target)); return; case 5: this.DocumentPane = ((Xceed.Wpf.AvalonDock.Layout.LayoutDocumentPane)(target)); return; case 6: this.Floating = ((Xceed.Wpf.AvalonDock.Layout.LayoutAnchorableFloatingWindow)(target)); return; case 7: this.FloatingPane = ((Xceed.Wpf.AvalonDock.Layout.LayoutAnchorablePane)(target)); return; case 8: this.LeftTabSide = ((Xceed.Wpf.AvalonDock.Layout.LayoutAnchorGroup)(target)); return; case 9: this.RightTabSide = ((Xceed.Wpf.AvalonDock.Layout.LayoutAnchorGroup)(target)); return; case 10: this.TopTabSide = ((Xceed.Wpf.AvalonDock.Layout.LayoutAnchorGroup)(target)); return; case 11: this.BottomTabSide = ((Xceed.Wpf.AvalonDock.Layout.LayoutAnchorGroup)(target)); return; case 12: this.statusLabel = ((System.Windows.Controls.TextBlock)(target)); return; case 13: this.LayoutTransformSlider = ((System.Windows.Controls.Slider)(target)); return; } this._contentLoaded = true; }
internal LayoutAnchorableFloatingWindowControl(LayoutAnchorableFloatingWindow model) : base(model) { _model = model; HideWindowCommand = new RelayCommand((p) => OnExecuteHideWindowCommand(p), (p) => CanExecuteHideWindowCommand(p)); }
internal void StartDraggingFloatingWindowForPane(LayoutAnchorablePane paneModel) { if (paneModel.Children.Any(c => !c.CanFloat)) return; var paneAsPositionableElement = paneModel as ILayoutPositionableElement; var paneAsWithActualSize = paneModel as ILayoutPositionableElementWithActualSize; double fwWidth = paneAsPositionableElement.FloatingWidth; double fwHeight = paneAsPositionableElement.FloatingHeight; double fwLeft = paneAsPositionableElement.FloatingLeft; double fwTop = paneAsPositionableElement.FloatingTop; if (fwWidth == 0.0) fwWidth = paneAsWithActualSize.ActualWidth; if (fwHeight == 0.0) fwHeight = paneAsWithActualSize.ActualHeight; var destPane = new LayoutAnchorablePane() { DockWidth = paneAsPositionableElement.DockWidth, DockHeight = paneAsPositionableElement.DockHeight, DockMinHeight = paneAsPositionableElement.DockMinHeight, DockMinWidth = paneAsPositionableElement.DockMinWidth, FloatingLeft = paneAsPositionableElement.FloatingLeft, FloatingTop = paneAsPositionableElement.FloatingTop, FloatingWidth = paneAsPositionableElement.FloatingWidth, FloatingHeight = paneAsPositionableElement.FloatingHeight, }; bool savePreviousContainer = paneModel.FindParent<LayoutFloatingWindow>() == null; int currentSelectedContentIndex = paneModel.SelectedContentIndex; while (paneModel.Children.Count > 0) { var contentModel = paneModel.Children[paneModel.Children.Count - 1] as LayoutAnchorable; if (savePreviousContainer) { var contentModelAsPreviousContainer = contentModel as ILayoutPreviousContainer; contentModelAsPreviousContainer.PreviousContainer = paneModel; contentModel.PreviousContainerIndex = paneModel.Children.Count - 1; } paneModel.RemoveChildAt(paneModel.Children.Count - 1); destPane.Children.Insert(0, contentModel); } if (destPane.Children.Count > 0) { destPane.SelectedContentIndex = currentSelectedContentIndex; } LayoutFloatingWindow fw; LayoutFloatingWindowControl fwc; fw = new LayoutAnchorableFloatingWindow() { RootPanel = new LayoutAnchorablePaneGroup( destPane) { DockHeight = destPane.DockHeight, DockWidth = destPane.DockWidth, DockMinHeight = destPane.DockMinHeight, DockMinWidth = destPane.DockMinWidth, } }; Layout.FloatingWindows.Add(fw); fwc = new LayoutAnchorableFloatingWindowControl( fw as LayoutAnchorableFloatingWindow) { Width = fwWidth, Height = fwHeight }; //fwc.Owner = Window.GetWindow(this); //fwc.SetParentToMainWindowOf(this); _fwList.Add(fwc); Layout.CollectGarbage(); InvalidateArrange(); fwc.AttachDrag(); fwc.Show(); }
internal void StartDraggingFloatingWindowForContent(LayoutContent contentModel, bool startDrag = true) { if (!contentModel.CanFloat) return; var contentModelAsAnchorable = contentModel as LayoutAnchorable; if (contentModelAsAnchorable != null && contentModelAsAnchorable.IsAutoHidden) contentModelAsAnchorable.ToggleAutoHide(); var parentPane = contentModel.Parent as ILayoutPane; var parentPaneAsPositionableElement = contentModel.Parent as ILayoutPositionableElement; var parentPaneAsWithActualSize = contentModel.Parent as ILayoutPositionableElementWithActualSize; var contentModelParentChildrenIndex = parentPane.Children.ToList().IndexOf(contentModel); if (contentModel.FindParent<LayoutFloatingWindow>() == null) { ((ILayoutPreviousContainer)contentModel).PreviousContainer = parentPane; contentModel.PreviousContainerIndex = contentModelParentChildrenIndex; } parentPane.RemoveChildAt(contentModelParentChildrenIndex); double fwWidth = contentModel.FloatingWidth; double fwHeight = contentModel.FloatingHeight; if (fwWidth == 0.0) fwWidth = parentPaneAsPositionableElement.FloatingWidth; if (fwHeight == 0.0) fwHeight = parentPaneAsPositionableElement.FloatingHeight; if (fwWidth == 0.0) fwWidth = parentPaneAsWithActualSize.ActualWidth; if (fwHeight == 0.0) fwHeight = parentPaneAsWithActualSize.ActualHeight; LayoutFloatingWindow fw; LayoutFloatingWindowControl fwc; if (contentModel is LayoutAnchorable) { var anchorableContent = contentModel as LayoutAnchorable; fw = new LayoutAnchorableFloatingWindow() { RootPanel = new LayoutAnchorablePaneGroup( new LayoutAnchorablePane(anchorableContent) { DockWidth = parentPaneAsPositionableElement.DockWidth, DockHeight = parentPaneAsPositionableElement.DockHeight, DockMinHeight = parentPaneAsPositionableElement.DockMinHeight, DockMinWidth = parentPaneAsPositionableElement.DockMinWidth, FloatingLeft = parentPaneAsPositionableElement.FloatingLeft, FloatingTop = parentPaneAsPositionableElement.FloatingTop, FloatingWidth = parentPaneAsPositionableElement.FloatingWidth, FloatingHeight = parentPaneAsPositionableElement.FloatingHeight, }) }; Layout.FloatingWindows.Add(fw); fwc = new LayoutAnchorableFloatingWindowControl( fw as LayoutAnchorableFloatingWindow) { Width = fwWidth, Height = fwHeight, Left = contentModel.FloatingLeft, Top = contentModel.FloatingTop }; } else { var anchorableDocument = contentModel as LayoutDocument; fw = new LayoutDocumentFloatingWindow() { RootDocument = anchorableDocument }; Layout.FloatingWindows.Add(fw); fwc = new LayoutDocumentFloatingWindowControl( fw as LayoutDocumentFloatingWindow) { Width = fwWidth, Height = fwHeight, Left = contentModel.FloatingLeft, Top = contentModel.FloatingTop }; } //fwc.Owner = Window.GetWindow(this); //fwc.SetParentToMainWindowOf(this); _fwList.Add(fwc); Layout.CollectGarbage(); UpdateLayout(); Dispatcher.BeginInvoke(new Action(() => { if (startDrag) fwc.AttachDrag(); fwc.Show(); }), DispatcherPriority.Send); }