/
MyTabbedMdiManager.cs
127 lines (107 loc) · 3.17 KB
/
MyTabbedMdiManager.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using DevExpress.Utils;
using DevExpress.Utils.Menu;
using DevExpress.XtraTab;
using DevExpress.XtraTab.Registrator;
using DevExpress.XtraTabbedMdi;
namespace CustomTabbedMdiManager
{
public class MyTabbedMdiManager : XtraTabbedMdiManager
{
private bool headerShowActiveFilesButton;
public MyTabbedMdiManager(IContainer container)
: base(container)
{
}
public MyTabbedMdiManager()
{
}
protected override BaseViewInfoRegistrator GetView()
{
BaseViewInfoRegistrator view = base.GetView();
SkinViewInfoRegistrator skinView = view as SkinViewInfoRegistrator;
if ( skinView == null )
return view;
return new MySkinViewInfoRegistrator();
}
protected override void CreateView()
{
if ( ViewInfo != null )
ViewInfo.ActiveFilesButtonClick -= new EventHandler<ActiveFilesButtonClickEventArgs>(OnActiveFilesButtonClick);
base.CreateView();
ViewInfo.ActiveFilesButtonClick += new EventHandler<ActiveFilesButtonClickEventArgs>(OnActiveFilesButtonClick);
}
protected virtual DXPopupMenu CreateActiveFilesPopupMenu()
{
return new DXPopupMenu();
}
protected virtual DXMenuItem CreateMenuItem(XtraMdiTabPage page)
{
DXMenuItem menuItem = new DXMenuItem();
menuItem.Caption = page.Text;
menuItem.Image = GetMdiTabPageImage(page);
menuItem.Tag = page.MdiChild;
return menuItem;
}
protected Image GetMdiTabPageImage(XtraMdiTabPage page)
{
if ( page.Image != null )
return page.Image;
return ImageCollection.GetImageListImage(page.TabControl.Images, page.ImageIndex);
}
protected virtual void OnActiveFilesButtonClick(object sender, ActiveFilesButtonClickEventArgs e)
{
Form parentForm = this.MdiParent;
if ( parentForm == null )
return;
DXPopupMenu activeFilesPopupMenu = CreateActiveFilesPopupMenu();
foreach ( XtraMdiTabPage page in this.Pages )
{
if ( !page.PageVisible || !page.PageEnabled )
continue;
DXMenuItem menuItem = CreateMenuItem(page);
menuItem.Click += new EventHandler(OnActiveFilesButtonMenuItemClick);
activeFilesPopupMenu.Items.Add(menuItem);
}
IXtraTab xtraTabIntf = this as IXtraTab;
if ( xtraTabIntf == null )
return;
Point menuPos = new Point(e.ButtonInfo.Bounds.X, e.ButtonInfo.Bounds.Bottom);
MenuManagerHelper.GetMenuManager(xtraTabIntf.LookAndFeel).ShowPopupMenu(activeFilesPopupMenu, parentForm, menuPos);
}
private void OnActiveFilesButtonMenuItemClick(object sender, EventArgs e)
{
DXMenuItem menuItem = (DXMenuItem)sender;
Form childForm = menuItem.Tag as Form;
if ( childForm != null )
childForm.BringToFront();
}
[DefaultValue(false)]
public bool HeaderShowActiveFilesButton
{
get
{
return headerShowActiveFilesButton;
}
set
{
if ( headerShowActiveFilesButton == value )
return;
headerShowActiveFilesButton = value;
if ( ViewInfo != null )
ViewInfo.AddActiveFilesButton = value;
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new MySkinTabControlViewInfo ViewInfo
{
get
{
return base.ViewInfo as MySkinTabControlViewInfo;
}
}
}
}