DocumentPaneGroupDropTarget.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*************************************************************************************
  2. Extended WPF Toolkit
  3. Copyright (C) 2007-2013 Xceed Software Inc.
  4. This program is provided to you under the terms of the Microsoft Public
  5. License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
  6. For more features, controls, and fast professional support,
  7. pick up the Plus Edition at http://xceed.com/wpf_toolkit
  8. Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
  9. ***********************************************************************************/
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Windows;
  15. using System.Windows.Media;
  16. using System.Diagnostics;
  17. using Xceed.Wpf.AvalonDock.Layout;
  18. namespace Xceed.Wpf.AvalonDock.Controls
  19. {
  20. internal class DocumentPaneGroupDropTarget : DropTarget<LayoutDocumentPaneGroupControl>
  21. {
  22. internal DocumentPaneGroupDropTarget(LayoutDocumentPaneGroupControl paneControl, Rect detectionRect, DropTargetType type)
  23. : base(paneControl, detectionRect, type)
  24. {
  25. _targetPane = paneControl;
  26. }
  27. LayoutDocumentPaneGroupControl _targetPane;
  28. protected override void Drop(LayoutDocumentFloatingWindow floatingWindow)
  29. {
  30. ILayoutPane targetModel = _targetPane.Model as ILayoutPane;
  31. switch (Type)
  32. {
  33. case DropTargetType.DocumentPaneGroupDockInside:
  34. #region DropTargetType.DocumentPaneGroupDockInside
  35. {
  36. var paneGroupModel = targetModel as LayoutDocumentPaneGroup;
  37. var paneModel = paneGroupModel.Children[0] as LayoutDocumentPane;
  38. var sourceModel = floatingWindow.RootDocument;
  39. paneModel.Children.Insert(0, sourceModel);
  40. }
  41. break;
  42. #endregion
  43. }
  44. base.Drop(floatingWindow);
  45. }
  46. protected override void Drop(LayoutAnchorableFloatingWindow floatingWindow)
  47. {
  48. ILayoutPane targetModel = _targetPane.Model as ILayoutPane;
  49. switch (Type)
  50. {
  51. case DropTargetType.DocumentPaneGroupDockInside:
  52. #region DropTargetType.DocumentPaneGroupDockInside
  53. {
  54. var paneGroupModel = targetModel as LayoutDocumentPaneGroup;
  55. var paneModel = paneGroupModel.Children[0] as LayoutDocumentPane;
  56. var layoutAnchorablePaneGroup = floatingWindow.RootPanel as LayoutAnchorablePaneGroup;
  57. int i = 0;
  58. foreach (var anchorableToImport in layoutAnchorablePaneGroup.Descendents().OfType<LayoutAnchorable>().ToArray())
  59. {
  60. paneModel.Children.Insert(i, anchorableToImport);
  61. i++;
  62. }
  63. }
  64. break;
  65. #endregion
  66. }
  67. base.Drop(floatingWindow);
  68. }
  69. public override System.Windows.Media.Geometry GetPreviewPath(OverlayWindow overlayWindow, LayoutFloatingWindow floatingWindowModel)
  70. {
  71. switch (Type)
  72. {
  73. case DropTargetType.DocumentPaneGroupDockInside:
  74. #region DropTargetType.DocumentPaneGroupDockInside
  75. {
  76. var targetScreenRect = TargetElement.GetScreenArea();
  77. targetScreenRect.Offset(-overlayWindow.Left, -overlayWindow.Top);
  78. return new RectangleGeometry(targetScreenRect);
  79. }
  80. #endregion
  81. }
  82. return null;
  83. }
  84. }
  85. }