Skip to content

Commit

Permalink
Merge pull request #24 from Dirkster99/Issue18
Browse files Browse the repository at this point in the history
Fix for Issue #18
  • Loading branch information
Dirkster99 authored May 2, 2019
2 parents 7b42421 + c09898d commit c1e5893
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 5 deletions.
77 changes: 73 additions & 4 deletions source/Components/Xceed.Wpf.AvalonDock/DockingManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3354,11 +3354,33 @@ IEnumerable<IDropArea> IOverlayWindowHost.GetDropAreas( LayoutFloatingWindowCont
}
}

foreach( var areaHost in this.FindVisualChildren<LayoutDocumentPaneControl>() )
// Determine if floatingWindow is configured to dock as document or not
bool dockAsDocument = true;
if (isDraggingDocuments == false)
{
_areas.Add( new DropArea<LayoutDocumentPaneControl>(
areaHost,
DropAreaType.DocumentPane ) );
var toolWindow = draggingWindow.Model as LayoutAnchorableFloatingWindow;
if (toolWindow != null)
{
foreach (var item in GetAnchorableInFloatingWindow(draggingWindow))
{
if (item.CanDockAsTabbedDocument == false)
{
dockAsDocument = false;
break;
}
}
}
}

// Dock only documents and tools in DocumentPane if configuration does allow that
if (dockAsDocument == true)
{
foreach( var areaHost in this.FindVisualChildren<LayoutDocumentPaneControl>() )
{
_areas.Add( new DropArea<LayoutDocumentPaneControl>(
areaHost,
DropAreaType.DocumentPane ) );
}
}

foreach( var areaHost in this.FindVisualChildren<LayoutDocumentPaneGroupControl>() )
Expand All @@ -3375,6 +3397,53 @@ IEnumerable<IDropArea> IOverlayWindowHost.GetDropAreas( LayoutFloatingWindowCont
return _areas;
}

/// <summary>
/// Finds all <see cref="LayoutAnchorable"/> objects (toolwindows) within a
/// <see cref="LayoutFloatingWindow"/> (if any) and return them.
/// </summary>
/// <param name="draggingWindow"></param>
/// <returns></returns>
private IEnumerable<LayoutAnchorable> GetAnchorableInFloatingWindow(LayoutFloatingWindowControl draggingWindow)
{
var layoutAnchorableFloatingWindow = draggingWindow.Model as LayoutAnchorableFloatingWindow;
if (layoutAnchorableFloatingWindow != null)
{
//big part of code for getting type
var layoutAnchorablePane = layoutAnchorableFloatingWindow.SinglePane as LayoutAnchorablePane;

if (layoutAnchorablePane != null
&& (layoutAnchorableFloatingWindow.IsSinglePane
&& layoutAnchorablePane.SelectedContent != null))
{
var layoutAnchorable = ((LayoutAnchorablePane)layoutAnchorableFloatingWindow.SinglePane).SelectedContent as LayoutAnchorable;
yield return layoutAnchorable;
}
else
{
foreach (var item in GetLayoutAnchorable(layoutAnchorableFloatingWindow.RootPanel))
{
yield return item;
}
}
}
}

/// <summary>
/// Finds all <see cref="LayoutAnchorable"/> objects (toolwindows) within a
/// <see cref="LayoutAnchorablePaneGroup"/> (if any) and return them.
/// </summary>
/// <param name="layoutAnchPaneGroup"></param>
/// <returns></returns>
internal IEnumerable<LayoutAnchorable> GetLayoutAnchorable(LayoutAnchorablePaneGroup layoutAnchPaneGroup)
{
if (layoutAnchPaneGroup != null)
{
foreach (var anchorable in layoutAnchPaneGroup.Descendents().OfType<LayoutAnchorable>())
{
yield return anchorable;
}
}
}
#endregion
}
}
6 changes: 5 additions & 1 deletion source/MLibTest/MLibTest/Demos/LayoutInitializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@

class LayoutInitializer : ILayoutUpdateStrategy
{
public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer)
public bool BeforeInsertAnchorable(LayoutRoot layout,
LayoutAnchorable anchorableToShow,
ILayoutContainer destinationContainer)
{
// AD wants to add the anchorable into destinationContainer
// just for test provide a new anchorablepane
Expand All @@ -18,6 +20,8 @@ public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorabl
var toolsPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "ToolsPane");
if (toolsPane != null)
{
// do not allow this as Tabbed Document
anchorableToShow.CanDockAsTabbedDocument = false;
toolsPane.Children.Add(anchorableToShow);
return true;
}
Expand Down

0 comments on commit c1e5893

Please sign in to comment.