Mercurial > projects > dwt-linux
annotate dwt/custom/StackLayout.d @ 259:c0d810de7093
Update SWT 3.4M7 to 3.4
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 29 Jun 2008 14:33:38 +0200 |
parents | 380bad9f6852 |
children |
rev | line source |
---|---|
150
f2e04420fd6c
reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents:
108
diff
changeset
|
1 /******************************************************************************* |
259 | 2 * Copyright (c) 2000, 2008 IBM Corporation and others. |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.eclipse.org/legal/epl-v10.html |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * IBM Corporation - initial API and implementation |
108 | 10 * Port to the D programming language: |
11 * Frank Benoit <benoit@tionex.de> | |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 *******************************************************************************/ |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 module dwt.custom.StackLayout; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 |
238 | 15 import dwt.dwthelper.utils; |
16 | |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 import dwt.DWT; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 import dwt.graphics.Point; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 import dwt.graphics.Rectangle; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 import dwt.widgets.Composite; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 import dwt.widgets.Control; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 import dwt.widgets.Layout; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 |
103 | 26 import tango.util.Convert; |
27 static import tango.text.Util; | |
28 | |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 /** |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 * This Layout stacks all the controls one on top of the other and resizes all controls |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 * to have the same size and location. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 * The control specified in topControl is visible and all other controls are not visible. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 * Users must set the topControl value to flip between the visible items and then call |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 * layout() on the composite which has the StackLayout. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 * |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 * <p> Here is an example which places ten buttons in a stack layout and |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 * flips between them: |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 * |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 * <pre><code> |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 * public static void main(String[] args) { |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 * Display display = new Display(); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 * Shell shell = new Shell(display); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 * shell.setLayout(new GridLayout()); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 * |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 * final Composite parent = new Composite(shell, DWT.NONE); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 * parent.setLayoutData(new GridData(GridData.FILL_BOTH)); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 * final StackLayout layout = new StackLayout(); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 * parent.setLayout(layout); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 * final Button[] bArray = new Button[10]; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 * for (int i = 0; i < 10; i++) { |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 * bArray[i] = new Button(parent, DWT.PUSH); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 * bArray[i].setText("Button "+i); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 * } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 * layout.topControl = bArray[0]; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 * |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 * Button b = new Button(shell, DWT.PUSH); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 * b.setText("Show Next Button"); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 * final int[] index = new int[1]; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 * b.addListener(DWT.Selection, new Listener(){ |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
60 * public void handleEvent(Event e) { |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 * index[0] = (index[0] + 1) % 10; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 * layout.topControl = bArray[index[0]]; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
63 * parent.layout(); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 * } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 * }); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
66 * |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
67 * shell.open(); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
68 * while (shell !is null && !shell.isDisposed()) { |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
69 * if (!display.readAndDispatch()) |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 * display.sleep(); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
71 * } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 * } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 * </code></pre> |
259 | 74 * |
75 * @see <a href="http://www.eclipse.org/swt/snippets/#stacklayout">StackLayout snippets</a> | |
76 * @see <a href="http://www.eclipse.org/swt/examples.php">DWT Example: LayoutExample</a> | |
77 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a> | |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
78 */ |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
79 |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
80 public class StackLayout : Layout { |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
81 |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
82 /** |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
83 * marginWidth specifies the number of pixels of horizontal margin |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 * that will be placed along the left and right edges of the layout. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
85 * |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
86 * The default value is 0. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
87 */ |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
88 public int marginWidth = 0; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
89 /** |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 * marginHeight specifies the number of pixels of vertical margin |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 * that will be placed along the top and bottom edges of the layout. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 * |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
93 * The default value is 0. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
94 */ |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 public int marginHeight = 0; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
96 |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 /** |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
98 * topControl the Control that is displayed at the top of the stack. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
99 * All other controls that are children of the parent composite will not be visible. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
100 */ |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
101 public Control topControl; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
102 |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
103 protected override Point computeSize(Composite composite, int wHint, int hHint, bool flushCache) { |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
104 Control children[] = composite.getChildren(); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
105 int maxWidth = 0; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
106 int maxHeight = 0; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
107 for (int i = 0; i < children.length; i++) { |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 Point size = children[i].computeSize(wHint, hHint, flushCache); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
109 maxWidth = Math.max(size.x, maxWidth); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
110 maxHeight = Math.max(size.y, maxHeight); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
111 } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
112 int width = maxWidth + 2 * marginWidth; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
113 int height = maxHeight + 2 * marginHeight; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
114 if (wHint !is DWT.DEFAULT) width = wHint; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
115 if (hHint !is DWT.DEFAULT) height = hHint; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
116 return new Point(width, height); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
117 } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
118 |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
119 protected override bool flushCache(Control control) { |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
120 return true; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
121 } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
122 |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
123 protected override void layout(Composite composite, bool flushCache) { |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
124 Control children[] = composite.getChildren(); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
125 Rectangle rect = composite.getClientArea(); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
126 rect.x += marginWidth; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
127 rect.y += marginHeight; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
128 rect.width -= 2 * marginWidth; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
129 rect.height -= 2 * marginHeight; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
130 for (int i = 0; i < children.length; i++) { |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
131 children[i].setBounds(rect); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
132 children[i].setVisible(children[i] is topControl); |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
133 |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
134 } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
135 } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
136 |
238 | 137 String getName () { |
138 String string = this.classinfo.name; | |
103 | 139 int index = tango.text.Util.locatePrior( string ,'.'); |
140 if (index is string.length ) return string; | |
141 return string[ index + 1 .. $ ]; | |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
142 } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
143 |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
144 /** |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
145 * Returns a string containing a concise, human-readable |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
146 * description of the receiver. |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
147 * |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
148 * @return a string representation of the layout |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
149 */ |
238 | 150 public override String toString () { |
151 String string = getName ()~" {"; | |
152 if (marginWidth !is 0) string ~= "marginWidth="~to!(String)(marginWidth)~" "; | |
153 if (marginHeight !is 0) string ~= "marginHeight="~to!(String)(marginHeight)~" "; | |
154 if (topControl !is null) string ~= "topControl="~to!(String)(topControl)~" "; | |
103 | 155 string = tango.text.Util.trim(string); |
156 string ~= "}"; | |
102
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
157 return string; |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
158 } |
12e3e0e477cd
package custom, module and imports ok
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
159 } |