annotate dwtx/jface/layout/LayoutGenerator.d @ 13:6886832e1ed8

ErrorDialog
author Frank Benoit <benoit@tionex.de>
date Mon, 31 Mar 2008 01:41:52 +0200
parents
children 7ab2f0b11096
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2005, 2006 IBM Corporation and others.
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.layout.LayoutGenerator;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.layout.GridDataFactory;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.layout.LayoutConstants;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.DWT;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.events.ModifyListener;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.graphics.Point;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.layout.GridData;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.layout.GridLayout;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.widgets.Button;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.widgets.Composite;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.widgets.Control;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.widgets.Layout;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.widgets.Scrollable;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwtx.jface.util.Geometry;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.dwthelper.utils;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 /* package */class LayoutGenerator {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 /**
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * Default size for controls with varying contents
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 */
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 private static const Point defaultSize;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 /**
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * Default wrapping size for wrapped labels
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 */
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 private static const int wrapSize = 350;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 private static const GridDataFactory nonWrappingLabelData;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 static this(){
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 defaultSize = new Point(150, 150);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 nonWrappingLabelData = GridDataFactory.fillDefaults().align_(DWT.BEGINNING, DWT.CENTER).grab(false, false);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 private static bool hasStyle(Control c, int style) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 return (c.getStyle() & style) !is 0;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 /**
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * Generates a GridLayout for the given composite by examining its child
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * controls and attaching layout data to any immediate children that do not
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * already have layout data.
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 *
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * @param toGenerate
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * composite to generate a layout for
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 */
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 public static void generateLayout(Composite toGenerate) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 Control[] children = toGenerate.getChildren();
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 for (int i = 0; i < children.length; i++) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 Control control = children[i];
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 // Skip any children that already have layout data
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 if (control.getLayoutData() !is null) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 continue;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 applyLayoutDataTo(control);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 private static void applyLayoutDataTo(Control control) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 defaultsFor(control).applyTo(control);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 /**
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * Creates default factory for this control types:
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 * <ul>
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 * <li>{@link Button} with {@link DWT#CHECK}</li>
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 * <li>{@link Button}</li>
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 * <li>{@link Composite}</li>
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * </ul>
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 * @param control the control the factory is search for
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * @return a default factory for the control
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 */
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 public static GridDataFactory defaultsFor(Control control) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 if ( auto button = cast(Button) control ) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 if (hasStyle(button, DWT.CHECK)) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 return nonWrappingLabelData.copy();
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 } else {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 return GridDataFactory.fillDefaults().align_(DWT.FILL, DWT.CENTER).hint(Geometry.max(button.computeSize(DWT.DEFAULT, DWT.DEFAULT, true), LayoutConstants.getMinButtonSize()));
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 if (auto scrollable = cast(Scrollable) control ) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 if ( auto composite = cast(Composite) scrollable ) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 Layout theLayout = composite.getLayout();
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 if ( cast(GridLayout) theLayout ) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 bool growsHorizontally = false;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 bool growsVertically = false;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 Control[] children = composite.getChildren();
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 for (int i = 0; i < children.length; i++) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 Control child = children[i];
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 GridData data = cast(GridData) child.getLayoutData();
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 if (data !is null) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 if (data.grabExcessHorizontalSpace) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 growsHorizontally = true;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 if (data.grabExcessVerticalSpace) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 growsVertically = true;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 return GridDataFactory.fillDefaults().grab(growsHorizontally, growsVertically);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 bool wrapping = hasStyle(control, DWT.WRAP);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 // Assume any control with the H_SCROLL or V_SCROLL flags are
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 // horizontally or vertically
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 // scrollable, respectively.
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 bool hScroll = hasStyle(control, DWT.H_SCROLL);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 bool vScroll = hasStyle(control, DWT.V_SCROLL);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 bool containsText = hasMethod(control, "setText", [ ArrayWrapperString.classinfo ] ); //$NON-NLS-1$
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 // If the control has a setText method, an addModifyListener method, and
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 // does not have
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 // the DWT.READ_ONLY flag, assume it contains user-editable text.
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 bool userEditable = !hasStyle(control, DWT.READ_ONLY) && containsText && hasMethod(control, "addModifyListener", [ ModifyListener.classinfo ]); //$NON-NLS-1$
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 // For controls containing user-editable text...
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 if (userEditable) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 if (hasStyle(control, DWT.MULTI)) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 vScroll = true;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 if (!wrapping) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 hScroll = true;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 // Compute the horizontal hint
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 int hHint = DWT.DEFAULT;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 bool grabHorizontal = hScroll;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 // For horizontally-scrollable controls, override their horizontal
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 // preferred size
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 // with a constant
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 if (hScroll) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 hHint = defaultSize.x;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 } else {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 // For wrapping controls, there are two cases.
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 // 1. For controls that contain text (like wrapping labels,
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 // read-only text boxes,
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 // etc.) override their preferred size with the preferred wrapping
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 // point and
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 // make them grab horizontal space.
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 // 2. For non-text controls (like wrapping toolbars), assume that
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 // their non-wrapped
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 // size is best.
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 if (wrapping) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 if (containsText) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 hHint = wrapSize;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 grabHorizontal = true;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 int vAlign = DWT.FILL;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 // Heuristic for labels: Controls that contain non-wrapping read-only
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 // text should be
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 // center-aligned rather than fill-aligned
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 if (!vScroll && !wrapping && !userEditable && containsText) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 vAlign = DWT.CENTER;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 return GridDataFactory.fillDefaults().grab(grabHorizontal, vScroll).align_(DWT.FILL, vAlign).hint(hHint, vScroll ? defaultSize.y : DWT.DEFAULT);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 private static bool hasMethod(Control control, String name, ClassInfo[] parameterTypes) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 ClassInfo c = control.classinfo;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 implMissing(__FILE__,__LINE__);
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 pragma(msg, "FIXME dwtx.jface.layout.LayoutGenerator hasMethod reflection" );
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 return true;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 /+ try {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 return c.getMethod(name, parameterTypes) !is null;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 } catch (SecurityException e) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 return false;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 } catch (NoSuchMethodException e) {
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 return false;
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 }+/
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 }
6886832e1ed8 ErrorDialog
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 }