source: Docking/CoolDocking/UCDPopupMenu.pas

Last change on this file was 437, checked in by chronos, 12 years ago
  • Fixed: Better switching tabbed controls.
File size: 10.9 KB
Line 
1unit UCDPopupMenu;
2
3{$mode Delphi}{$H+}
4
5interface
6
7uses
8 Classes, SysUtils, Menus, Forms, Controls, Dialogs,
9 ExtCtrls, ComCtrls, UCDCommon;
10
11type
12
13 { TCDPopupMenu }
14
15 TCDPopupMenu = class(TPopupMenu)
16 private
17 procedure PopupExecute(Sender: TObject);
18 procedure PopupMenuHeaderVisibleClick(Sender: TObject);
19 public
20 Manager: TCDManagerBase;
21 PositionMenu: TMenuItem;
22 StyleMenu: TMenuItem;
23 LockedMenu: TMenuItem;
24 HeaderVisibleMenu: TMenuItem;
25 constructor Create(AManager: TCDManagerBase);
26 procedure UncheckMenuGroup(Item: TMenuItem);
27 procedure PopupMenuListClick(Sender: TObject);
28 procedure PopupMenuTabsClick(Sender: TObject);
29 procedure PopupMenuPopupListClick(Sender: TObject);
30 procedure PopupMenuPopupTabsClick(Sender: TObject);
31 procedure PopupMenuCloseClick(Sender: TObject);
32 procedure PopupMenuRenameClick(Sender: TObject);
33 procedure PopupMenuPositionAutoClick(Sender: TObject);
34 procedure PopupMenuPositionLeftClick(Sender: TObject);
35 procedure PopupMenuPositionRightClick(Sender: TObject);
36 procedure PopupMenuPositionTopClick(Sender: TObject);
37 procedure PopupMenuPositionBottomClick(Sender: TObject);
38 procedure PopupMenuUndockClick(Sender: TObject);
39 procedure PopupMenuCustomizeClick(Sender: TObject);
40 procedure PopupMenuLockedClick(Sender: TObject);
41 end;
42
43implementation
44
45uses
46 UCDManagerTabs, UCDCustomize, UCDManager;
47
48resourcestring
49 SDockStyle = 'Style';
50 SDockList = 'List';
51 SDockTabs = 'Tabs';
52 SDockPopupList = 'Popup list';
53 SDockPopupTabs = 'Popup tabs';
54 SCloseForm = 'Close';
55 SRenameForm = 'Rename';
56 SPosition = 'Position';
57 SPositionAuto = 'Auto';
58 SPositionTop = 'Top';
59 SPositionLeft = 'Left';
60 SPositionRight = 'Right';
61 SPositionBottom = 'Bottom';
62 SUndock = 'Undock';
63 SCustomize = 'Customize...';
64 SEnterNewWindowName = 'Enter new window name';
65 SRenameWindow = 'Rename window';
66 SLocked = 'Locked';
67 SHeaderVisible = 'Header visible';
68
69{ TCDPopupMenu }
70
71procedure TCDPopupMenu.UncheckMenuGroup(Item: TMenuItem);
72var
73 I: Integer;
74begin
75 for I := 0 to Item.Count - 1 do
76 Item.Items[I].Checked := False;
77end;
78
79procedure TCDPopupMenu.PopupExecute(Sender: TObject);
80begin
81 UncheckMenuGroup(StyleMenu);
82 StyleMenu.Items[Integer(TCDManager(Manager).DockStyle)].Checked := True;
83 UncheckMenuGroup(PositionMenu);
84 PositionMenu.Items[Integer(TCDManager(Manager).HeaderPos)].Checked := True;;
85 LockedMenu.Checked := TCDManager(Manager).Locked;
86 HeaderVisibleMenu.Checked := TCDManager(Manager).HeaderVisible;
87end;
88
89constructor TCDPopupMenu.Create(AManager: TCDManagerBase);
90var
91 NewMenuItem: TMenuItem;
92 NewMenuItem2: TMenuItem;
93begin
94 inherited Create(nil);
95 Manager := AManager;
96
97 Name := GetUniqueName(TCDManager(AManager).DockSite.Name + 'PopupMenu');
98 OnPopup := PopupExecute;
99
100 StyleMenu := TMenuItem.Create(Self);
101 StyleMenu.Caption := SDockStyle;
102 Items.Add(StyleMenu);
103
104 NewMenuItem2 := TMenuItem.Create(StyleMenu);
105 NewMenuItem2.Caption := SDockList;
106 NewMenuItem2.OnClick := PopupMenuListClick;
107 StyleMenu.Add(NewMenuItem2);
108
109 NewMenuItem2 := TMenuItem.Create(StyleMenu);
110 NewMenuItem2.Caption := SDockTabs;
111 NewMenuItem2.OnClick := PopupMenuTabsClick;
112 StyleMenu.Add(NewMenuItem2);
113
114 NewMenuItem2 := TMenuItem.Create(StyleMenu);
115 NewMenuItem2.Caption := SDockPopupTabs;
116 NewMenuItem2.OnClick := PopupMenuPopupTabsClick;
117 StyleMenu.Add(NewMenuItem2);
118
119 NewMenuItem2 := TMenuItem.Create(StyleMenu);
120 NewMenuItem2.Caption := SDockPopupList;
121 NewMenuItem2.OnClick := PopupMenuPopupListClick;
122 StyleMenu.Add(NewMenuItem2);
123
124 PositionMenu := TMenuItem.Create(Self);
125 PositionMenu.Caption := SPosition;
126 Items.Add(PositionMenu);
127
128 NewMenuItem2 := TMenuItem.Create(PositionMenu);
129 NewMenuItem2.Caption := SPositionAuto;
130 NewMenuItem2.OnClick := PopupMenuPositionAutoClick;
131 PositionMenu.Add(NewMenuItem2);
132
133 NewMenuItem2 := TMenuItem.Create(PositionMenu);
134 NewMenuItem2.Caption := SPositionLeft;
135 NewMenuItem2.OnClick := PopupMenuPositionLeftClick;
136 PositionMenu.Add(NewMenuItem2);
137
138 NewMenuItem2 := TMenuItem.Create(PositionMenu);
139 NewMenuItem2.Caption := SPositionTop;
140 NewMenuItem2.OnClick := PopupMenuPositionTopClick;
141 PositionMenu.Add(NewMenuItem2);
142
143 NewMenuItem2 := TMenuItem.Create(PositionMenu);
144 NewMenuItem2.Caption := SPositionRight;
145 NewMenuItem2.OnClick := PopupMenuPositionRightClick;
146 PositionMenu.Add(NewMenuItem2);
147
148 NewMenuItem2 := TMenuItem.Create(PositionMenu);
149 NewMenuItem2.Caption := SPositionBottom;
150 NewMenuItem2.OnClick := PopupMenuPositionBottomClick;
151 PositionMenu.Add(NewMenuItem2);
152
153 NewMenuItem := TMenuItem.Create(Self);
154 NewMenuItem.Caption := SCloseForm;
155 NewMenuItem.OnClick := PopupMenuCloseClick;
156 Items.Add(NewMenuItem);
157
158 NewMenuItem := TMenuItem.Create(Self);
159 NewMenuItem.Caption := SRenameForm;
160 NewMenuItem.OnClick := PopupMenuRenameClick;
161 Items.Add(NewMenuItem);
162
163 NewMenuItem := TMenuItem.Create(Self);
164 NewMenuItem.Caption := SUndock;
165 NewMenuItem.OnClick := PopupMenuUndockClick;
166 Items.Add(NewMenuItem);
167
168 NewMenuItem := TMenuItem.Create(Self);
169 NewMenuItem.Caption := SCustomize;
170 NewMenuItem.OnClick := PopupMenuCustomizeClick;
171 Items.Add(NewMenuItem);
172
173 LockedMenu := TMenuItem.Create(Self);
174 LockedMenu.Caption := SLocked;
175 LockedMenu.OnClick := PopupMenuLockedClick;
176 Items.Add(LockedMenu);
177
178 HeaderVisibleMenu := TMenuItem.Create(Self);
179 HeaderVisibleMenu.Caption := SHeaderVisible;
180 HeaderVisibleMenu.OnClick := PopupMenuHeaderVisibleClick;
181 Items.Add(HeaderVisibleMenu);
182end;
183
184procedure TCDPopupMenu.PopupMenuTabsClick(Sender: TObject);
185begin
186 TCDManager(Manager).DockStyle := dsTabs;
187end;
188
189procedure TCDPopupMenu.PopupMenuPopupListClick(Sender: TObject);
190begin
191 TCDManager(Manager).DockStyle := dsPopupList;
192end;
193
194procedure TCDPopupMenu.PopupMenuPopupTabsClick(Sender: TObject);
195begin
196 TCDManager(Manager).DockStyle := dsPopupTabs;
197end;
198
199procedure TCDPopupMenu.PopupMenuCloseClick(Sender: TObject);
200begin
201 if PopupComponent is TPageControl then
202 with TPageControl(PopupComponent) do begin
203 TForm(TCDManagerTabsItem(TCDManagerTabs(Manager).DockItems[TabIndex]).Control).Close;
204 end;
205 if PopupComponent is TCDHeader then
206 with TCDHeader(PopupComponent) do begin
207 TForm(Control).Close;
208 end;
209end;
210
211procedure TCDPopupMenu.PopupMenuRenameClick(Sender: TObject);
212var
213 Value: string;
214begin
215 //ShowMessage(PopupComponent.ClassName);
216 if PopupComponent is TPageControl then
217 with TPageControl(PopupComponent) do begin
218 Value := TCDManagerTabsItem(TCDManagerTabs(Manager).DockItems[TabIndex]).Control.Caption;
219 if InputQuery(SRenameWindow, SEnterNewWindowName, False, Value) then begin
220 TCDManagerTabsItem(TCDManagerTabs(Manager).DockItems[TabIndex]).Control.Caption := Value;
221 Pages[TabIndex].Caption := Value;
222 end;
223 end;
224 if PopupComponent is TCDHeader then
225 with TCDHeader(PopupComponent) do begin
226 Value := Control.Caption;
227 if InputQuery(SRenameWindow, SEnterNewWindowName, False, Value) then begin
228 Control.Caption := Value;
229 Invalidate;
230 end;
231 end;
232end;
233
234procedure TCDPopupMenu.PopupMenuPositionAutoClick(Sender: TObject);
235begin
236 if PopupComponent is TPageControl then
237 with TPageControl(PopupComponent) do begin
238 TCDManagerTabs(Manager).HeaderPos := hpAuto;
239 end else
240 if PopupComponent is TCDHeader then
241 with TCDHeader(PopupComponent) do begin
242 TCDManager(TWinControl(Control).DockManager).HeaderPos := hpTop;
243 Invalidate;
244 end;
245end;
246
247procedure TCDPopupMenu.PopupMenuPositionLeftClick(Sender: TObject);
248begin
249 if PopupComponent is TPageControl then
250 with TPageControl(PopupComponent) do begin
251 TCDManagerTabs(Manager).HeaderPos := hpLeft;
252 end else
253 if PopupComponent is TCDHeader then
254 with TCDHeader(PopupComponent) do begin
255 TCDManager(TWinControl(Control).DockManager).HeaderPos := hpLeft;
256 Invalidate;
257 end;
258end;
259
260procedure TCDPopupMenu.PopupMenuPositionRightClick(Sender: TObject);
261begin
262 if PopupComponent is TPageControl then
263 with TPageControl(PopupComponent) do begin
264 TCDManagerTabs(Manager).HeaderPos := hpRight;
265 end else
266 if PopupComponent is TCDHeader then
267 with TCDHeader(PopupComponent) do begin
268 TCDManager(TWinControl(Control).DockManager).HeaderPos := hpRight;
269 Invalidate;
270 end;
271end;
272
273procedure TCDPopupMenu.PopupMenuPositionTopClick(Sender: TObject);
274begin
275 if PopupComponent is TPageControl then
276 with TPageControl(PopupComponent) do begin
277 TCDManagerTabs(Manager).HeaderPos := hpTop;
278 end else
279 if PopupComponent is TCDHeader then
280 with TCDHeader(PopupComponent) do begin
281 TCDManager(TWinControl(Control).DockManager).HeaderPos := hpTop;
282 Invalidate;
283 end;
284end;
285
286procedure TCDPopupMenu.PopupMenuPositionBottomClick(Sender: TObject);
287begin
288 if PopupComponent is TPageControl then
289 with TPageControl(PopupComponent) do begin
290 TCDManagerTabs(Manager).HeaderPos := hpBottom;
291 end else
292 if PopupComponent is TCDHeader then
293 with TCDHeader(PopupComponent) do begin
294 TCDManager(TWinControl(Control).DockManager).HeaderPos := hpBottom;
295 Invalidate;
296 end;
297end;
298
299procedure TCDPopupMenu.PopupMenuUndockClick(Sender: TObject);
300var
301 UndockControl: TControl;
302begin
303 if PopupComponent is TPageControl then
304 with TPageControl(PopupComponent) do begin
305 UndockControl := TCDManagerTabsItem(TCDManagerTabs(Manager).DockItems[TabIndex]).Control;
306 end else
307 if PopupComponent is TCDHeader then
308 with TCDHeader(PopupComponent) do begin
309 UndockControl := Control;
310 end else UndockControl := nil;
311 if Assigned(UndockControl) then
312 UndockControl.ManualFloat(UndockControl.BoundsRect);
313end;
314
315procedure TCDPopupMenu.PopupMenuCustomizeClick(Sender: TObject);
316begin
317 with TCDManager(Manager) do
318 if Assigned(Master) and
319 Assigned(Master.Customize) then
320 TCDCustomize(Master.Customize).Execute;
321end;
322
323procedure TCDPopupMenu.PopupMenuLockedClick(Sender: TObject);
324begin
325 if PopupComponent is TPageControl then
326 with TPageControl(PopupComponent) do begin
327 TCDManagerTabs(Manager).Locked := not TCDManagerTabs(Manager).Locked;
328 end else
329 if PopupComponent is TCDHeader then
330 with TCDHeader(PopupComponent) do begin
331 TCDManagerTabs(Manager).Locked := not TCDManagerTabs(Manager).Locked;
332 end;
333end;
334
335procedure TCDPopupMenu.PopupMenuHeaderVisibleClick(Sender: TObject);
336begin
337 if PopupComponent is TPageControl then
338 with TPageControl(PopupComponent) do begin
339 TCDManagerTabs(Manager).HeaderVisible := not TCDManagerTabs(Manager).HeaderVisible;
340 end else
341 if PopupComponent is TCDHeader then
342 with TCDHeader(PopupComponent) do begin
343 TCDManagerTabs(Manager).HeaderVisible := not TCDManagerTabs(Manager).HeaderVisible;
344 end;
345end;
346
347procedure TCDPopupMenu.PopupMenuListClick(Sender: TObject);
348begin
349 TCDManager(Manager).DockStyle := dsList;
350end;
351
352
353end.
354
Note: See TracBrowser for help on using the repository browser.