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