Mercurial > projects > dwt-linux
annotate dwt/widgets/MenuItem.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 | 5a30aa9820f3 |
children |
rev | line source |
---|---|
72 | 1 /******************************************************************************* |
259 | 2 * Copyright (c) 2000, 2008 IBM Corporation and others. |
48 | 3 * All rights reserved. This program and the accompanying materials |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
72 | 10 * Port to the D programming language: |
11 * Frank Benoit <benoit@tionex.de> | |
48 | 12 *******************************************************************************/ |
13 module dwt.widgets.MenuItem; | |
14 | |
15 | |
16 import dwt.widgets.Menu; | |
17 import dwt.widgets.Item; | |
18 import dwt.widgets.Decorations; | |
19 import dwt.graphics.Rectangle; | |
20 import dwt.graphics.Image; | |
21 import dwt.widgets.ImageList; | |
71 | 22 import dwt.DWT; |
48 | 23 import dwt.internal.gtk.OS; |
24 import dwt.events.ArmListener; | |
25 import dwt.events.HelpListener; | |
26 import dwt.events.SelectionListener; | |
27 import dwt.events.SelectionEvent; | |
28 import dwt.widgets.TypedListener; | |
29 import dwt.widgets.Event; | |
30 import dwt.widgets.Display; | |
31 | |
158
de2578a843a7
Tango update to rev 3158, TracedException>Exception, fromUtf8z>fromStringz,Fix Bug in MenuItem Thanx to nascent for the report.
Frank Benoit <benoit@tionex.de>
parents:
152
diff
changeset
|
32 import dwt.dwthelper.utils; |
48 | 33 |
34 /** | |
35 * Instances of this class represent a selectable user interface object | |
36 * that issues notification when pressed and released. | |
37 * <dl> | |
38 * <dt><b>Styles:</b></dt> | |
39 * <dd>CHECK, CASCADE, PUSH, RADIO, SEPARATOR</dd> | |
40 * <dt><b>Events:</b></dt> | |
41 * <dd>Arm, Help, Selection</dd> | |
42 * </dl> | |
43 * <p> | |
44 * Note: Only one of the styles CHECK, CASCADE, PUSH, RADIO and SEPARATOR | |
45 * may be specified. | |
46 * </p><p> | |
47 * IMPORTANT: This class is <em>not</em> intended to be subclassed. | |
48 * </p> | |
259 | 49 * |
50 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a> | |
48 | 51 */ |
52 public class MenuItem : Item { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
53 Menu parent, menu; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
54 GtkAccelGroup* groupHandle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
55 int accelerator; |
48 | 56 |
57 /** | |
58 * Constructs a new instance of this class given its parent | |
59 * (which must be a <code>Menu</code>) and a style value | |
60 * describing its behavior and appearance. The item is added | |
61 * to the end of the items maintained by its parent. | |
62 * <p> | |
63 * The style value is either one of the style constants defined in | |
71 | 64 * class <code>DWT</code> which is applicable to instances of this |
48 | 65 * class, or must be built by <em>bitwise OR</em>'ing together |
66 * (that is, using the <code>int</code> "|" operator) two or more | |
71 | 67 * of those <code>DWT</code> style constants. The class description |
48 | 68 * lists the style constants that are applicable to the class. |
69 * Style bits are also inherited from superclasses. | |
70 * </p> | |
71 * | |
72 * @param parent a menu control which will be the parent of the new instance (cannot be null) | |
73 * @param style the style of control to construct | |
74 * | |
75 * @exception IllegalArgumentException <ul> | |
76 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> | |
77 * </ul> | |
71 | 78 * @exception DWTException <ul> |
48 | 79 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> |
80 * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li> | |
81 * </ul> | |
82 * | |
71 | 83 * @see DWT#CHECK |
84 * @see DWT#CASCADE | |
85 * @see DWT#PUSH | |
86 * @see DWT#RADIO | |
87 * @see DWT#SEPARATOR | |
48 | 88 * @see Widget#checkSubclass |
89 * @see Widget#getStyle | |
90 */ | |
91 public this (Menu parent, int style) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
92 super (parent, checkStyle (style)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
93 this.parent = parent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
94 createWidget (parent.getItemCount ()); |
48 | 95 } |
96 | |
97 /** | |
98 * Constructs a new instance of this class given its parent | |
99 * (which must be a <code>Menu</code>), a style value | |
100 * describing its behavior and appearance, and the index | |
101 * at which to place it in the items maintained by its parent. | |
102 * <p> | |
103 * The style value is either one of the style constants defined in | |
71 | 104 * class <code>DWT</code> which is applicable to instances of this |
48 | 105 * class, or must be built by <em>bitwise OR</em>'ing together |
106 * (that is, using the <code>int</code> "|" operator) two or more | |
71 | 107 * of those <code>DWT</code> style constants. The class description |
48 | 108 * lists the style constants that are applicable to the class. |
109 * Style bits are also inherited from superclasses. | |
110 * </p> | |
111 * | |
112 * @param parent a menu control which will be the parent of the new instance (cannot be null) | |
113 * @param style the style of control to construct | |
114 * @param index the zero-relative index to store the receiver in its parent | |
115 * | |
116 * @exception IllegalArgumentException <ul> | |
117 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> | |
118 * <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li> | |
119 * </ul> | |
71 | 120 * @exception DWTException <ul> |
48 | 121 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> |
122 * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li> | |
123 * </ul> | |
124 * | |
71 | 125 * @see DWT#CHECK |
126 * @see DWT#CASCADE | |
127 * @see DWT#PUSH | |
128 * @see DWT#RADIO | |
129 * @see DWT#SEPARATOR | |
48 | 130 * @see Widget#checkSubclass |
131 * @see Widget#getStyle | |
132 */ | |
133 public this (Menu parent, int style, int index) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
134 super (parent, checkStyle (style)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
135 this.parent = parent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
136 int count = parent.getItemCount (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
137 if (!(0 <= index && index <= count)) { |
71 | 138 error (DWT.ERROR_INVALID_RANGE); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
139 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
140 createWidget (index); |
48 | 141 } |
142 | |
143 void addAccelerator (GtkAccelGroup* accelGroup) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
144 updateAccelerator (accelGroup, true); |
48 | 145 } |
146 | |
147 void addAccelerators (GtkAccelGroup* accelGroup) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
148 addAccelerator (accelGroup); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
149 if (menu !is null) menu.addAccelerators (accelGroup); |
48 | 150 } |
151 | |
152 /** | |
153 * Adds the listener to the collection of listeners who will | |
154 * be notified when the arm events are generated for the control, by sending | |
155 * it one of the messages defined in the <code>ArmListener</code> | |
156 * interface. | |
157 * | |
158 * @param listener the listener which should be notified | |
159 * | |
160 * @exception IllegalArgumentException <ul> | |
161 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> | |
162 * </ul> | |
71 | 163 * @exception DWTException <ul> |
48 | 164 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
165 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
166 * </ul> | |
167 * | |
168 * @see ArmListener | |
169 * @see #removeArmListener | |
170 */ | |
171 public void addArmListener (ArmListener listener) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
172 checkWidget(); |
71 | 173 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
174 TypedListener typedListener = new TypedListener (listener); |
71 | 175 addListener (DWT.Arm, typedListener); |
48 | 176 } |
177 | |
178 /** | |
179 * Adds the listener to the collection of listeners who will | |
180 * be notified when the help events are generated for the control, by sending | |
181 * it one of the messages defined in the <code>HelpListener</code> | |
182 * interface. | |
183 * | |
184 * @param listener the listener which should be notified | |
185 * | |
186 * @exception IllegalArgumentException <ul> | |
187 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> | |
188 * </ul> | |
71 | 189 * @exception DWTException <ul> |
48 | 190 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
191 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
192 * </ul> | |
193 * | |
194 * @see HelpListener | |
195 * @see #removeHelpListener | |
196 */ | |
197 public void addHelpListener (HelpListener listener) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
198 checkWidget(); |
71 | 199 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
200 TypedListener typedListener = new TypedListener (listener); |
71 | 201 addListener (DWT.Help, typedListener); |
48 | 202 } |
203 | |
204 /** | |
205 * Adds the listener to the collection of listeners who will | |
206 * be notified when the menu item is selected by the user, by sending | |
207 * it one of the messages defined in the <code>SelectionListener</code> | |
208 * interface. | |
209 * <p> | |
210 * When <code>widgetSelected</code> is called, the stateMask field of the event object is valid. | |
211 * <code>widgetDefaultSelected</code> is not called. | |
212 * </p> | |
213 * | |
214 * @param listener the listener which should be notified when the menu item is selected by the user | |
215 * | |
216 * @exception IllegalArgumentException <ul> | |
217 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> | |
218 * </ul> | |
71 | 219 * @exception DWTException <ul> |
48 | 220 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
221 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
222 * </ul> | |
223 * | |
224 * @see SelectionListener | |
225 * @see #removeSelectionListener | |
226 * @see SelectionEvent | |
227 */ | |
228 public void addSelectionListener (SelectionListener listener) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
229 checkWidget(); |
71 | 230 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
231 TypedListener typedListener = new TypedListener(listener); |
71 | 232 addListener (DWT.Selection,typedListener); |
233 addListener (DWT.DefaultSelection,typedListener); | |
48 | 234 } |
235 | |
236 static int checkStyle (int style) { | |
71 | 237 return checkBits (style, DWT.PUSH, DWT.CHECK, DWT.RADIO, DWT.SEPARATOR, DWT.CASCADE, 0); |
48 | 238 } |
239 | |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
240 protected override void checkSubclass () { |
71 | 241 if (!isValidSubclass ()) error (DWT.ERROR_INVALID_SUBCLASS); |
48 | 242 } |
243 | |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
244 override void createHandle (int index) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
245 state |= HANDLE; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
246 char [] buffer = "\0"; |
71 | 247 int bits = DWT.CHECK | DWT.RADIO | DWT.PUSH | DWT.SEPARATOR; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
248 switch (style & bits) { |
71 | 249 case DWT.SEPARATOR: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
250 handle = OS.gtk_separator_menu_item_new (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
251 break; |
71 | 252 case DWT.RADIO: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
253 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
254 * Feature in GTK. In GTK, radio button must always be part of |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
255 * a radio button group. In a GTK radio group, one button is always |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
256 * selected. This means that it is not possible to have a single |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
257 * radio button that is unselected. This is necessary to allow |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
258 * applications to implement their own radio behavior or use radio |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
259 * buttons outside of radio groups. The fix is to create a hidden |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
260 * radio button for each radio button we create and add them |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
261 * to the same group. This allows the visible button to be |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
262 * unselected. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
263 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
264 groupHandle = cast(GtkAccelGroup*) OS.gtk_radio_menu_item_new (null); |
71 | 265 if (groupHandle is null) error (DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
266 OS.g_object_ref (groupHandle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
267 OS.gtk_object_sink (cast(GtkObject*)groupHandle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
268 auto group = OS.gtk_radio_menu_item_get_group (cast(GtkRadioMenuItem*) groupHandle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
269 handle = OS.gtk_radio_menu_item_new_with_label (group, buffer.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
270 break; |
71 | 271 case DWT.CHECK: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
272 handle = OS.gtk_check_menu_item_new_with_label (buffer.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
273 break; |
71 | 274 case DWT.PUSH: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
275 default: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
276 handle = OS.gtk_image_menu_item_new_with_label (buffer.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
277 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
278 } |
71 | 279 if (handle is null) error (DWT.ERROR_NO_HANDLES); |
280 if ((style & DWT.SEPARATOR) is 0) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
281 auto label = OS.gtk_bin_get_child (cast(GtkBin*)handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
282 OS.gtk_accel_label_set_accel_widget (cast(GtkAccelLabel*)label, null); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
283 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
284 auto parentHandle = parent.handle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
285 bool enabled = OS.GTK_WIDGET_SENSITIVE (parentHandle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
286 if (!enabled) OS.GTK_WIDGET_SET_FLAGS (parentHandle, OS.GTK_SENSITIVE); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
287 OS.gtk_menu_shell_insert (cast(GtkMenuShell*)parentHandle, handle, index); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
288 if (!enabled) OS.GTK_WIDGET_UNSET_FLAGS (parentHandle, OS.GTK_SENSITIVE); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
289 OS.gtk_widget_show (handle); |
48 | 290 } |
291 | |
292 void fixMenus (Decorations newParent) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
293 if (menu !is null) menu.fixMenus (newParent); |
48 | 294 } |
295 | |
296 /** | |
297 * Returns the widget accelerator. An accelerator is the bit-wise | |
298 * OR of zero or more modifier masks and a key. Examples: | |
71 | 299 * <code>DWT.CONTROL | DWT.SHIFT | 'T', DWT.ALT | DWT.F2</code>. |
48 | 300 * The default value is zero, indicating that the menu item does |
301 * not have an accelerator. | |
302 * | |
303 * @return the accelerator or 0 | |
304 * | |
305 * </ul> | |
71 | 306 * @exception DWTException <ul> |
48 | 307 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
308 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
309 * </ul> | |
310 */ | |
311 public int getAccelerator () { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
312 checkWidget(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
313 return accelerator; |
48 | 314 } |
315 | |
316 GtkAccelGroup* getAccelGroup () { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
317 Menu menu = parent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
318 while (menu !is null && menu.cascade !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
319 menu = menu.cascade.parent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
320 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
321 if (menu is null) return null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
322 Decorations shell = menu.parent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
323 return shell.menuBar is menu ? shell.accelGroup : null; |
48 | 324 } |
325 | |
326 /*public*/ Rectangle getBounds () { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
327 checkWidget(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
328 if (!OS.GTK_WIDGET_MAPPED (handle)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
329 return new Rectangle (0, 0, 0, 0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
330 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
331 int x = OS.GTK_WIDGET_X (handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
332 int y = OS.GTK_WIDGET_Y (handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
333 int width = OS.GTK_WIDGET_WIDTH (handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
334 int height = OS.GTK_WIDGET_HEIGHT (handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
335 return new Rectangle (x, y, width, height); |
48 | 336 } |
337 | |
338 /** | |
339 * Returns <code>true</code> if the receiver is enabled, and | |
340 * <code>false</code> otherwise. A disabled menu item is typically | |
341 * not selectable from the user interface and draws with an | |
342 * inactive or "grayed" look. | |
343 * | |
344 * @return the receiver's enabled state | |
345 * | |
71 | 346 * @exception DWTException <ul> |
48 | 347 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
348 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
349 * </ul> | |
350 * | |
351 * @see #isEnabled | |
352 */ | |
353 public bool getEnabled () { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
354 checkWidget(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
355 return OS.GTK_WIDGET_SENSITIVE (handle); |
48 | 356 } |
357 | |
358 /** | |
359 * Returns the receiver's cascade menu if it has one or null | |
360 * if it does not. Only <code>CASCADE</code> menu items can have | |
361 * a pull down menu. The sequence of key strokes, button presses | |
362 * and/or button releases that are used to request a pull down | |
363 * menu is platform specific. | |
364 * | |
365 * @return the receiver's menu | |
366 * | |
71 | 367 * @exception DWTException <ul> |
48 | 368 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
369 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
370 * </ul> | |
371 */ | |
372 public Menu getMenu () { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
373 checkWidget(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
374 return menu; |
48 | 375 } |
376 | |
240 | 377 String getNameText () { |
378 if ((style & DWT.SEPARATOR) !is 0) return "|"; | |
379 return super.getNameText (); | |
380 } | |
381 | |
48 | 382 /** |
383 * Returns the receiver's parent, which must be a <code>Menu</code>. | |
384 * | |
385 * @return the receiver's parent | |
386 * | |
71 | 387 * @exception DWTException <ul> |
48 | 388 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
389 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
390 * </ul> | |
391 */ | |
392 public Menu getParent () { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
393 checkWidget(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
394 return parent; |
48 | 395 } |
396 | |
397 /** | |
398 * Returns <code>true</code> if the receiver is selected, | |
399 * and false otherwise. | |
400 * <p> | |
401 * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>, | |
402 * it is selected when it is checked. | |
403 * | |
404 * @return the selection state | |
405 * | |
71 | 406 * @exception DWTException <ul> |
48 | 407 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
408 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
409 * </ul> | |
410 */ | |
411 public bool getSelection () { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
412 checkWidget(); |
71 | 413 if ((style & (DWT.CHECK | DWT.RADIO)) is 0) return false; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
414 return cast(bool)OS.gtk_check_menu_item_get_active(cast(GtkCheckMenuItem*)handle); |
48 | 415 } |
416 | |
417 override int /*long*/ gtk_activate (GtkWidget* widget) { | |
71 | 418 if ((style & DWT.CASCADE) !is 0 && menu !is null) return 0; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
419 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
420 * Bug in GTK. When an ancestor menu is disabled and |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
421 * the user types an accelerator key, GTK delivers the |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
422 * the activate signal even though the menu item cannot |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
423 * be invoked using the mouse. The fix is to ignore |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
424 * activate signals when an ancestor menu is disabled. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
425 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
426 if (!isEnabled ()) return 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
427 Event event = new Event (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
428 auto ptr = OS.gtk_get_current_event (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
429 if (ptr !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
430 GdkEvent* gdkEvent = ptr; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
431 switch (gdkEvent.type) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
432 case OS.GDK_KEY_PRESS: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
433 case OS.GDK_KEY_RELEASE: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
434 case OS.GDK_BUTTON_PRESS: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
435 case OS.GDK_2BUTTON_PRESS: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
436 case OS.GDK_BUTTON_RELEASE: { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
437 int state; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
438 OS.gdk_event_get_state (ptr, &state); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
439 setInputState (event, state); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
440 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
441 } |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
48
diff
changeset
|
442 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
443 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
444 OS.gdk_event_free (ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
445 } |
71 | 446 if ((style & DWT.RADIO) !is 0) { |
447 if ((parent.getStyle () & DWT.NO_RADIO_GROUP) is 0) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
448 selectRadio (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
449 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
450 } |
71 | 451 postEvent (DWT.Selection, event); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
452 return 0; |
48 | 453 } |
454 | |
455 override int /*long*/ gtk_select (int /*long*/ item) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
456 parent.selectedItem = this; |
71 | 457 sendEvent (DWT.Arm); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
458 return 0; |
48 | 459 } |
460 | |
461 override int /*long*/ gtk_show_help (GtkWidget* widget, int /*long*/ helpType) { | |
71 | 462 bool handled = hooks (DWT.Help); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
463 if (handled) { |
71 | 464 postEvent (DWT.Help); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
465 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
466 handled = parent.sendHelpEvent (helpType); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
467 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
468 if (handled) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
469 OS.gtk_menu_shell_deactivate (cast(GtkMenuShell*)parent.handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
470 return 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
471 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
472 return 0; |
48 | 473 } |
474 | |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
475 override void hookEvents () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
476 super.hookEvents (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
477 OS.g_signal_connect_closure (handle, OS.activate.ptr, display.closures [ACTIVATE], false); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
478 OS.g_signal_connect_closure (handle, OS.select.ptr, display.closures [SELECT], false); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
479 OS.g_signal_connect_closure_by_id (handle, display.signalIds [SHOW_HELP], 0, display.closures [SHOW_HELP], false); |
48 | 480 } |
481 | |
482 /** | |
483 * Returns <code>true</code> if the receiver is enabled and all | |
484 * of the receiver's ancestors are enabled, and <code>false</code> | |
485 * otherwise. A disabled menu item is typically not selectable from the | |
486 * user interface and draws with an inactive or "grayed" look. | |
487 * | |
488 * @return the receiver's enabled state | |
489 * | |
71 | 490 * @exception DWTException <ul> |
48 | 491 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
492 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
493 * </ul> | |
494 * | |
495 * @see #getEnabled | |
496 */ | |
497 public bool isEnabled () { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
498 return getEnabled () && parent.isEnabled (); |
48 | 499 } |
500 | |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
501 override void releaseChildren (bool destroy) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
502 if (menu !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
503 menu.release (false); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
504 menu = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
505 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
506 super.releaseChildren (destroy); |
48 | 507 } |
508 | |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
509 override void releaseParent () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
510 super.releaseParent (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
511 if (menu !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
512 if (menu.selectedItem is this) menu.selectedItem = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
513 menu.dispose (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
514 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
515 menu = null; |
48 | 516 } |
517 | |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
518 override void releaseWidget () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
519 super.releaseWidget (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
520 auto accelGroup = getAccelGroup (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
521 if (accelGroup !is null) removeAccelerator (accelGroup); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
522 if (groupHandle !is null) OS.g_object_unref (groupHandle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
523 groupHandle = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
524 accelerator = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
525 parent = null; |
48 | 526 } |
527 | |
528 void removeAccelerator (GtkAccelGroup* accelGroup) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
529 updateAccelerator (accelGroup, false); |
48 | 530 } |
531 | |
532 void removeAccelerators (GtkAccelGroup* accelGroup) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
533 removeAccelerator (accelGroup); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
534 if (menu !is null) menu.removeAccelerators (accelGroup); |
48 | 535 } |
536 | |
537 /** | |
538 * Removes the listener from the collection of listeners who will | |
539 * be notified when the arm events are generated for the control. | |
540 * | |
541 * @param listener the listener which should no longer be notified | |
542 * | |
543 * @exception IllegalArgumentException <ul> | |
544 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> | |
545 * </ul> | |
71 | 546 * @exception DWTException <ul> |
48 | 547 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
548 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
549 * </ul> | |
550 * | |
551 * @see ArmListener | |
552 * @see #addArmListener | |
553 */ | |
554 public void removeArmListener (ArmListener listener) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
555 checkWidget(); |
71 | 556 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
557 if (eventTable is null) return; |
71 | 558 eventTable.unhook (DWT.Arm, listener); |
48 | 559 } |
560 | |
561 /** | |
562 * Removes the listener from the collection of listeners who will | |
563 * be notified when the help events are generated for the control. | |
564 * | |
565 * @param listener the listener which should no longer be notified | |
566 * | |
567 * @exception IllegalArgumentException <ul> | |
568 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> | |
569 * </ul> | |
71 | 570 * @exception DWTException <ul> |
48 | 571 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
572 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
573 * </ul> | |
574 * | |
575 * @see HelpListener | |
576 * @see #addHelpListener | |
577 */ | |
578 public void removeHelpListener (HelpListener listener) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
579 checkWidget(); |
71 | 580 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
581 if (eventTable is null) return; |
71 | 582 eventTable.unhook (DWT.Help, listener); |
48 | 583 } |
584 | |
585 /** | |
586 * Removes the listener from the collection of listeners who will | |
587 * be notified when the control is selected by the user. | |
588 * | |
589 * @param listener the listener which should no longer be notified | |
590 * | |
591 * @exception IllegalArgumentException <ul> | |
592 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> | |
593 * </ul> | |
71 | 594 * @exception DWTException <ul> |
48 | 595 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
596 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
597 * </ul> | |
598 * | |
599 * @see SelectionListener | |
600 * @see #addSelectionListener | |
601 */ | |
602 public void removeSelectionListener (SelectionListener listener) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
603 checkWidget(); |
71 | 604 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
605 if (eventTable is null) return; |
71 | 606 eventTable.unhook (DWT.Selection, listener); |
607 eventTable.unhook (DWT.DefaultSelection,listener); | |
48 | 608 } |
609 void selectRadio () { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
610 int index = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
611 MenuItem [] items = parent.getItems (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
612 while (index < items.length && items [index] !is this) index++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
613 int i = index - 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
614 while (i >= 0 && items [i].setRadioSelection (false)) --i; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
615 int j = index + 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
616 while (j < items.length && items [j].setRadioSelection (false)) j++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
617 setSelection (true); |
48 | 618 } |
619 /** | |
620 * Sets the widget accelerator. An accelerator is the bit-wise | |
621 * OR of zero or more modifier masks and a key. Examples: | |
71 | 622 * <code>DWT.MOD1 | DWT.MOD2 | 'T', DWT.MOD3 | DWT.F2</code>. |
623 * <code>DWT.CONTROL | DWT.SHIFT | 'T', DWT.ALT | DWT.F2</code>. | |
48 | 624 * The default value is zero, indicating that the menu item does |
625 * not have an accelerator. | |
626 * | |
627 * @param accelerator an integer that is the bit-wise OR of masks and a key | |
628 * | |
629 * </ul> | |
71 | 630 * @exception DWTException <ul> |
48 | 631 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
632 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
633 * </ul> | |
634 */ | |
635 public void setAccelerator (int accelerator) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
636 checkWidget(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
637 if (this.accelerator is accelerator) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
638 auto accelGroup = getAccelGroup (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
639 if (accelGroup !is null) removeAccelerator (accelGroup); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
640 this.accelerator = accelerator; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
641 if (accelGroup !is null) addAccelerator (accelGroup); |
48 | 642 } |
643 | |
644 /** | |
645 * Enables the receiver if the argument is <code>true</code>, | |
646 * and disables it otherwise. A disabled menu item is typically | |
647 * not selectable from the user interface and draws with an | |
648 * inactive or "grayed" look. | |
649 * | |
650 * @param enabled the new enabled state | |
651 * | |
71 | 652 * @exception DWTException <ul> |
48 | 653 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
654 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
655 * </ul> | |
656 */ | |
657 public void setEnabled (bool enabled) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
658 checkWidget(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
659 if (OS.GTK_WIDGET_SENSITIVE (handle) is enabled) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
660 auto accelGroup = getAccelGroup (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
661 if (accelGroup !is null) removeAccelerator (accelGroup); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
662 OS.gtk_widget_set_sensitive (handle, enabled); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
663 if (accelGroup !is null) addAccelerator (accelGroup); |
48 | 664 } |
665 | |
666 /** | |
667 * Sets the image the receiver will display to the argument. | |
668 * <p> | |
669 * Note: This operation is a hint and is not supported on | |
670 * platforms that do not have this concept (for example, Windows NT). | |
671 * </p> | |
672 * | |
673 * @param image the image to display | |
674 * | |
71 | 675 * @exception DWTException <ul> |
48 | 676 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
677 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
678 * </ul> | |
679 */ | |
150
f2e04420fd6c
reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents:
72
diff
changeset
|
680 public override void setImage (Image image) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
681 checkWidget(); |
71 | 682 if ((style & DWT.SEPARATOR) !is 0) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
683 super.setImage (image); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
684 if (!OS.GTK_IS_IMAGE_MENU_ITEM (cast(GTypeInstance*)handle)) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
685 if (image !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
686 ImageList imageList = parent.imageList; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
687 if (imageList is null) imageList = parent.imageList = new ImageList (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
688 int imageIndex = imageList.indexOf (image); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
689 if (imageIndex is -1) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
690 imageIndex = imageList.add (image); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
691 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
692 imageList.put (imageIndex, image); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
693 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
694 auto pixbuf = imageList.getPixbuf (imageIndex); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
695 auto imageHandle = OS.gtk_image_new_from_pixbuf (pixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
696 OS.gtk_image_menu_item_set_image (cast(GtkImageMenuItem*)handle, imageHandle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
697 OS.gtk_widget_show (imageHandle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
698 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
699 OS.gtk_image_menu_item_set_image (cast(GtkImageMenuItem*)handle, null); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
700 } |
48 | 701 } |
702 | |
703 /** | |
704 * Sets the receiver's pull down menu to the argument. | |
705 * Only <code>CASCADE</code> menu items can have a | |
706 * pull down menu. The sequence of key strokes, button presses | |
707 * and/or button releases that are used to request a pull down | |
708 * menu is platform specific. | |
709 * <p> | |
710 * Note: Disposing of a menu item that has a pull down menu | |
711 * will dispose of the menu. To avoid this behavior, set the | |
712 * menu to null before the menu item is disposed. | |
713 * </p> | |
714 * | |
715 * @param menu the new pull down menu | |
716 * | |
717 * @exception IllegalArgumentException <ul> | |
718 * <li>ERROR_MENU_NOT_DROP_DOWN - if the menu is not a drop down menu</li> | |
719 * <li>ERROR_MENUITEM_NOT_CASCADE - if the menu item is not a <code>CASCADE</code></li> | |
720 * <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed</li> | |
721 * <li>ERROR_INVALID_PARENT - if the menu is not in the same widget tree</li> | |
722 * </ul> | |
71 | 723 * @exception DWTException <ul> |
48 | 724 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
725 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
726 * </ul> | |
727 */ | |
728 public void setMenu (Menu menu) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
729 checkWidget (); |
48 | 730 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
731 /* Check to make sure the new menu is valid */ |
71 | 732 if ((style & DWT.CASCADE) is 0) { |
733 error (DWT.ERROR_MENUITEM_NOT_CASCADE); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
734 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
735 if (menu !is null) { |
71 | 736 if ((menu.style & DWT.DROP_DOWN) is 0) { |
737 error (DWT.ERROR_MENU_NOT_DROP_DOWN); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
738 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
739 if (menu.parent !is parent.parent) { |
71 | 740 error (DWT.ERROR_INVALID_PARENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
741 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
742 } |
48 | 743 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
744 /* Assign the new menu */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
745 Menu oldMenu = this.menu; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
746 if (oldMenu is menu) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
747 auto accelGroup = getAccelGroup (); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
748 if (accelGroup !is null) removeAccelerators (accelGroup); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
749 if (oldMenu !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
750 oldMenu.cascade = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
751 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
752 * Add a reference to the menu we are about |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
753 * to replace or GTK will destroy it. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
754 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
755 OS.g_object_ref (oldMenu.handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
756 OS.gtk_menu_item_remove_submenu (cast(GtkMenuItem*)handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
757 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
758 if ((this.menu = menu) !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
759 menu.cascade = this; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
760 OS.gtk_menu_item_set_submenu (cast(GtkMenuItem*)handle, menu.handle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
761 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
762 if (accelGroup !is null) addAccelerators (accelGroup); |
48 | 763 } |
764 | |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
150
diff
changeset
|
765 override void setOrientation() { |
71 | 766 if ((parent.style & DWT.RIGHT_TO_LEFT) !is 0) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
767 if (handle !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
768 OS.gtk_widget_set_direction (handle, OS.GTK_TEXT_DIR_RTL); |
48 | 769 OS.gtk_container_forall (cast(GtkContainer*)handle, cast(GtkCallback)&Display.setDirectionProcFunc, cast(void*)OS.GTK_TEXT_DIR_RTL); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
770 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
771 } |
48 | 772 } |
773 | |
774 bool setRadioSelection (bool value) { | |
71 | 775 if ((style & DWT.RADIO) is 0) return false; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
776 if (getSelection () !is value) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
777 setSelection (value); |
71 | 778 postEvent (DWT.Selection); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
779 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
780 return true; |
48 | 781 } |
782 | |
783 /** | |
784 * Sets the selection state of the receiver. | |
785 * <p> | |
786 * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>, | |
787 * it is selected when it is checked. | |
788 * | |
789 * @param selected the new selection state | |
790 * | |
71 | 791 * @exception DWTException <ul> |
48 | 792 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
793 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
794 * </ul> | |
795 */ | |
796 public void setSelection (bool selected) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
797 checkWidget(); |
71 | 798 if ((style & (DWT.CHECK | DWT.RADIO)) is 0) return; |
158
de2578a843a7
Tango update to rev 3158, TracedException>Exception, fromUtf8z>fromStringz,Fix Bug in MenuItem Thanx to nascent for the report.
Frank Benoit <benoit@tionex.de>
parents:
152
diff
changeset
|
799 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udACTIVATE); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
800 OS.gtk_check_menu_item_set_active (cast(GtkCheckMenuItem*)handle, selected); |
71 | 801 if ((style & DWT.RADIO) !is 0) OS.gtk_check_menu_item_set_active (cast(GtkCheckMenuItem*)groupHandle, !selected); |
158
de2578a843a7
Tango update to rev 3158, TracedException>Exception, fromUtf8z>fromStringz,Fix Bug in MenuItem Thanx to nascent for the report.
Frank Benoit <benoit@tionex.de>
parents:
152
diff
changeset
|
802 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udACTIVATE); |
48 | 803 } |
804 | |
805 /** | |
806 * Sets the receiver's text. The string may include | |
807 * the mnemonic character and accelerator text. | |
808 * <p> | |
809 * Mnemonics are indicated by an '&' that causes the next | |
810 * character to be the mnemonic. When the user presses a | |
811 * key sequence that matches the mnemonic, a selection | |
812 * event occurs. On most platforms, the mnemonic appears | |
813 * underlined but may be emphasised in a platform specific | |
814 * manner. The mnemonic indicator character '&' can be | |
815 * escaped by doubling it in the string, causing a single | |
816 * '&' to be displayed. | |
817 * </p> | |
818 * <p> | |
819 * Accelerator text is indicated by the '\t' character. | |
820 * On platforms that support accelerator text, the text | |
821 * that follows the '\t' character is displayed to the user, | |
822 * typically indicating the key stroke that will cause | |
823 * the item to become selected. On most platforms, the | |
824 * accelerator text appears right aligned in the menu. | |
825 * Setting the accelerator text does not install the | |
826 * accelerator key sequence. The accelerator key sequence | |
827 * is installed using #setAccelerator. | |
828 * </p> | |
829 * | |
830 * @param string the new text | |
831 * | |
71 | 832 * @exception DWTException <ul> |
48 | 833 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> |
834 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
835 * </ul> | |
836 * | |
837 * @see #setAccelerator | |
838 */ | |
238 | 839 public override void setText (String string) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
840 checkWidget(); |
255
5a30aa9820f3
removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents:
248
diff
changeset
|
841 // DWT extension: allow null for zero length string |
5a30aa9820f3
removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents:
248
diff
changeset
|
842 //if (string is null) error (DWT.ERROR_NULL_ARGUMENT); |
71 | 843 if ((style & DWT.SEPARATOR) !is 0) return; |
158
de2578a843a7
Tango update to rev 3158, TracedException>Exception, fromUtf8z>fromStringz,Fix Bug in MenuItem Thanx to nascent for the report.
Frank Benoit <benoit@tionex.de>
parents:
152
diff
changeset
|
844 if (text.equals(string)) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
845 super.setText (string); |
238 | 846 String accelString = ""; |
158
de2578a843a7
Tango update to rev 3158, TracedException>Exception, fromUtf8z>fromStringz,Fix Bug in MenuItem Thanx to nascent for the report.
Frank Benoit <benoit@tionex.de>
parents:
152
diff
changeset
|
847 int index = string.indexOf ('\t'); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
848 if (index !is -1) { |
240 | 849 bool isRTL = (parent.style & DWT.RIGHT_TO_LEFT) !is 0; |
850 accelString = (isRTL? "" : " ") ~ string.substring (index+1, string.length) ~ (isRTL? " " : ""); | |
158
de2578a843a7
Tango update to rev 3158, TracedException>Exception, fromUtf8z>fromStringz,Fix Bug in MenuItem Thanx to nascent for the report.
Frank Benoit <benoit@tionex.de>
parents:
152
diff
changeset
|
851 string = string.substring (0, index); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
852 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
853 char [] chars = fixMnemonic (string); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
854 auto label = OS.gtk_bin_get_child (cast(GtkBin*)handle); |
248
34409a2fc053
Fix call OS.gtk_label_set_text_with_mnemonic with valid ptr, even for zero length strings.
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
855 OS.gtk_label_set_text_with_mnemonic (cast(GtkLabel*)label, chars.toStringzValidPtr() ); |
48 | 856 |
857 auto ptr = cast(char*)OS.g_malloc (accelString.length + 1); | |
858 ptr[ 0 .. accelString.length ] = accelString; | |
859 ptr[ accelString.length ] = '\0'; | |
860 | |
861 auto oldPtr = OS.GTK_ACCEL_LABEL_GET_ACCEL_STRING (cast(GtkAccelLabel*)label); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
862 OS.GTK_ACCEL_LABEL_SET_ACCEL_STRING (cast(GtkAccelLabel*)label, ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
863 if (oldPtr !is null) OS.g_free (oldPtr); |
48 | 864 } |
865 | |
866 void updateAccelerator (GtkAccelGroup* accelGroup, bool add) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
867 if (accelerator is 0 || !getEnabled ()) return; |
240 | 868 if ((accelerator & DWT.COMMAND) !is 0) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
869 int mask = 0; |
71 | 870 if ((accelerator & DWT.ALT) !is 0) mask |= OS.GDK_MOD1_MASK; |
871 if ((accelerator & DWT.SHIFT) !is 0) mask |= OS.GDK_SHIFT_MASK; | |
872 if ((accelerator & DWT.CONTROL) !is 0) mask |= OS.GDK_CONTROL_MASK; | |
873 int keysym = accelerator & DWT.KEY_MASK; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
874 int newKey = Display.untranslateKey (keysym); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
875 if (newKey !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
876 keysym = newKey; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
877 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
878 switch (keysym) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
879 case '\r': keysym = OS.GDK_Return; break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
880 default: keysym = Display.wcsToMbcs (cast(char) keysym); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
881 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
882 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
883 /* When accel_key is zero, it causes GTK warnings */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
884 if (keysym !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
885 if (add) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
886 OS.gtk_widget_add_accelerator (handle, OS.activate.ptr, accelGroup, keysym, mask, OS.GTK_ACCEL_VISIBLE); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
887 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
888 OS.gtk_widget_remove_accelerator (handle, accelGroup, keysym, mask); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
889 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
890 } |
48 | 891 } |
892 } |