1 | unit UCDPopupMenu;
|
---|
2 |
|
---|
3 | {$mode Delphi}{$H+}
|
---|
4 |
|
---|
5 | interface
|
---|
6 |
|
---|
7 | uses
|
---|
8 | Classes, SysUtils, Menus, Forms, Controls, Dialogs,
|
---|
9 | ExtCtrls, ComCtrls, UCDCommon;
|
---|
10 |
|
---|
11 | type
|
---|
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 |
|
---|
43 | implementation
|
---|
44 |
|
---|
45 | uses
|
---|
46 | UCDManagerTabs, UCDCustomize, UCDManager;
|
---|
47 |
|
---|
48 | resourcestring
|
---|
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 |
|
---|
71 | procedure TCDPopupMenu.UncheckMenuGroup(Item: TMenuItem);
|
---|
72 | var
|
---|
73 | I: Integer;
|
---|
74 | begin
|
---|
75 | for I := 0 to Item.Count - 1 do
|
---|
76 | Item.Items[I].Checked := False;
|
---|
77 | end;
|
---|
78 |
|
---|
79 | procedure TCDPopupMenu.PopupExecute(Sender: TObject);
|
---|
80 | begin
|
---|
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;
|
---|
87 | end;
|
---|
88 |
|
---|
89 | constructor TCDPopupMenu.Create(AManager: TCDManagerBase);
|
---|
90 | var
|
---|
91 | NewMenuItem: TMenuItem;
|
---|
92 | NewMenuItem2: TMenuItem;
|
---|
93 | begin
|
---|
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);
|
---|
182 | end;
|
---|
183 |
|
---|
184 | procedure TCDPopupMenu.PopupMenuTabsClick(Sender: TObject);
|
---|
185 | begin
|
---|
186 | TCDManager(Manager).DockStyle := dsTabs;
|
---|
187 | end;
|
---|
188 |
|
---|
189 | procedure TCDPopupMenu.PopupMenuPopupListClick(Sender: TObject);
|
---|
190 | begin
|
---|
191 | TCDManager(Manager).DockStyle := dsPopupList;
|
---|
192 | end;
|
---|
193 |
|
---|
194 | procedure TCDPopupMenu.PopupMenuPopupTabsClick(Sender: TObject);
|
---|
195 | begin
|
---|
196 | TCDManager(Manager).DockStyle := dsPopupTabs;
|
---|
197 | end;
|
---|
198 |
|
---|
199 | procedure TCDPopupMenu.PopupMenuCloseClick(Sender: TObject);
|
---|
200 | begin
|
---|
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;
|
---|
209 | end;
|
---|
210 |
|
---|
211 | procedure TCDPopupMenu.PopupMenuRenameClick(Sender: TObject);
|
---|
212 | var
|
---|
213 | Value: string;
|
---|
214 | begin
|
---|
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;
|
---|
232 | end;
|
---|
233 |
|
---|
234 | procedure TCDPopupMenu.PopupMenuPositionAutoClick(Sender: TObject);
|
---|
235 | begin
|
---|
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;
|
---|
245 | end;
|
---|
246 |
|
---|
247 | procedure TCDPopupMenu.PopupMenuPositionLeftClick(Sender: TObject);
|
---|
248 | begin
|
---|
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;
|
---|
258 | end;
|
---|
259 |
|
---|
260 | procedure TCDPopupMenu.PopupMenuPositionRightClick(Sender: TObject);
|
---|
261 | begin
|
---|
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;
|
---|
271 | end;
|
---|
272 |
|
---|
273 | procedure TCDPopupMenu.PopupMenuPositionTopClick(Sender: TObject);
|
---|
274 | begin
|
---|
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;
|
---|
284 | end;
|
---|
285 |
|
---|
286 | procedure TCDPopupMenu.PopupMenuPositionBottomClick(Sender: TObject);
|
---|
287 | begin
|
---|
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;
|
---|
297 | end;
|
---|
298 |
|
---|
299 | procedure TCDPopupMenu.PopupMenuUndockClick(Sender: TObject);
|
---|
300 | var
|
---|
301 | UndockControl: TControl;
|
---|
302 | begin
|
---|
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);
|
---|
313 | end;
|
---|
314 |
|
---|
315 | procedure TCDPopupMenu.PopupMenuCustomizeClick(Sender: TObject);
|
---|
316 | begin
|
---|
317 | with TCDManager(Manager) do
|
---|
318 | if Assigned(Master) and
|
---|
319 | Assigned(Master.Customize) then
|
---|
320 | TCDCustomize(Master.Customize).Execute;
|
---|
321 | end;
|
---|
322 |
|
---|
323 | procedure TCDPopupMenu.PopupMenuLockedClick(Sender: TObject);
|
---|
324 | begin
|
---|
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;
|
---|
333 | end;
|
---|
334 |
|
---|
335 | procedure TCDPopupMenu.PopupMenuHeaderVisibleClick(Sender: TObject);
|
---|
336 | begin
|
---|
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;
|
---|
345 | end;
|
---|
346 |
|
---|
347 | procedure TCDPopupMenu.PopupMenuListClick(Sender: TObject);
|
---|
348 | begin
|
---|
349 | TCDManager(Manager).DockStyle := dsList;
|
---|
350 | end;
|
---|
351 |
|
---|
352 |
|
---|
353 | end.
|
---|
354 |
|
---|