/
DockLayoutManagerExt.cs
85 lines (74 loc) · 3.74 KB
/
DockLayoutManagerExt.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using DevExpress.Xpf.Layout.Core;
using DevExpress.Xpf.Docking;
using DevExpress.Xpf.Docking.Platform;
namespace DXDockingForLayoutPurposes {
//S171364
class DockLayoutManagerExt : DockLayoutManager {
IView layoutView;
IView customizationView;
protected override IView CreateLayoutView(IUIElement element) {
layoutView = new CustomLayoutView(element);
return layoutView;
}
protected override IView CreateCustomizationView(IUIElement element) {
customizationView = new MyCustomizationView(element);
return customizationView;
}
}
public class MyCustomizationView : CustomizationView {
public MyCustomizationView(IUIElement viewUIElement)
: base(viewUIElement) {
}
protected override void RegisterListeners() {
base.RegisterUIServiceListener(new LayoutViewSelectionListener());
base.RegisterUIServiceListener(new CustomizationViewUIInteractionListener());
base.RegisterUIServiceListener(new MyCustomizationDraggingListener());//my version
}
}
public class CustomLayoutView : LayoutView {
public CustomLayoutView(IUIElement viewUIElement)
: base(viewUIElement) {
}
protected override void RegisterListeners() {
RegisterUIServiceListener(new LayoutViewRegularDragListener());
RegisterUIServiceListener(new LayoutViewFloatingDragListener());
RegisterUIServiceListener(new LayoutViewReorderingListener());
RegisterUIServiceListener(new MyDragListener());// my version
RegisterUIServiceListener(new LayoutViewNonClientDraggingListener());
RegisterUIServiceListener(new LayoutViewUIInteractionListener());
RegisterUIServiceListener(new LayoutViewSelectionListener());
RegisterUIServiceListener(new LayoutViewActionListener());
}
}
public class MyDragListener : LayoutViewClientDraggingListener {
public override bool CanDrop(Point point, ILayoutElement element) {
DockLayoutElementDragInfo dockLayoutElementDragInfo = new DockLayoutElementDragInfo(this.View, point, element);
BaseLayoutItem draggedItem = dockLayoutElementDragInfo.Item;
BaseLayoutItem target = dockLayoutElementDragInfo.Target;
if (!DragHelper.IsItemInGroup(draggedItem) && !DragHelper.IsTargetInGroup(target)) {
return base.CanDrop(point, element);
}
bool result = DragHelper.AllowMoving(draggedItem, target);
return result;
}
}
public class MyCustomizationDraggingListener : CustomizationViewClientDraggingListener {
public override bool CanDrop(Point point, ILayoutElement element) {
DockLayoutElementDragInfo dockLayoutElementDragInfo = new DockLayoutElementDragInfo(base.View, point, element);
var draggedItem = dockLayoutElementDragInfo.Item;
var target = dockLayoutElementDragInfo.Target;
if ((dockLayoutElementDragInfo.DropTarget is HiddenItemElement || dockLayoutElementDragInfo.DropTarget is HiddenItemsListElement) && dockLayoutElementDragInfo.Item.AllowHide) {
LayoutItemType itemType = dockLayoutElementDragInfo.Item.ItemType;
return (LayoutItemsHelper.IsLayoutItem(dockLayoutElementDragInfo.Item) || itemType == LayoutItemType.Group);
}
if (!DragHelper.IsItemInGroup(draggedItem) && !DragHelper.IsTargetInGroup(target)) {
return base.CanDrop(point, element);
}
return DragHelper.AllowMoving(draggedItem, target);
}
}
}