annotate dwt/widgets/Combo.d @ 241:4653e99936cf

Fix missing switch default in Combo
author Frank Benoit <benoit@tionex.de>
date Mon, 12 May 2008 19:27:09 +0200
parents ce446666f5a2
children 5a30aa9820f3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
1 /*******************************************************************************
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
72
5899e0b43e5d porting notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
10 * Port to the D programming language:
5899e0b43e5d porting notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
11 * Frank Benoit <benoit@tionex.de>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwt.widgets.Combo;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
16 import dwt.DWT;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.internal.gtk.OS;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.graphics.Point;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.events.SelectionListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.events.SelectionEvent;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.events.ModifyListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.events.VerifyListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.widgets.Shell;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.widgets.Composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.widgets.Event;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.widgets.TypedListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27
200
08789b28bdf3 import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
28 import dwt.dwthelper.utils;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import tango.stdc.stringz;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import Math = tango.math.Math;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 * Instances of this class are controls that allow the user
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 * to choose an item from a list of items, or optionally
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * enter a new value by typing it into an editable text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 * field. Often, <code>Combo</code>s are used in the same place
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 * where a single selection <code>List</code> widget could
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * be used but space is limited. A <code>Combo</code> takes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * less space than a <code>List</code> widget and shows
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * similar information.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * Note: Since <code>Combo</code>s can contain both a list
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * and an editable text field, it is possible to confuse methods
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * which access one versus the other (compare for example,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * <code>clearSelection()</code> and <code>deselectAll()</code>).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * The API documentation is careful to indicate either "the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * receiver's list" or the "the receiver's text field" to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * distinguish between the two cases.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * </p><p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * Note that although this class is a subclass of <code>Composite</code>,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * it does not make sense to add children to it, or set a layout on it.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * <dl>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * <dt><b>Styles:</b></dt>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * <dd>DROP_DOWN, READ_ONLY, SIMPLE</dd>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * <dt><b>Events:</b></dt>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * <dd>DefaultSelection, Modify, Selection, Verify</dd>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * </dl>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * Note: Only one of the styles DROP_DOWN and SIMPLE may be specified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * </p><p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * IMPORTANT: This class is <em>not</em> intended to be subclassed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * @see List
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 public class Combo : Composite {
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
68
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
69 alias Composite.computeSize computeSize;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
70 alias Composite.createHandle createHandle;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
71 alias Composite.dragDetect dragDetect;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
72 alias Composite.setBackgroundColor setBackgroundColor;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
73 alias Composite.setBounds setBounds;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
74 alias Composite.setForegroundColor setForegroundColor;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
75 alias Composite.setToolTipText setToolTipText;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
76 alias Composite.translateTraversal translateTraversal;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
77
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
78 GtkWidget* buttonHandle, entryHandle, listHandle, textRenderer, cellHandle, popupHandle;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 int lastEventTime, visibleCount = 5;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 GdkEventKey* gdkEventKey;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 int fixStart = -1, fixEnd = -1;
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
82 String[] items;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 bool ignoreSelect, lockText;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 static const int INNER_BORDER = 2;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * the operating system limit for the number of characters
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 * that the text field in an instance of this class can hold
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 public const static int LIMIT = 0xFFFF;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 * These values can be different on different platforms.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 * Therefore they are not initialized in the declaration
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * to stop the compiler from inlining.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 //static {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 // LIMIT = 0xFFFF;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 //}
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * Constructs a new instance of this class given its parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * and a style value describing its behavior and appearance.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 * The style value is either one of the style constants defined in
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
107 * class <code>DWT</code> which is applicable to instances of this
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 * class, or must be built by <em>bitwise OR</em>'ing together
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 * (that is, using the <code>int</code> "|" operator) two or more
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
110 * of those <code>DWT</code> style constants. The class description
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 * lists the style constants that are applicable to the class.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 * Style bits are also inherited from superclasses.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 * @param parent a composite control which will be the parent of the new instance (cannot be null)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 * @param style the style of control to construct
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
121 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
126 * @see DWT#DROP_DOWN
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
127 * @see DWT#READ_ONLY
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
128 * @see DWT#SIMPLE
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 * @see Widget#checkSubclass
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 * @see Widget#getStyle
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 public this (Composite parent, int style) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 super (parent, checkStyle (style));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 * Adds the argument to the end of the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 * @param string the new item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
144 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 * @see #add(String,int)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
151 public void add (String string) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
153 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 add (string, items.length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 * Adds the argument to the receiver's list at the given
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 * zero-relative index.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 * Note: To add an item at the end of the list, use the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * result of calling <code>getItemCount()</code> as the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 * index or use <code>add(String)</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 * @param string the new item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 * @param index the index for the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 * <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list (inclusive)</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
173 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 * @see #add(String)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
180 public void add (String string, int index) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
182 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 if (!(0 <= index && index <= items.length)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
184 error (DWT.ERROR_INVALID_RANGE);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 }
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
186 String [] newItems = new String[]( items.length + 1 );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 System.arraycopy (items, 0, newItems, 0, index);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 newItems [index] = string;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 System.arraycopy (items, index, newItems, index + 1, items.length - index);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 items = newItems;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 char* buffer = toStringz(string);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
193 OS.gtk_combo_box_insert_text (handle, index, buffer);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
194 if ((style & DWT.RIGHT_TO_LEFT) !is 0 && popupHandle !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
195 display.doSetDirectionProc( popupHandle, OS.GTK_TEXT_DIR_RTL);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
196 }
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 * Feature in GTK. When the list is empty and the first item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 * is added, the combo box selects that item replacing the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 * text in the entry field. The fix is to avoid this by
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * stopping the "delete" and "insert_text" signal emission.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 ignoreSelect = lockText = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 auto item = OS.gtk_list_item_new_with_label (buffer);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
206 auto label = OS.gtk_bin_get_child (item);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 setForegroundColor (label, getForegroundColor ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 OS.gtk_widget_modify_font (label, getFontDescription ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 OS.gtk_widget_set_direction (label, OS.gtk_widget_get_direction (handle));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 OS.gtk_widget_show (item);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 auto items = OS.g_list_append (null, item);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
212 OS.gtk_list_insert_items (listHandle, items, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 ignoreSelect = lockText = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * Adds the listener to the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 * be notified when the receiver's text is modified, by sending
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 * it one of the messages defined in the <code>ModifyListener</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 * interface.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 * @param listener the listener which should be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
228 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 * @see ModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * @see #removeModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 public void addModifyListener (ModifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
238 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 TypedListener typedListener = new TypedListener (listener);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
240 addListener (DWT.Modify, typedListener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 * Adds the listener to the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 * be notified when the user changes the receiver's selection, by sending
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 * it one of the messages defined in the <code>SelectionListener</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * interface.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 * <code>widgetSelected</code> is called when the user changes the combo's list selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed the combo's text area.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 * @param listener the listener which should be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
258 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 * @see SelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 * @see #removeSelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 * @see SelectionEvent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 public void addSelectionListener(SelectionListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
269 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 TypedListener typedListener = new TypedListener (listener);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
271 addListener (DWT.Selection,typedListener);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
272 addListener (DWT.DefaultSelection,typedListener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 * Adds the listener to the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 * be notified when the receiver's text is verified, by sending
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * it one of the messages defined in the <code>VerifyListener</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 * interface.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 * @param listener the listener which should be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
286 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 * @see VerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 * @see #removeVerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 * @since 3.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 public void addVerifyListener (VerifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
298 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 TypedListener typedListener = new TypedListener (listener);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
300 addListener (DWT.Verify, typedListener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 static int checkStyle (int style) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 * Feature in Windows. It is not possible to create
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 * a combo box that has a border using Windows style
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 * bits. All combo boxes draw their own border and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 * do not use the standard Windows border styles.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 * Therefore, no matter what style bits are specified,
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
310 * clear the BORDER bits so that the DWT style will
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * match the Windows widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 * The Windows behavior is currently implemented on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 * all platforms.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
316 style &= ~DWT.BORDER;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 * Even though it is legal to create this widget
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 * with scroll bars, they serve no useful purpose
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * because they do not automatically scroll the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 * widget's client area. The fix is to clear
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
323 * the DWT style.
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
325 style &= ~(DWT.H_SCROLL | DWT.V_SCROLL);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
326 style = checkBits (style, DWT.DROP_DOWN, DWT.SIMPLE, 0, 0, 0, 0);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
327 if ((style & DWT.SIMPLE) !is 0) return style & ~DWT.READ_ONLY;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 return style;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
331 protected override void checkSubclass () {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
332 if (!isValidSubclass ()) error (DWT.ERROR_INVALID_SUBCLASS);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 * Sets the selection in the receiver's text field to an empty
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 * selection starting just before the first character. If the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 * text field is editable, this has the effect of placing the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 * i-beam at the start of the text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 * Note: To clear the selected items in the receiver's list,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 * use <code>deselectAll()</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
345 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 * @see #deselectAll
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 public void clearSelection () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 if (entryHandle !is null) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
355 int position = OS.gtk_editable_get_position (entryHandle);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
356 OS.gtk_editable_select_region (entryHandle, position, position);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 void clearText () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
363 if ((style & DWT.READ_ONLY) !is 0) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
364 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 if (index !is -1) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
366 auto modelHandle = OS.gtk_combo_box_get_model (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 char* ptr;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 GtkTreeIter iter;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
369 OS.gtk_tree_model_iter_nth_child (modelHandle, &iter, null, index);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
370 OS.gtk_tree_model_get1 (modelHandle, &iter, 0, cast(void**)&ptr );
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
371 if (fromStringz(ptr).length > 0) postEvent (DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 OS.g_free (ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 char dummy = '\0';
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
376 OS.gtk_entry_set_text (entryHandle, &dummy );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 }
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
378 OS.gtk_combo_box_set_active (handle, -1);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
383 public override Point computeSize (int wHint, int hHint, bool changed) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 return computeNativeSize (handle, wHint, hHint, changed);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
388 if (wHint !is DWT.DEFAULT && wHint < 0) wHint = 0;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
389 if (hHint !is DWT.DEFAULT && hHint < 0) hHint = 0;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 int w, h;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 OS.gtk_widget_realize (entryHandle);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
392 auto layout = OS.gtk_entry_get_layout (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 OS.pango_layout_get_size (layout, &w, &h);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 int xborder = INNER_BORDER, yborder = INNER_BORDER;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 auto style = OS.gtk_widget_get_style (entryHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 xborder += OS.gtk_style_get_xthickness (style);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 yborder += OS.gtk_style_get_ythickness (style);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 int property;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 OS.gtk_widget_style_get1 (entryHandle, OS.interior_focus.ptr, &property);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 if (property is 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 OS.gtk_widget_style_get1 (entryHandle, OS.focus_line_width.ptr, &property);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 xborder += property ;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 yborder += property ;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 int width = OS.PANGO_PIXELS (w ) + xborder * 2;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 int height = OS.PANGO_PIXELS (h ) + yborder * 2;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 GtkRequisition arrowRequesition;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 OS.gtk_widget_size_request (buttonHandle, &arrowRequesition);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 GtkRequisition listRequesition;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 auto listParent = OS.gtk_widget_get_parent (listHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 OS.gtk_widget_size_request (listParent !is null ? listParent : listHandle, &listRequesition);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 width = Math.max (listRequesition.width, width) + arrowRequesition.width + 4;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
415 width = wHint is DWT.DEFAULT ? width : wHint;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
416 height = hHint is DWT.DEFAULT ? height : hHint;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 return new Point (width, height);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 * Copies the selected text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 * The current selection is copied to the clipboard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
426 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 * @since 2.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 public void copy () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 checkWidget ();
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
435 if (entryHandle !is null) OS.gtk_editable_copy_clipboard (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
438 override void createHandle (int index) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 state |= HANDLE | MENU;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 fixedHandle = cast(GtkWidget*)OS.g_object_new (display.gtk_fixed_get_type (), null);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
441 if (fixedHandle is null) error (DWT.ERROR_NO_HANDLES);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
442 OS.gtk_fixed_set_has_window (fixedHandle, true);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
444 auto oldList = OS.gtk_window_list_toplevels ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
445 if ((style & DWT.READ_ONLY) !is 0) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
446 handle = OS.gtk_combo_box_new_text ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
447 if (handle is null) error (DWT.ERROR_NO_HANDLES);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
448 cellHandle = OS.gtk_bin_get_child (handle);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
449 if (cellHandle is null) error (DWT.ERROR_NO_HANDLES);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 } else {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
451 handle = OS.gtk_combo_box_entry_new_text ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
452 if (handle is null) error (DWT.ERROR_NO_HANDLES);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
453 entryHandle = OS.gtk_bin_get_child (handle);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
454 if (entryHandle is null) error (DWT.ERROR_NO_HANDLES);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 }
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
456 popupHandle = findPopupHandle (oldList);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
457 OS.gtk_container_add (fixedHandle, handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 textRenderer = cast(GtkWidget*)OS.gtk_cell_renderer_text_new ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
459 if (textRenderer is null) error (DWT.ERROR_NO_HANDLES);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 * Feature in GTK. In order to make a read only combo box the same
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 * height as an editable combo box the ypad must be set to 0. In
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 * versions 2.4.x of GTK, a pad of 0 will clip some letters. The
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 * fix is to set the pad to 1.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 int pad = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 if (OS.GTK_VERSION < OS.buildVERSION(2, 6, 0)) pad = 1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 OS.g_object_set1 (textRenderer, OS.ypad.ptr, pad);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 * Feature in GTK. In version 2.4.9 of GTK, a warning is issued
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 * when a call to gtk_cell_layout_clear() is made. The fix is to hide
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 * the warning.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 bool warnings = display.getWarnings ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 display.setWarnings (false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 OS.gtk_cell_layout_clear (handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 display.setWarnings (warnings);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
478 OS.gtk_cell_layout_pack_start (handle, textRenderer, true);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
479 OS.gtk_cell_layout_set_attributes1 (handle, textRenderer, OS.text.ptr, null);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 * Feature in GTK. There is no API to query the button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 * handle from a combo box although it is possible to get the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 * text field. The button handle is needed to hook events. The
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 * fix is to walk the combo tree and find the first child that is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 * an instance of button.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 display.allChildrenCollect (handle, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 if (display.allChildren !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 auto list = display.allChildren;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 while (list !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 auto widget = OS.g_list_data (list);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 if (OS.GTK_IS_BUTTON (cast(GTypeInstance*)widget)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 buttonHandle = cast(GtkWidget*)widget;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 list = OS.g_list_next (list);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 OS.g_list_free (display.allChildren);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 display.allChildren = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 }
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
502 /*
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
503 * Feature in GTK. By default, read only combo boxes
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
504 * process the RETURN key rather than allowing the
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
505 * default button to process the key. The fix is to
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
506 * clear the GTK_RECEIVES_DEFAULT flag.
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
507 */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
508 if ((style & DWT.READ_ONLY) !is 0 && buttonHandle !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
509 OS.GTK_WIDGET_UNSET_FLAGS (buttonHandle, OS.GTK_RECEIVES_DEFAULT);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
510 }
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 } else {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
512 handle = OS.gtk_combo_new ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
513 if (handle is null) error (DWT.ERROR_NO_HANDLES);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
514 OS.gtk_container_add (fixedHandle, handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 GtkCombo* combo = cast(GtkCombo*)handle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 entryHandle = combo.entry;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 listHandle = combo.list;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
519 if (OS.GTK_VERSION < OS.buildVERSION (2, 4, 0)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
520 GtkWidget* parentHandle = null;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
521 auto temp = listHandle;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
522 while ((temp = OS.gtk_widget_get_parent(temp)) !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
523 parentHandle = temp;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
524 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
525 popupHandle = parentHandle;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
526 if (popupHandle !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
527 GtkWidget* modalGroup = getShell().modalGroup;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
528 if (modalGroup !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
529 OS.gtk_window_group_add_window (modalGroup, popupHandle);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
530 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
531 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
532 }
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 * Feature in GTK. There is no API to query the arrow
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 * handle from a combo box although it is possible to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 * get the list and text field. The arrow handle is needed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 * to hook events. The fix is to find the first child that is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 * not the entry or list and assume this is the arrow handle.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 */
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
540 auto list = OS.gtk_container_get_children (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 if (list !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 int i = 0, count = OS.g_list_length (list);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 while (i<count) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 auto childHandle = OS.g_list_nth_data (list, i);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 if (childHandle !is entryHandle && childHandle !is listHandle) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 buttonHandle = cast(GtkWidget*)childHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 i++;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 OS.g_list_free (list);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
554 bool editable = (style & DWT.READ_ONLY) is 0;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
555 OS.gtk_editable_set_editable (entryHandle, editable);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
556 OS.gtk_combo_disable_activate (handle);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
557 OS.gtk_combo_set_case_sensitive (handle, true);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 * Cuts the selected text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 * The current selection is first copied to the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 * clipboard and then deleted from the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
568 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 * @since 2.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 public void cut () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 checkWidget ();
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
577 if (entryHandle !is null) OS.gtk_editable_cut_clipboard (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 override void deregister () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 super.deregister ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 if (buttonHandle !is null) display.removeWidget (buttonHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 if (entryHandle !is null) display.removeWidget (entryHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 if (listHandle !is null) display.removeWidget (listHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 if (imContext !is null) display.removeWidget (cast(GtkWidget*)imContext);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 override bool filterKey (int keyval, GdkEventKey* event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 int time = OS.gdk_event_get_time (cast(GdkEvent*)event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 if (time !is lastEventTime) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 lastEventTime = time;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 if (imContext !is null) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
595 return cast(bool)OS.gtk_im_context_filter_keypress (imContext, event);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 gdkEventKey = event;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
602 GtkWidget* findPopupHandle (GList* oldList) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
603 GtkWidget* hdl = null;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
604 GList* currentList = OS.gtk_window_list_toplevels();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
605 GList* oldFromList = oldList;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
606 GList* newFromList = currentList;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
607 bool isFound;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
608 while (newFromList !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
609 void* newToplevel = OS.g_list_data(newFromList);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
610 isFound = false;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
611 oldFromList = oldList;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
612 while (oldFromList !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
613 void* oldToplevel = OS.g_list_data(oldFromList);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
614 if (newToplevel is oldToplevel) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
615 isFound = true;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
616 break;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
617 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
618 oldFromList = OS.g_list_next(oldFromList);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
619 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
620 if (!isFound) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
621 hdl = cast(GtkWidget*)newToplevel;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
622 break;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
623 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
624 newFromList = OS.g_list_next(newFromList);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
625 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
626 OS.g_list_free(oldList);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
627 OS.g_list_free(currentList);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
628 return hdl;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
629 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
630
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
631 override void fixModal (GtkWidget* group, GtkWidget* modalGroup) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
632 if (popupHandle !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
633 if (group !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
634 OS.gtk_window_group_add_window (group, popupHandle);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
635 } else {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
636 if (modalGroup !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
637 OS.gtk_window_group_remove_window (modalGroup, popupHandle);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
638 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
639 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
640 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
641 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
642
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 void fixIM () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 * The IM filter has to be called one time for each key press event.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 * When the IM is open the key events are duplicated. The first event
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
647 * is filtered by DWT and the second event is filtered by GTK. In some
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 * cases the GTK handler does not run (the widget is destroyed, the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 * application code consumes the event, etc), for these cases the IM
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
650 * filter has to be called by DWT.
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 if (gdkEventKey !is null && gdkEventKey !is cast(GdkEventKey*)-1) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 if (imContext !is null) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
655 OS.gtk_im_context_filter_keypress (imContext, gdkEventKey);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 gdkEventKey = cast(GdkEventKey*)-1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 gdkEventKey = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 override GtkWidget* fontHandle () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 if (entryHandle !is null) return entryHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 return super.fontHandle ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 override GtkWidget* focusHandle () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
670 if ((style & DWT.READ_ONLY) !is 0 && buttonHandle !is null) return buttonHandle;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 if (entryHandle !is null) return entryHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 return super.focusHandle ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
676 override bool hasFocus () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 if (super.hasFocus ()) return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 if (entryHandle !is null && OS.GTK_WIDGET_HAS_FOCUS (entryHandle)) return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 if (listHandle !is null && OS.GTK_WIDGET_HAS_FOCUS (listHandle)) return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
683 override void hookEvents () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 super.hookEvents ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 if (OS.GTK_VERSION >= OS.buildVERSION(2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 OS.g_signal_connect_closure (handle, OS.changed.ptr, display.closures [CHANGED], true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 if (entryHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 OS.g_signal_connect_closure (entryHandle, OS.changed.ptr, display.closures [CHANGED], true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 OS.g_signal_connect_closure (entryHandle, OS.insert_text.ptr, display.closures [INSERT_TEXT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 OS.g_signal_connect_closure (entryHandle, OS.delete_text.ptr, display.closures [DELETE_TEXT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 OS.g_signal_connect_closure (entryHandle, OS.activate.ptr, display.closures [ACTIVATE], false);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
694 OS.g_signal_connect_closure (entryHandle, OS.populate_popup.ptr, display.closures [POPULATE_POPUP], false);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 int eventMask = OS.GDK_POINTER_MOTION_MASK | OS.GDK_BUTTON_PRESS_MASK |
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 OS.GDK_BUTTON_RELEASE_MASK;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 GtkWidget*[] handles = [ buttonHandle, entryHandle, listHandle ];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 for (int i=0; i<handles.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
700 auto eventHandle = handles [i];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 if (eventHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702 /* Connect the mouse signals */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 OS.gtk_widget_add_events (eventHandle, eventMask);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704 OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705 OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, display.closures [BUTTON_RELEASE_EVENT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, display.closures [MOTION_NOTIFY_EVENT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
708 * Feature in GTK. Events such as mouse move are propagated up
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 * the widget hierarchy and are seen by the parent. This is the
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
710 * correct GTK behavior but not correct for DWT. The fix is to
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 * hook a signal after and stop the propagation using a negative
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 * event number to distinguish this case.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT_INVERSE], true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, display.closures [BUTTON_RELEASE_EVENT_INVERSE], true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, display.closures [MOTION_NOTIFY_EVENT_INVERSE], true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718 /* Connect the event_after signal for both key and mouse */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 if (eventHandle !is focusHandle ()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [EVENT_AFTER], 0, display.closures [EVENT_AFTER], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
722 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
723 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
724 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 if (imContext !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 OS.g_signal_connect_closure (imContext, OS.commit.ptr, display.closures [COMMIT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
727 int id = OS.g_signal_lookup (OS.commit.ptr, OS.gtk_im_context_get_type ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728 int blockMask = OS.G_SIGNAL_MATCH_DATA | OS.G_SIGNAL_MATCH_ID;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729 OS.g_signal_handlers_block_matched (imContext, blockMask, id, 0, null, null, entryHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
730 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 GtkIMContext* imContext () {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
734 return entryHandle !is null ? OS.GTK_ENTRY_IM_CONTEXT (entryHandle) : null;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
738 * Deselects the item at the given zero-relative index in the receiver's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
739 * list. If the item at the index was already deselected, it remains
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
740 * deselected. Indices that are out of range are ignored.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 * @param index the index of the item to deselect
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
744 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
745 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
747 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749 public void deselect (int index) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 if (index < 0 || index >= items.length) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
753 if (OS.gtk_combo_box_get_active (handle) is index) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 clearText ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 ignoreSelect = true;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
758 auto children = OS.gtk_container_get_children (listHandle);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
759 auto item = OS.g_list_nth_data (children, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760 bool selected = OS.GTK_WIDGET_STATE (item) is OS.GTK_STATE_SELECTED;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 if (selected) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
762 OS.gtk_list_unselect_all (listHandle);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
763 OS.gtk_entry_set_text (entryHandle, "".ptr );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
771 * Deselects all selected items in the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 * Note: To clear the selection in the receiver's text field,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 * use <code>clearSelection()</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
777 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 * @see #clearSelection
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784 public void deselectAll () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787 clearText ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 ignoreSelect = true;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
790 OS.gtk_list_unselect_all (listHandle);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
791 OS.gtk_entry_set_text (entryHandle, "".ptr );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 override bool dragDetect(int x, int y, bool filter, bool* consume) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 if (filter && entryHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 int index;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800 int trailing;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
801 auto layout = OS.gtk_entry_get_layout (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 OS.pango_layout_xy_to_index (layout, x * OS.PANGO_SCALE, y * OS.PANGO_SCALE, &index, &trailing);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 auto ptr = OS.pango_layout_get_text (layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 int position = cast(int)/*64*/OS.g_utf8_pointer_to_offset (ptr, ptr + index) + trailing;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 Point selection = getSelection ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 if (selection.x <= position && position < selection.y) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 if (super.dragDetect (x, y, filter, consume)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 if (consume !is null) *consume = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814 return super.dragDetect (x, y, filter, consume);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817 override GtkWidget* enterExitHandle () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 return fixedHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 override GdkDrawable* eventWindow () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822 return paintWindow ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 override GdkColor* getBackgroundColor () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 return getBaseColor ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
827 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829 override GdkColor* getForegroundColor () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830 return getTextColor ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
832
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
834 * Returns the item at the given, zero-relative index in the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 * receiver's list. Throws an exception if the index is out
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 * of range.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838 * @param index the index of the item to return
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 * @return the item at the given index
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 * <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
844 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
846 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
847 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
848 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
849 public String getItem (int index) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 if (!(0 <= index && index < items.length)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
852 error (DWT.ERROR_INVALID_RANGE);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
853 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
854 return items [index];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
856
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
857 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858 * Returns the number of items contained in the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
859 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 * @return the number of items
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
862 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
863 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 public int getItemCount () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
869 return items.length;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
870 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873 * Returns the height of the area which would be used to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874 * display <em>one</em> of the items in the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876 * @return the height of one item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
877 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
878 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
880 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
883 public int getItemHeight () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
885 return fontHeight (getFontDescription (), listHandle !is null ? listHandle : handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
886 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
887
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
888 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
889 * Returns a (possibly empty) array of <code>String</code>s which are
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
890 * the items in the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
891 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
892 * Note: This is not the actual structure used by the receiver
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
893 * to maintain its list of items, so modifying the array will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
894 * not affect the receiver.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
895 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
896 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
897 * @return the items in the receiver's list
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
898 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
899 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
900 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
901 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
902 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
903 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
904 public String [] getItems () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
905 checkWidget();
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
906 String [] result = new String[](items.length);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
907 System.arraycopy (items, 0, result, 0, items.length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
908 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
910
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
911 public bool getListVisible () {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
912 checkWidget ();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
913 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
914 return popupHandle !is null && OS.GTK_WIDGET_VISIBLE (popupHandle);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
915 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
916 return false;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
917 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
918
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
919 String getNameText () {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
920 return getText ();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
921 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
922
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
923 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924 * Returns the orientation of the receiver.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 * @return the orientation style
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
928 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
929 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
930 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
931 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
932 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
933 * @since 2.1.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
935 public int getOrientation () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
937 return style & (DWT.LEFT_TO_RIGHT | DWT.RIGHT_TO_LEFT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
940 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
941 * Returns a <code>Point</code> whose x coordinate is the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942 * character position representing the start of the selection
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
943 * in the receiver's text field, and whose y coordinate is the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 * character position representing the end of the selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
945 * An "empty" selection is indicated by the x and y coordinates
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
946 * having the same value.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
947 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
948 * Indexing is zero based. The range of a selection is from
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949 * 0..N where N is the number of characters in the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
950 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
951 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
952 * @return a point representing the selection start and end
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
953 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
954 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
956 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
957 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
958 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
959 public Point getSelection () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
960 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
961 if ((style & DWT.READ_ONLY) !is 0) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
962 int length = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
963 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
964 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
965 if (index !is -1) length = getItem (index).length;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
966 } else {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
967 auto str = OS.gtk_entry_get_text (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
968 if (str !is null) length = cast(int)/*64*/OS.g_utf8_strlen (str, -1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
969 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
970 return new Point (0, length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
971 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972 int start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
973 int end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
974 if (entryHandle !is null) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
975 OS.gtk_editable_get_selection_bounds (entryHandle, &start, &end);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
976 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
977 return new Point(start, end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
978 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
979
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
980 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
981 * Returns the zero-relative index of the item which is currently
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
982 * selected in the receiver's list, or -1 if no item is selected.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
983 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
984 * @return the index of the selected item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
985 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
986 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
987 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
988 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
989 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
990 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
991 public int getSelectionIndex () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
992 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
993 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
994 return OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
995 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
996 int index = 0, result = -1;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
997 auto children = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
998 auto temp = children;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
999 while (temp !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1000 auto item = OS.g_list_data (temp);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1001 if (OS.GTK_WIDGET_STATE (item) is OS.GTK_STATE_SELECTED) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1002 result = index;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1003 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1004 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1005 index++;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1006 temp = OS.g_list_next (temp);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1007 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1008 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1009 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1010 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1011
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1012 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1013 * Returns a string containing a copy of the contents of the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1014 * receiver's text field, or an empty string if there are no
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1015 * contents.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1016 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1017 * @return the receiver's text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1018 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1019 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1020 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1021 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1022 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1023 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1024 public String getText () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1025 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1026 if (entryHandle !is null) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1027 auto str = OS.gtk_entry_get_text (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1028 if (str is null) 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
1029 return fromStringz(str).dup;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1030 } else {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1031 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1032 return index !is -1 ? getItem (index) : "";
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1033 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1034 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1035
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1036 String getText (int start, int stop) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1037 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1038 * NOTE: The current implementation uses substring ()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1039 * which can reference a potentially large character
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1040 * array.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1041 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1042 return getText ()[ start .. stop - 1];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1043 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1044
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1045 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1046 * Returns the height of the receivers's text field.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1047 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1048 * @return the text height
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1049 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1050 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1051 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1052 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1053 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1054 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1055 public int getTextHeight () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1056 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1057 GtkRequisition requisition;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1058 gtk_widget_size_request (handle, &requisition);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1059 return OS.GTK_WIDGET_REQUISITION_HEIGHT (handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1060 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1061
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1062 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1063 * Returns the maximum number of characters that the receiver's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1064 * text field is capable of holding. If this has not been changed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1065 * by <code>setTextLimit()</code>, it will be the constant
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1066 * <code>Combo.LIMIT</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1067 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1068 * @return the text limit
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1069 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1070 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1071 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1072 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1073 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1074 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1075 * @see #LIMIT
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1076 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1077 public int getTextLimit () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1078 checkWidget();
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1079 int limit = entryHandle !is null ? OS.gtk_entry_get_max_length (entryHandle) : 0;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1080 return limit is 0 ? LIMIT : limit;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1081 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1082
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1083 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1084 * Gets the number of items that are visible in the drop
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1085 * down portion of the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1086 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1087 * Note: This operation is a hint and is not supported on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1088 * platforms that do not have this concept.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1089 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1090 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1091 * @return the number of items that are visible
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1092 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1093 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1094 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1095 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1096 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1097 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1098 * @since 3.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1099 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1100 public int getVisibleItemCount () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1101 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1102 return visibleCount;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1103 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1104
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1105 override int /*long*/ gtk_activate (GtkWidget* widget) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1106 postEvent (DWT.DefaultSelection);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1107 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1108 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1109
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1110 override int /*long*/ gtk_button_press_event (GtkWidget* widget, GdkEventButton* event) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1111 /*
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1112 * Feature in GTK. Depending on where the user clicks, GTK prevents
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1113 * the left mouse button event from being propagated. The fix is to
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1114 * send the mouse event from the event_after handler.
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1115 */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1116 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1117 if (event.type is OS.GDK_BUTTON_PRESS) return 0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1118 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1119 return super.gtk_button_press_event (widget, event);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1120 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1121
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1122 override int gtk_changed (GtkWidget* widget) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1123 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1124 if (widget is handle) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1125 if (entryHandle is null) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1126 sendEvent(DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1127 if (isDisposed ()) return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1128 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1129 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1130 * Feature in GTK. GTK emits a changed signal whenever
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1131 * the contents of a combo box are altered by typing or
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1132 * by selecting an item in the list, but the event should
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1133 * only be sent when the list is selected. The fix is to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1134 * only send out a selection event when there is a selected
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1135 * item.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1136 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1137 * NOTE: This code relies on GTK clearing the selected
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1138 * item and not matching the item as the user types.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1139 */
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1140 int index = OS.gtk_combo_box_get_active (handle);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1141 if (index !is -1) postEvent (DWT.Selection);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1142 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1143 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1144 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1145 if (!ignoreSelect) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1146 auto ptr = OS.gtk_entry_get_text (entryHandle);
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1147 String text = fromStringz(ptr).dup;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1148 for (int i = 0; i < items.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1149 if (items [i] ==/*eq*/ text) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1150 postEvent (DWT.Selection);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1151 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1152 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1153 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1154 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1155 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1156 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1157 * Feature in GTK. When the user types, GTK positions
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1158 * the caret after sending the changed signal. This
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1159 * means that application code that attempts to position
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1160 * the caret during a changed signal will fail. The fix
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1161 * is to post the modify event when the user is typing.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1162 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1163 bool keyPress = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1164 auto eventPtr = OS.gtk_get_current_event ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1165 if (eventPtr !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1166 GdkEventKey* gdkEvent = cast(GdkEventKey*)eventPtr;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1167 switch (gdkEvent.type) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1168 case OS.GDK_KEY_PRESS:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1169 keyPress = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1170 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1171 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1172 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1173 OS.gdk_event_free (eventPtr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1174 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1175 if (keyPress) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1176 postEvent (DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1177 } else {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1178 sendEvent (DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1179 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1180 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1181 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1182
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1183 override int gtk_commit (GtkIMContext* imContext, char* text) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1184 if (text is null) return 0;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1185 if (!OS.gtk_editable_get_editable (entryHandle)) return 0;
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
1186 char [] chars = fromStringz(text);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1187 if (chars.length is 0) return 0;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1188 char [] newChars = sendIMKeyEvent (DWT.KeyDown, null, chars);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1189 if (newChars is null) return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1190 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1191 * Feature in GTK. For a GtkEntry, during the insert-text signal,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1192 * GTK allows the programmer to change only the caret location,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1193 * not the selection. If the programmer changes the selection,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1194 * the new selection is lost. The fix is to detect a selection
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1195 * change and set it after the insert-text signal has completed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1196 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1197 fixStart = fixEnd = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1198 OS.g_signal_handlers_block_matched (imContext, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCOMMIT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1199 int id = OS.g_signal_lookup (OS.commit.ptr, OS.gtk_im_context_get_type ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1200 int mask = OS.G_SIGNAL_MATCH_DATA | OS.G_SIGNAL_MATCH_ID;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1201 OS.g_signal_handlers_unblock_matched (imContext, mask, id, 0, null, null, entryHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1202 if (newChars is chars) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1203 OS.g_signal_emit_by_name1 (imContext, OS.commit.ptr, cast(int)text);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1204 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1205 OS.g_signal_emit_by_name1 (imContext, OS.commit.ptr, cast(int)toStringz(newChars));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1206 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1207 OS.g_signal_handlers_unblock_matched (imContext, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCOMMIT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1208 OS.g_signal_handlers_block_matched (imContext, mask, id, 0, null, null, entryHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1209 if (fixStart !is -1 && fixEnd !is -1) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1210 OS.gtk_editable_set_position (entryHandle, fixStart);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1211 OS.gtk_editable_select_region (entryHandle, fixStart, fixEnd);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1212 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1213 fixStart = fixEnd = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1214 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1215 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1216
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1217 override int gtk_delete_text (GtkWidget* widget, int start_pos, int end_pos) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1218 if (lockText) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1219 OS.gtk_list_unselect_item (listHandle, 0);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1220 OS.g_signal_stop_emission_by_name (entryHandle, OS.delete_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1221 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1222 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1223 if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0;
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1224 String newText = verifyText ("", cast(int)/*64*/start_pos, cast(int)/*64*/end_pos);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1225 if (newText is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1226 OS.g_signal_stop_emission_by_name (entryHandle, OS.delete_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1227 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1228 if (newText.length > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1229 int pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1230 pos = cast(int)/*64*/end_pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1231 OS.g_signal_handlers_block_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1232 OS.g_signal_handlers_block_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1233 OS.gtk_editable_insert_text (entryHandle, newText.ptr, newText.length, &pos);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1234 OS.g_signal_handlers_unblock_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1235 OS.g_signal_handlers_unblock_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1236 OS.gtk_editable_set_position (entryHandle, pos );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1237 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1238 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1239 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1240 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1241
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1242 override int /*long*/ gtk_event_after (GtkWidget* widget, GdkEvent* event) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1243 /*
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1244 * Feature in GTK. Depending on where the user clicks, GTK prevents
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1245 * the left mouse button event from being propagated. The fix is to
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1246 * send the mouse event from the event_after handler.
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1247 *
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1248 * Feature in GTK. When the user clicks anywhere in an editable
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1249 * combo box, a single focus event should be issued, despite the
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1250 * fact that focus might switch between the drop down button and
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1251 * the text field. The fix is to use gtk_combo_box_set_focus_on_click ()
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1252 * to eat all focus events while focus is in the combo box. When the
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1253 * user clicks on the drop down button focus is assigned to the text
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1254 * field.
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1255 */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1256 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1257 switch (event.type) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1258 case OS.GDK_BUTTON_PRESS: {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1259 GdkEventButton* gdkEventButton = cast(GdkEventButton*)event;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1260 if (gdkEventButton.button is 1) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1261 if (!sendMouseEvent (DWT.MouseDown, gdkEventButton.button, display.clickCount, 0, false, gdkEventButton.time, gdkEventButton.x_root, gdkEventButton.y_root, false, gdkEventButton.state)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1262 return 1;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1263 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1264 if (OS.GTK_VERSION >= OS.buildVERSION (2, 6, 0)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1265 if ((style & DWT.READ_ONLY) is 0 && widget is buttonHandle) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1266 OS.gtk_widget_grab_focus (entryHandle);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1267 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1268 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1269 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1270 break;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1271 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1272 case OS.GDK_FOCUS_CHANGE: {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1273 if (OS.GTK_VERSION >= OS.buildVERSION (2, 6, 0)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1274 if ((style & DWT.READ_ONLY) is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1275 GdkEventFocus* gdkEventFocus = cast(GdkEventFocus*)event;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1276 if (gdkEventFocus.in_ !is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1277 OS.gtk_combo_box_set_focus_on_click (handle, false);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1278 } else {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1279 OS.gtk_combo_box_set_focus_on_click (handle, true);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1280 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1281 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1282 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1283 break;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1284 }
241
4653e99936cf Fix missing switch default in Combo
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
1285 default:
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1286 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1287 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1288 return super.gtk_event_after(widget, event);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1289 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1290
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1291 override int gtk_focus_out_event (GtkWidget* widget, GdkEventFocus* event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1292 fixIM ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1293 return super.gtk_focus_out_event (widget, event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1294 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1295
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1296 override int gtk_insert_text (GtkEditable* widget, char* new_text, int new_text_length, int position) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1297 if (lockText) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1298 OS.gtk_list_unselect_item (listHandle, 0);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1299 OS.g_signal_stop_emission_by_name (entryHandle, OS.insert_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1300 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1301 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1302 if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1303 if (new_text is null || new_text_length is 0) return 0;
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1304 String oldText = new_text[0..new_text_length];
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1305 int pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1306 pos = position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1307 if (pos is -1) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1308 auto ptr = OS.gtk_entry_get_text (entryHandle);
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
1309 pos = fromStringz(ptr).length;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1310 }
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1311 String newText = verifyText (oldText, pos, pos);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1312 if (newText !is oldText) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1313 int newStart, newEnd;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1314 OS.gtk_editable_get_selection_bounds (entryHandle, &newStart, &newEnd);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1315 if (newText !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1316 if (newStart !is newEnd) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1317 OS.g_signal_handlers_block_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_TEXT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1318 OS.g_signal_handlers_block_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1319 OS.gtk_editable_delete_selection (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1320 OS.g_signal_handlers_unblock_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_TEXT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1321 OS.g_signal_handlers_unblock_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1322 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1323 OS.g_signal_handlers_block_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1324 OS.gtk_editable_insert_text (entryHandle, newText.ptr, newText.length, &pos);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1325 OS.g_signal_handlers_unblock_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1326 newStart = newEnd = pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1327 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1328 pos = newEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1329 if (newStart !is newEnd) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1330 fixStart = newStart;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1331 fixEnd = newEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1332 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1333 position = pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1334 OS.g_signal_stop_emission_by_name (entryHandle, OS.insert_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1335 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1336 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1337 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1338
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1339 override int gtk_key_press_event (GtkWidget* widget, GdkEventKey* event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1340 auto result = super.gtk_key_press_event (widget, event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1341 if (result !is 0) fixIM ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1342 if (gdkEventKey is cast(GdkEventKey*)-1) result = 1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1343 gdkEventKey = null;
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1344 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0) && (style & DWT.READ_ONLY) is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1345 GdkEventKey* keyEvent = cast(GdkEventKey*)event;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1346 int oldIndex = OS.gtk_combo_box_get_active (handle);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1347 int newIndex = oldIndex;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1348 int key = keyEvent.keyval;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1349 switch (key) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1350 case OS.GDK_Down:
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1351 case OS.GDK_KP_Down:
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1352 if (oldIndex !is (items.length - 1)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1353 newIndex = oldIndex + 1;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1354 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1355 break;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1356 case OS.GDK_Up:
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1357 case OS.GDK_KP_Up:
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1358 if (oldIndex !is -1 && oldIndex !is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1359 newIndex = oldIndex - 1;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1360 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1361 break;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1362 /*
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1363 * Feature in GTK. In gtk_combo_box, the PageUp and PageDown keys
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1364 * go the first and last items in the list rather than scrolling
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1365 * a page at a time. The fix is to emulate this behavior for
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1366 * gtk_combo_box_entry.
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1367 */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1368 case OS.GDK_Page_Up:
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1369 case OS.GDK_KP_Page_Up:
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1370 newIndex = 0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1371 break;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1372 case OS.GDK_Page_Down:
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1373 case OS.GDK_KP_Page_Down:
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1374 newIndex = items.length - 1;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1375 break;
241
4653e99936cf Fix missing switch default in Combo
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
1376 default:
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1377 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1378 if (newIndex !is oldIndex) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1379 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1380 OS.gtk_combo_box_set_active (handle, newIndex);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1381 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1382 return 1;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1383 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1384 }
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1385 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1386 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1387
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1388 override int /*long*/ gtk_populate_popup (GtkWidget* widget, GtkWidget* menu) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1389 if ((style & DWT.RIGHT_TO_LEFT) !is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1390 OS.gtk_widget_set_direction (menu, OS.GTK_TEXT_DIR_RTL);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1391 display.doSetDirectionProc(menu, OS.GTK_TEXT_DIR_RTL);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1392 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1393 return 0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1394 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1395
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1396 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1397 * Searches the receiver's list starting at the first item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1398 * (index 0) until an item is found that is equal to the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1399 * argument, and returns the index of that item. If no item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1400 * is found, returns -1.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1401 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1402 * @param string the search item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1403 * @return the index of the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1404 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1405 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1406 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1407 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1408 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1409 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1410 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1411 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1412 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1413 public int indexOf (String string) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1414 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1415 return indexOf (string, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1416 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1417
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1418 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1419 * Searches the receiver's list starting at the given,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1420 * zero-relative index until an item is found that is equal
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1421 * to the argument, and returns the index of that item. If
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1422 * no item is found or the starting index is out of range,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1423 * returns -1.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1424 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1425 * @param string the search item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1426 * @param start the zero-relative index at which to begin the search
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1427 * @return the index of the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1428 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1429 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1430 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1431 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1432 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1433 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1434 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1435 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1436 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1437 public int indexOf (String string, int start) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1438 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1439 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1440 if (!(0 <= start && start < items.length)) return -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1441 for (int i=start; i<items.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1442 if (string==/*eq*/items [i]) return i;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1443 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1444 return -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1445 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1446
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1447 override bool isFocusHandle(GtkWidget* widget) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1448 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1449 if (buttonHandle !is null && widget is buttonHandle) return true;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1450 if (entryHandle !is null && widget is entryHandle) return true;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1451 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1452 return super.isFocusHandle (widget);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1453 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1454
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1455 override GdkDrawable* paintWindow () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1456 auto childHandle = entryHandle !is null ? entryHandle : handle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1457 OS.gtk_widget_realize (childHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1458 auto window = OS.GTK_WIDGET_WINDOW (childHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1459 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1460 if ((style & DWT.READ_ONLY) !is 0) return window;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1461 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1462 auto children = OS.gdk_window_get_children (window);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1463 if (children !is null) window = cast(GdkDrawable*)OS.g_list_data (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1464 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1465 return window;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1466 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1467
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1468 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1469 * Pastes text from clipboard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1470 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1471 * The selected text is deleted from the widget
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1472 * and new text inserted from the clipboard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1473 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1474 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1475 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1476 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1477 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1478 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1479 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1480 * @since 2.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1481 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1482 public void paste () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1483 checkWidget ();
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1484 if (entryHandle !is null) OS.gtk_editable_paste_clipboard (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1485 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1486
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1487 override GtkWidget* parentingHandle() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1488 return fixedHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1489 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1490
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1491 override void register () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1492 super.register ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1493 if (buttonHandle !is null) display.addWidget (buttonHandle, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1494 if (entryHandle !is null) display.addWidget (entryHandle, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1495 if (listHandle !is null) display.addWidget (listHandle, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1496 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1497 if (imContext !is null) display.addWidget (cast(GtkWidget*)imContext, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1498 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1499
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1500 override void releaseHandle () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1501 super.releaseHandle ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1502 buttonHandle = entryHandle = listHandle = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1503 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1504
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1505 override void releaseWidget () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1506 super.releaseWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1507 textRenderer = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1508 fixIM ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1509 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1510
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1511 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1512 * Removes the item from the receiver's list at the given
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1513 * zero-relative index.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1514 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1515 * @param index the index for the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1516 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1517 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1518 * <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1519 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1520 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1521 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1522 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1523 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1524 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1525 public void remove (int index) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1526 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1527 if (!(0 <= index && index < items.length)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1528 error (DWT.ERROR_INVALID_RANGE);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1529 }
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1530 String [] oldItems = items;
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1531 String [] newItems = new String[]( oldItems.length - 1 );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1532 System.arraycopy (oldItems, 0, newItems, 0, index);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1533 System.arraycopy (oldItems, index + 1, newItems, index, oldItems.length - index - 1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1534 items = newItems;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1535 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1536 if (OS.gtk_combo_box_get_active (handle) is index) clearText ();
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1537 OS.gtk_combo_box_remove_text (handle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1538 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1539 ignoreSelect = true;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1540 auto children = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1541 auto item = OS.g_list_nth_data (children, index);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1542 bool selected = OS.GTK_WIDGET_STATE (item) is OS.GTK_STATE_SELECTED;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1543 auto items = OS.g_list_append (null, item);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1544 OS.gtk_list_remove_items (listHandle, items);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1545 OS.g_list_free (items);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1546 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1547 if (selected) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1548 OS.gtk_entry_set_text (entryHandle, "".ptr);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1549 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1550 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1551 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1552 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1553
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1554 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1555 * Removes the items from the receiver's list which are
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1556 * between the given zero-relative start and end
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1557 * indices (inclusive).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1558 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1559 * @param start the start of the range
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1560 * @param end the end of the range
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1561 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1562 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1563 * <li>ERROR_INVALID_RANGE - if either the start or end are not between 0 and the number of elements in the list minus 1 (inclusive)</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1564 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1565 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1566 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1567 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1568 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1569 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1570 public void remove (int start, int end) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1571 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1572 if (start > end) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1573 if (!(0 <= start && start <= end && end < items.length)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1574 error (DWT.ERROR_INVALID_RANGE);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1575 }
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1576 String [] oldItems = items;
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1577 String [] newItems = new String[](oldItems.length - (end - start + 1));
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1578 System.arraycopy (oldItems, 0, newItems, 0, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1579 System.arraycopy (oldItems, end + 1, newItems, start, oldItems.length - end - 1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1580 items = newItems;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1581 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1582 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1583 if (start <= index && index <= end) clearText();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1584 for (int i = end; i >= start; i--) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1585 OS.gtk_combo_box_remove_text (handle, i);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1586 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1587 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1588 bool selected = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1589 ignoreSelect = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1590 GList* items;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1591 auto children = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1592 for (int i = start; i <= end; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1593 auto item = OS.g_list_nth_data (children, i);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1594 selected |= OS.GTK_WIDGET_STATE (item) is OS.GTK_STATE_SELECTED;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1595 items = OS.g_list_append (items, item);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1596 }
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1597 OS.gtk_list_remove_items (listHandle, items);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1598 OS.g_list_free (items);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1599 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1600 if (selected) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1601 OS.gtk_entry_set_text (entryHandle, "".ptr );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1602 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1603 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1604 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1605 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1606
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1607 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1608 * Searches the receiver's list starting at the first item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1609 * until an item is found that is equal to the argument,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1610 * and removes that item from the list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1611 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1612 * @param string the item to remove
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1613 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1614 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1615 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1616 * <li>ERROR_INVALID_ARGUMENT - if the string is not found in the list</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1617 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1618 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1619 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1620 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1621 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1622 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1623 public void remove (String string) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1624 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1625 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1626 int index = indexOf (string, 0);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1627 if (index is -1) error (DWT.ERROR_INVALID_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1628 remove (index);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1629 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1630
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1631 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1632 * Removes all of the items from the receiver's list and clear the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1633 * contents of receiver's text field.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1634 * <p>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1635 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1636 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1637 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1638 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1639 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1640 public void removeAll () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1641 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1642 int count = items.length;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1643 items = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1644 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1645 clearText ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1646 for (int i = count - 1; i >= 0; i--) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1647 OS.gtk_combo_box_remove_text (handle, i);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1648 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1649 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1650 ignoreSelect = true;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1651 OS.gtk_list_clear_items (listHandle, 0, -1);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1652 OS.gtk_entry_set_text (entryHandle, "".ptr);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1653 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1654 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1655 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1656
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1657 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1658 * Removes the listener from the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1659 * be notified when the receiver's text is modified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1660 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1661 * @param listener the listener which should no longer be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1662 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1663 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1664 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1665 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1666 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1667 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1668 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1669 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1670 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1671 * @see ModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1672 * @see #addModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1673 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1674 public void removeModifyListener (ModifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1675 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1676 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1677 if (eventTable is null) return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1678 eventTable.unhook (DWT.Modify, listener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1679 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1680
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1681 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1682 * Removes the listener from the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1683 * be notified when the user changes the receiver's selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1684 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1685 * @param listener the listener which should no longer be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1686 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1687 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1688 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1689 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1690 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1691 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1692 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1693 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1694 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1695 * @see SelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1696 * @see #addSelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1697 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1698 public void removeSelectionListener (SelectionListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1699 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1700 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1701 if (eventTable is null) return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1702 eventTable.unhook (DWT.Selection, listener);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1703 eventTable.unhook (DWT.DefaultSelection,listener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1704 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1705
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1706 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1707 * Removes the listener from the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1708 * be notified when the control is verified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1709 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1710 * @param listener the listener which should no longer be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1711 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1712 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1713 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1714 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1715 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1716 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1717 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1718 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1719 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1720 * @see VerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1721 * @see #addVerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1722 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1723 * @since 3.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1724 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1725 public void removeVerifyListener (VerifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1726 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1727 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1728 if (eventTable is null) return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1729 eventTable.unhook (DWT.Verify, listener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1730 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1731
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1732 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1733 * Selects the item at the given zero-relative index in the receiver's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1734 * list. If the item at the index was already selected, it remains
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1735 * selected. Indices that are out of range are ignored.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1736 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1737 * @param index the index of the item to select
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1738 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1739 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1740 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1741 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1742 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1743 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1744 public void select (int index) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1745 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1746 if (index < 0 || index >= items.length) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1747 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1748 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1749 OS.gtk_combo_box_set_active (handle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1750 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1751 if ((style & DWT.READ_ONLY) !is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1752 /*
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1753 * Feature in GTK. Read Only combo boxes do not get a chance to send out a
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1754 * Modify event in the gtk_changed callback. The fix is to send a Modify event
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1755 * here.
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1756 */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1757 sendEvent (DWT.Modify);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1758 }
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1759 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1760 ignoreSelect = true;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1761 OS.gtk_list_select_item (listHandle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1762 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1763 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1764 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1765
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1766 override void setBackgroundColor (GdkColor* color) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1767 super.setBackgroundColor (color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1768 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1769 if (entryHandle !is null) OS.gtk_widget_modify_base (entryHandle, 0, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1770 OS.g_object_set1 (textRenderer, OS.background_gdk.ptr, cast(int)color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1771 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1772 OS.gtk_widget_modify_base (entryHandle, 0, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1773 if (listHandle !is null) OS.gtk_widget_modify_base (listHandle, 0, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1774 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1775 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1776
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1777 override int setBounds (int x, int y, int width, int height, bool move, bool resize) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1778 int newHeight = height;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1779 if (resize) newHeight = Math.max (getTextHeight (), height);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1780 return super.setBounds (x, y, width, newHeight, move, resize);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1781 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1782
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1783 override void setFontDescription (PangoFontDescription* font) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1784 super.setFontDescription (font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1785 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1786 if (entryHandle !is null) OS.gtk_widget_modify_font (entryHandle, font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1787 OS.g_object_set1 (textRenderer, OS.font_desc.ptr, cast(int)font);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1788 if ((style & DWT.READ_ONLY) !is 0) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1789 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1790 * Bug in GTK. Setting the font can leave the combo box with an
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1791 * invalid minimum size. The fix is to temporarily change the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1792 * selected item to force the combo box to resize.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1793 */
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1794 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1795 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1796 OS.gtk_combo_box_set_active (handle, -1);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1797 OS.gtk_combo_box_set_active (handle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1798 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1799 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1800 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1801 OS.gtk_widget_modify_font (entryHandle, font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1802 if (listHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1803 OS.gtk_widget_modify_font (listHandle, font);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1804 auto itemsList = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1805 if (itemsList !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1806 int count = OS.g_list_length (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1807 for (int i=count - 1; i>=0; i--) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1808 auto widget = OS.gtk_bin_get_child (OS.g_list_nth_data (itemsList, i));
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1809 OS.gtk_widget_modify_font (widget, font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1810 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1811 OS.g_list_free (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1812 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1813 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1814 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1815 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1816
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1817 override void setForegroundColor (GdkColor* color) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1818 super.setForegroundColor (color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1819 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1820 if (entryHandle !is null) setForegroundColor (entryHandle, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1821 OS.g_object_set1 (textRenderer, OS.foreground_gdk.ptr, cast(int)color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1822 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1823 setForegroundColor (entryHandle, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1824 if (listHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1825 setForegroundColor (listHandle, color);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1826 auto itemsList = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1827 if (itemsList !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1828 int count = OS.g_list_length (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1829 for (int i=count - 1; i>=0; i--) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1830 auto widget = OS.gtk_bin_get_child (OS.g_list_nth_data (itemsList, i));
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1831 setForegroundColor (widget, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1832 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1833 OS.g_list_free (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1834 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1835 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1836 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1837 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1838
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1839 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1840 * Sets the text of the item in the receiver's list at the given
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1841 * zero-relative index to the string argument.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1842 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1843 * @param index the index for the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1844 * @param string the new text for the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1845 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1846 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1847 * <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1848 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1849 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1850 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1851 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1852 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1853 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1854 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1855 public void setItem (int index, String string) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1856 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1857 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1858 if (!(0 <= index && index < items.length)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1859 error (DWT.ERROR_INVALID_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1860 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1861 items [index] = string;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1862 char* buffer = toStringz(string);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1863 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1864 OS.gtk_combo_box_remove_text (handle, index);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1865 OS.gtk_combo_box_insert_text (handle, index, buffer);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1866 if ((style & DWT.RIGHT_TO_LEFT) !is 0 && popupHandle !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1867 display.doSetDirectionProc(popupHandle, OS.GTK_TEXT_DIR_RTL);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1868 }
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1869 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1870 ignoreSelect = true;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1871 auto children = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1872 auto item = OS.g_list_nth_data (children, index);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1873 auto label = OS.gtk_bin_get_child (item);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1874 OS.gtk_label_set_text (label, buffer);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1875 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1876 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1877 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1878 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1879
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1880 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1881 * Sets the receiver's list to be the given array of items.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1882 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1883 * @param items the array of items
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1884 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1885 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1886 * <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1887 * <li>ERROR_INVALID_ARGUMENT - if an item in the items array is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1888 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1889 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1890 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1891 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1892 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1893 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1894 public void setItems (String [] items) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1895 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1896 if (items is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1897 for (int i=0; i<items.length; i++) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1898 if (items [i] is null) error (DWT.ERROR_INVALID_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1899 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1900 int count = this.items.length;
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1901 this.items = new String[](items.length);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1902 System.arraycopy (items, 0, this.items, 0, items.length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1903 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1904 clearText ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1905 for (int i = count - 1; i >= 0; i--) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1906 OS.gtk_combo_box_remove_text (handle, i);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1907 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1908 for (int i = 0; i < items.length; i++) {
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1909 String string = items [i];
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1910 char* buffer = toStringz(string);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1911 OS.gtk_combo_box_insert_text (handle, i, buffer);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1912 if ((style & DWT.RIGHT_TO_LEFT) !is 0 && popupHandle !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1913 display.doSetDirectionProc(popupHandle, OS.GTK_TEXT_DIR_RTL);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1914 }
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1915 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1916 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1917 lockText = ignoreSelect = true;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1918 OS.gtk_list_clear_items (listHandle, 0, -1);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1919 auto font = getFontDescription ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1920 GdkColor* color = getForegroundColor ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1921 int direction = OS.gtk_widget_get_direction (handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1922 int i = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1923 while (i < items.length) {
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1924 String string = items [i];
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1925 char * buffer = toStringz(string);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1926 auto item = OS.gtk_list_item_new_with_label (buffer);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1927 auto label = OS.gtk_bin_get_child (item);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1928 setForegroundColor (label, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1929 OS.gtk_widget_modify_font (label, font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1930 OS.gtk_widget_set_direction (label, direction);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1931 OS.gtk_container_add (listHandle, item);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1932 OS.gtk_widget_show (item);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1933 i++;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1934 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1935 lockText = ignoreSelect = false;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1936 OS.gtk_entry_set_text (entryHandle, "".ptr);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1937 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1938 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1939
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1940 public void setListVisible (bool visible) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1941 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1942 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1943 if (visible) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1944 OS.gtk_combo_box_popup (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1945 } else {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1946 OS.gtk_combo_box_popdown (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1947 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1948 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1949 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1950
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1951 override void setOrientation() {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1952 super.setOrientation();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1953 if ((style & DWT.RIGHT_TO_LEFT) !is 0) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1954 if (listHandle !is null) OS.gtk_widget_set_direction (listHandle, OS.GTK_TEXT_DIR_RTL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1955 if (entryHandle !is null) OS.gtk_widget_set_direction (entryHandle, OS.GTK_TEXT_DIR_RTL);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1956 if (cellHandle !is null) OS.gtk_widget_set_direction (cellHandle, OS.GTK_TEXT_DIR_RTL);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1957 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1958 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1959
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1960 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1961 * Sets the orientation of the receiver, which must be one
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1962 * of the constants <code>DWT.LEFT_TO_RIGHT</code> or <code>DWT.RIGHT_TO_LEFT</code>.
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1963 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1964 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1965 * @param orientation new orientation style
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1966 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1967 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1968 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1969 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1970 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1971 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1972 * @since 2.1.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1973 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1974 public void setOrientation (int orientation) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1975 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1976 checkWidget();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1977 int flags = DWT.RIGHT_TO_LEFT | DWT.LEFT_TO_RIGHT;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1978 if ((orientation & flags) is 0 || (orientation & flags) is flags) return;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1979 style &= ~flags;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1980 style |= orientation & flags;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1981 int dir = (orientation & DWT.RIGHT_TO_LEFT) !is 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1982 OS.gtk_widget_set_direction (fixedHandle, dir);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1983 OS.gtk_widget_set_direction (handle, dir);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1984 if (entryHandle !is null) OS.gtk_widget_set_direction (entryHandle, dir);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1985 if (listHandle !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1986 OS.gtk_widget_set_direction (listHandle, dir);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1987 auto itemsList = OS.gtk_container_get_children (listHandle);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1988 if (itemsList !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1989 int count = OS.g_list_length (itemsList);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1990 for (int i=count - 1; i>=0; i--) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1991 auto widget = OS.gtk_bin_get_child (OS.g_list_nth_data (itemsList, i));
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1992 OS.gtk_widget_set_direction (widget, dir);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1993 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1994 OS.g_list_free (itemsList);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1995 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1996 }
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1997 if (cellHandle !is null) OS.gtk_widget_set_direction (cellHandle, dir);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1998 if (popupHandle !is null) display.doSetDirectionProc (popupHandle, dir);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1999 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2000 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2001
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2002 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2003 * Sets the selection in the receiver's text field to the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2004 * range specified by the argument whose x coordinate is the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2005 * start of the selection and whose y coordinate is the end
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2006 * of the selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2007 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2008 * @param selection a point representing the new selection start and end
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2009 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2010 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2011 * <li>ERROR_NULL_ARGUMENT - if the point is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2012 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2013 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2014 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2015 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2016 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2017 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2018 public void setSelection (Point selection) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2019 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2020 if (selection is null) error (DWT.ERROR_NULL_ARGUMENT);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2021 if ((style & DWT.READ_ONLY) !is 0) return;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2022 if (entryHandle !is null) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
2023 OS.gtk_editable_set_position (entryHandle, selection.x);
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
2024 OS.gtk_editable_select_region (entryHandle, selection.x, selection.y);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2025 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2026 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2027
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2028 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2029 * Sets the contents of the receiver's text field to the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2030 * given string.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2031 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2032 * Note: The text field in a <code>Combo</code> is typically
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2033 * only capable of displaying a single line of text. Thus,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2034 * setting the text to a string containing line breaks or
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2035 * other special characters will probably cause it to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2036 * display incorrectly.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2037 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2038 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2039 * @param string the new text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2040 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2041 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2042 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2043 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2044 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2045 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2046 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2047 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2048 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
2049 public void setText (String string) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2050 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2051 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2052 if ((style & DWT.READ_ONLY) !is 0) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2053 int index = indexOf (string);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2054 if (index is -1) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2055 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2056 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
2057 OS.gtk_combo_box_set_active (handle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2058 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
2059 /*
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
2060 * Feature in GTK. Read Only combo boxes do not get a chance to send out a
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
2061 * Modify event in the gtk_changed callback. The fix is to send a Modify event
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
2062 * here.
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
2063 */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
2064 sendEvent (DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2065 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2066 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2067 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2068 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2069 * Feature in gtk. When text is set in gtk, separate events are fired for the deletion and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2070 * insertion of the text. This is not wrong, but is inconsistent with other platforms. The
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2071 * fix is to block the firing of these events and fire them ourselves in a consistent manner.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2072 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2073 if (hooks (DWT.Verify) || filters (DWT.Verify)) {
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
2074 auto ptr = OS.gtk_entry_get_text (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2075 string = verifyText (string, 0, cast(int)/*64*/OS.g_utf8_strlen (ptr, -1));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2076 if (string is null) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2077 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2078 auto buffer = toStringz(string);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2079 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2080 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2081 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2082 OS.g_signal_handlers_block_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2083 OS.g_signal_handlers_block_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_TEXT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2084 OS.g_signal_handlers_block_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
2085 OS.gtk_entry_set_text (entryHandle, buffer);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2086 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2087 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2088 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2089 OS.g_signal_handlers_unblock_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2090 OS.g_signal_handlers_unblock_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_TEXT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2091 OS.g_signal_handlers_unblock_matched (entryHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2092 sendEvent (DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2093 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2094
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2095 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2096 * Sets the maximum number of characters that the receiver's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2097 * text field is capable of holding to be the argument.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2098 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2099 * To reset this value to the default, use <code>setTextLimit(Combo.LIMIT)</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2100 * Specifying a limit value larger than <code>Combo.LIMIT</code> sets the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2101 * receiver's limit to <code>Combo.LIMIT</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2102 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2103 * @param limit new text limit
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2104 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2105 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2106 * <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2107 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2108 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2109 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2110 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2111 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2112 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2113 * @see #LIMIT
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2114 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2115 public void setTextLimit (int limit) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2116 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2117 if (limit is 0) error (DWT.ERROR_CANNOT_BE_ZERO);
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
2118 if (entryHandle !is null) OS.gtk_entry_set_max_length (entryHandle, limit);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2119 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2120
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
2121 override void setToolTipText (Shell shell, String newString) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2122 if (entryHandle !is null) shell.setToolTipText (entryHandle, newString);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2123 if (buttonHandle !is null) shell.setToolTipText (buttonHandle, newString);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2124 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2125
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2126 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2127 * Sets the number of items that are visible in the drop
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2128 * down portion of the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2129 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2130 * Note: This operation is a hint and is not supported on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2131 * platforms that do not have this concept.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2132 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2133 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2134 * @param count the new number of items to be visible
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2135 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2136 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2137 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2138 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2139 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2140 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2141 * @since 3.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2142 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2143 public void setVisibleItemCount (int count) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2144 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2145 if (count < 0) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2146 visibleCount = count;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2147 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2148
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2149 override bool translateTraversal (GdkEventKey* keyEvent) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2150 int key = keyEvent.keyval;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2151 switch (key) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2152 case OS.GDK_KP_Enter:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2153 case OS.GDK_Return: {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2154 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2155 if (imContext !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2156 char* preeditString;
73
1f0d924801f4 GTK function arguments to void*, so much less casts will be needed and more lines will pass without edit
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
2157 OS.gtk_im_context_get_preedit_string (imContext, &preeditString, null, null);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2158 if (preeditString !is null) {
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
2159 int length = fromStringz(preeditString).length;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2160 OS.g_free (preeditString);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2161 if (length !is 0) return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2162 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2163 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2164 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2165 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2166 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2167 return super.translateTraversal (keyEvent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2168 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2169
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
2170 String verifyText (String string, int start, int end) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2171 if (string.length is 0 && start is end) return null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2172 Event event = new Event ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2173 event.text = string;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2174 event.start = start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2175 event.end = end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2176 auto eventPtr = OS.gtk_get_current_event ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2177 if (eventPtr !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2178 GdkEventKey* gdkEvent = cast(GdkEventKey*)eventPtr;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2179 switch (gdkEvent.type) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2180 case OS.GDK_KEY_PRESS:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2181 setKeyState (event, gdkEvent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2182 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2183 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2184 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2185 OS.gdk_event_free (eventPtr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2186 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2187 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2188 * It is possible (but unlikely), that application
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2189 * code could have disposed the widget in the verify
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2190 * event. If this happens, answer null to cancel
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2191 * the operation.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2192 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
2193 sendEvent (DWT.Verify, event);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2194 if (!event.doit || isDisposed ()) return null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2195 return event.text;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2196 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2197
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2198 }