Mercurial > projects > dwt-addons
annotate dwtx/novocode/ishell/DesktopForm.d @ 188:e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 26 Oct 2008 14:54:39 +0100 |
parents | |
children | df4e66472aff |
rev | line source |
---|---|
188
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 /******************************************************************************* |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2 * Copyright (c) 2005 Stefan Zeiger and others. |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.novocode.com/legal/epl-v10.html |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * Stefan Zeiger (szeiger@novocode.com) - initial API and implementation |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 *******************************************************************************/ |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 module dwtx.novocode.ishell.DesktopForm; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 import dwt.DWT; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 import dwt.graphics.Color; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
16 import dwt.graphics.Rectangle; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 import dwt.widgets.Composite; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 import dwt.widgets.Control; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 import dwt.widgets.Display; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 import dwt.widgets.Event; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 import dwt.widgets.Listener; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 import dwt.widgets.Shell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 import dwtx.novocode.ishell.internal.DesktopListener; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 import dwtx.novocode.ishell.InternalShell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 import tango.core.Array; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 /** |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 * A desktop which manages internal shells. |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 * |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 * @author Stefan Zeiger (szeiger@novocode.com) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 * @since Jan 21, 2005 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 * @version $Id: DesktopForm.java 344 2005-07-09 22:37:51 +0000 (Sat, 09 Jul 2005) szeiger $ |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 */ |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 class DesktopForm : Composite |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 private static const InternalShell[] EMPTY_INTERNALSHELL_ARRAY/** = new InternalShell[0]*/; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 private static const int FIRST_SHELL_LOCATION = 32; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 private static const int SHELL_LOCATION_OFFSET = 16; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 private InternalShell activeShell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 private DesktopListener[] desktopListeners; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 private InternalShell[] allShells; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 private InternalShell[] visibleShells; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 private int nextShellLocation = FIRST_SHELL_LOCATION; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 private bool showMaximizedTitle; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 private bool autoMaximize = true; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 private bool enableCtrlTab = true; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 private bool allowDeactivate; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 private Shell shell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 private InternalShell ishell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 private Listener mouseDownFilter, focusInFilter, traverseFilter; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 this(Composite parent, int style) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
60 super(parent, style); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 Display display = getDisplay(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 shell = getShell(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
63 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 Color bg = display.getSystemColor(DWT.COLOR_TITLE_INACTIVE_BACKGROUND); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 setBackground(bg); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
66 int brightness = bg.getRed() + bg.getGreen() + bg.getBlue(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
67 setForeground(display.getSystemColor(brightness > 400 ? DWT.COLOR_BLACK : DWT.COLOR_WHITE)); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
68 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
69 addListener(DWT.Resize, dgListener(&onResize)); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
71 mouseDownFilter = dgListener(&onMouseDownFilter); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 focusInFilter = dgListener(&onFocusInFilter); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 traverseFilter = dgListener(&onTraverseFilter); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
74 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
75 display.addFilter(DWT.MouseDown, mouseDownFilter); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
76 display.addFilter(DWT.FocusIn, focusInFilter); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
77 display.addFilter(DWT.Traverse, traverseFilter); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
78 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
79 addListener(DWT.Dispose, dgListener(&onDispose)); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
80 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
81 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
82 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
83 private void onResize(Event event) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
85 Rectangle ca = getClientArea(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
86 foreach(c; getChildren()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
87 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
88 if(cast(InternalShell)c !is null) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
89 (cast(InternalShell)c).desktopResized(ca); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
93 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
94 private void onMouseDownFilter(Event event) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
96 if(!(cast(Control)event.widget !is null)) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 Control c = cast(Control)event.widget; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
98 if(c.getShell() !is shell) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
99 bool[] desktopHit = new bool[1]; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
100 InternalShell ishell = getInternalShell(c, desktopHit); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
101 if(desktopHit[0] && allowDeactivate) activate(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
102 if(ishell is null) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
103 activate(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
104 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
105 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
106 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
107 private void onFocusInFilter(Event event) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
109 if(!(cast(Control)event.widget !is null)) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
110 Control c = cast(Control)event.widget; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
111 if(c.getShell() !is shell) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
112 bool[] desktopHit = new bool[1]; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
113 ishell = getInternalShell(c, desktopHit); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
114 if(desktopHit[0] && allowDeactivate) activate(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
115 if(ishell is null) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
116 ishell.focusControl = c; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
117 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
118 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
119 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
120 private void onTraverseFilter(Event event) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
121 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
122 if(!enableCtrlTab) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
123 if(!event.doit) return; // don't steal traverse event if a control wants to handle it directly |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
124 if((event.stateMask & DWT.CTRL) is 0) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
125 if(event.detail !is DWT.TRAVERSE_TAB_NEXT && event.detail !is DWT.TRAVERSE_TAB_PREVIOUS) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
126 if(!(cast(Control)event.widget !is null)) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
127 Control c = cast(Control)event.widget; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
128 if(c.getShell() !is shell) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
129 bool[] desktopHit = new bool[1]; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
130 InternalShell ishell = getInternalShell(c, desktopHit); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
131 if(ishell !is null || desktopHit[0]) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
132 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
133 if(event.detail is DWT.TRAVERSE_TAB_NEXT) activateNextShell(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
134 else activatePreviousShell(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
135 event.doit = false; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
136 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
137 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
138 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
139 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
140 private void onDispose(Event event) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
141 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
142 display.removeFilter(DWT.MouseDown, mouseDownFilter); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
143 display.removeFilter(DWT.FocusIn, focusInFilter); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
144 display.removeFilter(DWT.Traverse, traverseFilter); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
145 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
146 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
147 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
148 void manage(InternalShell ishell) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
149 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
150 Rectangle bounds = getBounds(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
151 if(nextShellLocation > bounds.height-100 || nextShellLocation > bounds.width-100) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
152 nextShellLocation = FIRST_SHELL_LOCATION; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
153 ishell.setLocation(bounds.x+nextShellLocation, bounds.y+nextShellLocation); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
154 nextShellLocation += SHELL_LOCATION_OFFSET; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
155 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
156 ishell.addListener(DWT.Dispose, dgListener(&onIshellDispose)); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
157 allShells ~= ishell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
158 if(ishell.isVisible()) visibleShells ~= ishell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
159 notifyDesktopListenersCreate(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
160 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
161 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
162 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
163 private void onIshellDispose(Event event) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
164 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
165 allShells.remove(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
166 visibleShells.remove(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
167 if(ishell is activeShell) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
168 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
169 activateTopmostVisibleShellExcept(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
170 if(autoMaximize && !hasVisibleMaximizedShell()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
171 setAllVisibleMaximized(false); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
172 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
173 notifyDesktopListenersDispose(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
174 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
175 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
176 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
177 private InternalShell activateTopmostVisibleShellExcept(InternalShell except) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
178 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
179 Control[] children = getChildren(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
180 for(int i=0; i<children.length; i++) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
181 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
182 Control c = children[i]; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
183 if(c is except) continue; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
184 if(cast(InternalShell)c !is null && c.isVisible()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
185 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
186 InternalShell ishell = cast(InternalShell)c; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
187 activate(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
188 return ishell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
189 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
190 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
191 activeShell = null; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
192 notifyDesktopListenersActivate(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
193 return null; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
194 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
195 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
196 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
197 void activate(InternalShell ishell) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
198 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
199 if(ishell is activeShell) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
200 checkWidget(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
201 if(ishell !is null) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
202 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
203 if(!ishell.isVisible()) ishell.setVisible(true); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
204 if((ishell.getStyle() & DWT.ON_TOP) !is 0) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
205 ishell.moveAbove(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
206 else |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
207 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
208 InternalShell firstRegular = getTopmostRegularShell(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
209 if(firstRegular !is null && firstRegular !is ishell) ishell.moveAbove(firstRegular); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
210 else |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
211 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
212 Control[] children = getChildren(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
213 if(children.length > 0) ishell.moveAbove(children[0]); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
214 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
215 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
216 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
217 InternalShell oldActiveShell = activeShell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
218 activeShell = ishell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
219 if(oldActiveShell !is null) oldActiveShell.redrawDecorationsAfterActivityChange(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
220 if(ishell !is null) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
221 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
222 if(activeShell.isVisible()) activeShell.redrawDecorationsAfterActivityChange(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
223 setTabList(/**new Control[] { activeShell }*/[ activeShell ]); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
224 activeShell.setFocus(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
225 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
226 else |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
227 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
228 setTabList(/**new Control[] {}*/[]); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
229 forceFocus(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
230 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
231 notifyDesktopListenersActivate(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
232 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
233 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
234 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
235 private InternalShell getTopmostRegularShell() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
236 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
237 foreach(c; getChildren()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
238 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
239 if(!(cast(InternalShell)c !is null)) continue; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
240 if((c.getStyle() & DWT.ON_TOP) is 0) return cast(InternalShell)c; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
241 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
242 return null; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
243 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
244 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
245 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
246 private InternalShell getBottommostOnTopShell() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
247 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
248 Control[] ch = getChildren(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
249 for(int i=ch.length-1; i>=0; i--) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
250 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
251 Control c = ch[i]; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
252 if(!(cast(InternalShell)c !is null)) continue; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
253 if((c.getStyle() & DWT.ON_TOP) !is 0) return cast(InternalShell)c; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
254 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
255 return null; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
256 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
257 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
258 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
259 void shellVisibilityChanged(InternalShell ishell, bool visible) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
260 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
261 if(visible) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
262 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
263 if(!contains(visibleShells, ishell)) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
264 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
265 visibleShells ~= ishell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
266 if(autoMaximize && !ishell.getMaximized() && (ishell.getStyle() & DWT.MAX) !is 0 && hasVisibleMaximizedShell()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
267 ishell.setMaximizedWithoutNotification(true); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
268 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
269 if(ishell.getMaximized()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
270 ishell.desktopResized(getClientArea()); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
271 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
272 else |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
273 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
274 visibleShells.remove(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
275 if(ishell is activeShell) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
276 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
277 activateTopmostVisibleShellExcept(ishell); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
278 if(autoMaximize && !hasVisibleMaximizedShell()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
279 setAllVisibleMaximized(false); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
280 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
281 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
282 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
283 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
284 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
285 private InternalShell getInternalShell(Control c, bool[] desktopHit) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
286 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
287 while(c !is null && c !is /**DesktopForm.*/this) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
288 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
289 if(cast(InternalShell)c !is null && (cast(InternalShell)c).getParent() is this) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
290 return cast(InternalShell)c; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
291 c = c.getParent(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
292 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
293 if(desktopHit !is null && c is /**DesktopForm.*/this) desktopHit[0] = true; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
294 return null; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
295 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
296 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
297 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
298 public InternalShell getActiveShell() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
299 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
300 return activeShell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
301 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
302 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
303 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
304 public InternalShell[] getVisibleShells() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
305 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
306 checkWidget(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
307 return visibleShells; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
308 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
309 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
310 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
311 public InternalShell[] getShells() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
312 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
313 checkWidget(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
314 return allShells; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
315 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
316 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
317 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
318 public void setShowMaximizedTitle(bool b) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
319 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
320 checkWidget(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
321 showMaximizedTitle = b; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
322 Rectangle ca = getClientArea(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
323 foreach(c; getChildren()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
324 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
325 if(cast(InternalShell)c !is null) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
326 (cast(InternalShell)c).desktopResized(ca); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
327 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
328 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
329 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
330 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
331 public bool getShowMaximizedTitle() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
332 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
333 checkWidget(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
334 return showMaximizedTitle; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
335 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
336 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
337 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
338 public void setAutoMaximize(bool b) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
339 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
340 checkWidget(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
341 autoMaximize = b; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
342 bool hasMax = false; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
343 foreach(ins; visibleShells) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
344 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
345 if(ins.getMaximized()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
346 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
347 hasMax = true; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
348 break; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
349 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
350 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
351 if(hasMax) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
352 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
353 // Maximize all shells |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
354 foreach(ins; visibleShells) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
355 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
356 if((ins.getStyle() & DWT.MAX) !is 0) ins.setMaximized(true); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
357 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
358 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
359 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
360 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
361 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
362 public bool getAutoMaximize() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
363 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
364 checkWidget(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
365 return autoMaximize; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
366 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
367 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
368 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
369 public void setEnableCtrlTab(bool b) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
370 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
371 checkWidget(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
372 this.enableCtrlTab = b; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
373 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
374 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
375 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
376 public bool getEnableCtrlTab() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
377 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
378 return enableCtrlTab; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
379 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
380 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
381 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
382 public void setAllowDeactivate(bool b) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
383 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
384 checkWidget(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
385 this.allowDeactivate = b; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
386 if(!allowDeactivate && activeShell is null) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
387 activateTopmostVisibleShellExcept(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
388 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
389 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
390 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
391 public bool getAllowDeactivate() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
392 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
393 return allowDeactivate; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
394 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
395 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
396 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
397 void shellMaximizedOrRestored(InternalShell ishell, bool maximized) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
398 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
399 setAllVisibleMaximized(maximized); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
400 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
401 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
402 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
403 private void setAllVisibleMaximized(bool maximized) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
404 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
405 if(autoMaximize) // maximize or restore all shells |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
406 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
407 foreach(c; getChildren()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
408 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
409 if(cast(InternalShell)c !is null) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
410 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
411 InternalShell ishell = cast(InternalShell)c; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
412 if((ishell.getStyle() & DWT.MAX) !is 0 && ishell.isVisible()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
413 (cast(InternalShell)c).setMaximizedWithoutNotification(maximized); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
414 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
415 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
416 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
417 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
418 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
419 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
420 private void activateNextShell() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
421 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
422 if(activeShell is null) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
423 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
424 activateTopmostVisibleShellExcept(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
425 return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
426 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
427 if(visibleShells.length < 2) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
428 InternalShell topReg = getTopmostRegularShell(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
429 InternalShell botTop = getBottommostOnTopShell(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
430 if((activeShell.getStyle() & DWT.ON_TOP) !is 0) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
431 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
432 activeShell.moveBelow(botTop); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
433 if(topReg !is null) activate(topReg); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
434 else activateTopmostVisibleShellExcept(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
435 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
436 else |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
437 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
438 activeShell.moveBelow(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
439 activateTopmostVisibleShellExcept(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
440 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
441 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
442 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
443 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
444 private void activatePreviousShell() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
445 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
446 if(activeShell is null) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
447 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
448 activateTopmostVisibleShellExcept(null); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
449 return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
450 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
451 if(visibleShells.length < 2) return; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
452 InternalShell topReg = getTopmostRegularShell(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
453 InternalShell botTop = getBottommostOnTopShell(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
454 if(activeShell is topReg && botTop !is null) activate(botTop); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
455 else |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
456 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
457 Control[] ch = getChildren(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
458 for(int i=ch.length-1; i>=0; i--) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
459 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
460 if(cast(InternalShell)ch[i] !is null && ch[i].isVisible()) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
461 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
462 activate(cast(InternalShell)ch[i]); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
463 break; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
464 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
465 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
466 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
467 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
468 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
469 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
470 public void addDesktopListener(DesktopListener l) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
471 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
472 desktopListeners ~= l; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
473 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
474 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
475 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
476 public void removeDesktopListener(DesktopListener l) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
477 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
478 desktopListeners.remove(l); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
479 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
480 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
481 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
482 private void notifyDesktopListenersCreate(InternalShell ishell) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
483 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
484 Event event = new Event(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
485 event.widget = ishell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
486 foreach(l; desktopListeners) l.shellCreated(event); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
487 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
488 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
489 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
490 private void notifyDesktopListenersDispose(InternalShell ishell) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
491 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
492 Event event = new Event(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
493 event.widget = ishell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
494 foreach(l; desktopListeners) l.shellDisposed(event); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
495 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
496 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
497 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
498 private void notifyDesktopListenersActivate(InternalShell ishell) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
499 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
500 Event event = new Event(); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
501 event.widget = ishell; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
502 foreach(l; desktopListeners) l.shellActivated(event); |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
503 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
504 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
505 |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
506 private bool hasVisibleMaximizedShell() |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
507 { |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
508 foreach(ins; visibleShells) |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
509 if(ins.getMaximized()) return true; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
510 return false; |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
511 } |
e3780acbbf80
Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
512 } |