annotate dwt/widgets/Combo.d @ 238:380bad9f6852

reverted char[] to String
author Frank Benoit <benoit@tionex.de>
date Mon, 05 May 2008 00:42:55 +0200
parents 08789b28bdf3
children ce446666f5a2
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
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 GtkWidget* buttonHandle, entryHandle, listHandle, textRenderer;
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);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 * Feature in GTK. When the list is empty and the first item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 * is added, the combo box selects that item replacing the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 * text in the entry field. The fix is to avoid this by
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 * stopping the "delete" and "insert_text" signal emission.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 ignoreSelect = lockText = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 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
203 auto label = OS.gtk_bin_get_child (item);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 setForegroundColor (label, getForegroundColor ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 OS.gtk_widget_modify_font (label, getFontDescription ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 OS.gtk_widget_set_direction (label, OS.gtk_widget_get_direction (handle));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 OS.gtk_widget_show (item);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 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
209 OS.gtk_list_insert_items (listHandle, items, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 ignoreSelect = lockText = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * Adds the listener to the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 * be notified when the receiver's text is modified, by sending
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * it one of the messages defined in the <code>ModifyListener</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * interface.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 * @param listener the listener which should be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
225 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 * @see ModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 * @see #removeModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 public void addModifyListener (ModifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
235 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 TypedListener typedListener = new TypedListener (listener);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
237 addListener (DWT.Modify, typedListener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 * Adds the listener to the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 * be notified when the user changes the receiver's selection, by sending
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 * it one of the messages defined in the <code>SelectionListener</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 * interface.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 * <code>widgetSelected</code> is called when the user changes the combo's list selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed the combo's text area.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 * @param listener the listener which should be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
255 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 * @see SelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 * @see #removeSelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 * @see SelectionEvent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 public void addSelectionListener(SelectionListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
266 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 TypedListener typedListener = new TypedListener (listener);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
268 addListener (DWT.Selection,typedListener);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
269 addListener (DWT.DefaultSelection,typedListener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 * Adds the listener to the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 * be notified when the receiver's text is verified, by sending
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 * it one of the messages defined in the <code>VerifyListener</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 * interface.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * @param listener the listener which should be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
283 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 * @see VerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 * @see #removeVerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 * @since 3.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 public void addVerifyListener (VerifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
295 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 TypedListener typedListener = new TypedListener (listener);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
297 addListener (DWT.Verify, typedListener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 static int checkStyle (int style) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 * Feature in Windows. It is not possible to create
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 * a combo box that has a border using Windows style
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 * bits. All combo boxes draw their own border and
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 * do not use the standard Windows border styles.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 * Therefore, no matter what style bits are specified,
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
307 * clear the BORDER bits so that the DWT style will
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 * match the Windows widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 * The Windows behavior is currently implemented on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * all platforms.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
313 style &= ~DWT.BORDER;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 * Even though it is legal to create this widget
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 * with scroll bars, they serve no useful purpose
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 * because they do not automatically scroll the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 * widget's client area. The fix is to clear
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
320 * the DWT style.
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
322 style &= ~(DWT.H_SCROLL | DWT.V_SCROLL);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
323 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
324 if ((style & DWT.SIMPLE) !is 0) return style & ~DWT.READ_ONLY;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 return style;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
328 protected override void checkSubclass () {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
329 if (!isValidSubclass ()) error (DWT.ERROR_INVALID_SUBCLASS);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 * Sets the selection in the receiver's text field to an empty
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 * selection starting just before the first character. If the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 * text field is editable, this has the effect of placing the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 * i-beam at the start of the text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 * Note: To clear the selected items in the receiver's list,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 * use <code>deselectAll()</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
342 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 * @see #deselectAll
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 public void clearSelection () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 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
352 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
353 OS.gtk_editable_select_region (entryHandle, position, position);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 void clearText () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 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
360 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
361 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 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
363 auto modelHandle = OS.gtk_combo_box_get_model (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 char* ptr;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 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
366 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
367 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
368 if (fromStringz(ptr).length > 0) postEvent (DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 OS.g_free (ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 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
373 OS.gtk_entry_set_text (entryHandle, &dummy );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 }
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
375 OS.gtk_combo_box_set_active (handle, -1);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 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
377 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 73
diff changeset
380 public override Point computeSize (int wHint, int hHint, bool changed) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 return computeNativeSize (handle, wHint, hHint, changed);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
385 if (wHint !is DWT.DEFAULT && wHint < 0) wHint = 0;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
386 if (hHint !is DWT.DEFAULT && hHint < 0) hHint = 0;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 int w, h;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 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
389 auto layout = OS.gtk_entry_get_layout (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 OS.pango_layout_get_size (layout, &w, &h);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 int xborder = INNER_BORDER, yborder = INNER_BORDER;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 auto style = OS.gtk_widget_get_style (entryHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 xborder += OS.gtk_style_get_xthickness (style);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 yborder += OS.gtk_style_get_ythickness (style);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 int property;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 OS.gtk_widget_style_get1 (entryHandle, OS.interior_focus.ptr, &property);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 if (property is 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 OS.gtk_widget_style_get1 (entryHandle, OS.focus_line_width.ptr, &property);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 xborder += property ;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 yborder += property ;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 int width = OS.PANGO_PIXELS (w ) + xborder * 2;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 int height = OS.PANGO_PIXELS (h ) + yborder * 2;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 GtkRequisition arrowRequesition;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 OS.gtk_widget_size_request (buttonHandle, &arrowRequesition);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 GtkRequisition listRequesition;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 auto listParent = OS.gtk_widget_get_parent (listHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 OS.gtk_widget_size_request (listParent !is null ? listParent : listHandle, &listRequesition);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 width = Math.max (listRequesition.width, width) + arrowRequesition.width + 4;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
412 width = wHint is DWT.DEFAULT ? width : wHint;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
413 height = hHint is DWT.DEFAULT ? height : hHint;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 return new Point (width, height);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 * Copies the selected text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 * The current selection is copied to the clipboard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
423 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 * @since 2.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 public void copy () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 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
432 if (entryHandle !is null) OS.gtk_editable_copy_clipboard (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
435 override void createHandle (int index) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 state |= HANDLE | MENU;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 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
438 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
439 OS.gtk_fixed_set_has_window (fixedHandle, true);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
441 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
442 handle = OS.gtk_combo_box_new_text ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
443 if (handle is null) error (DWT.ERROR_NO_HANDLES);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 } 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
445 handle = OS.gtk_combo_box_entry_new_text ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
446 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
447 entryHandle = OS.gtk_bin_get_child (handle);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
448 if (entryHandle is null) error (DWT.ERROR_NO_HANDLES);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 }
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
450 OS.gtk_container_add (fixedHandle, handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 textRenderer = cast(GtkWidget*)OS.gtk_cell_renderer_text_new ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
452 if (textRenderer is null) error (DWT.ERROR_NO_HANDLES);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 * Feature in GTK. In order to make a read only combo box the same
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 * height as an editable combo box the ypad must be set to 0. In
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 * versions 2.4.x of GTK, a pad of 0 will clip some letters. The
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 * fix is to set the pad to 1.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 int pad = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 if (OS.GTK_VERSION < OS.buildVERSION(2, 6, 0)) pad = 1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 OS.g_object_set1 (textRenderer, OS.ypad.ptr, pad);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 * Feature in GTK. In version 2.4.9 of GTK, a warning is issued
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 * when a call to gtk_cell_layout_clear() is made. The fix is to hide
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * the warning.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 bool warnings = display.getWarnings ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 display.setWarnings (false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 OS.gtk_cell_layout_clear (handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 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
471 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
472 OS.gtk_cell_layout_set_attributes1 (handle, textRenderer, OS.text.ptr, null);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 * Feature in GTK. There is no API to query the button
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 * handle from a combo box although it is possible to get the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 * text field. The button handle is needed to hook events. The
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 * fix is to walk the combo tree and find the first child that is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 * an instance of button.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 display.allChildrenCollect (handle, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 if (display.allChildren !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 auto list = display.allChildren;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 while (list !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 auto widget = OS.g_list_data (list);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 if (OS.GTK_IS_BUTTON (cast(GTypeInstance*)widget)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 buttonHandle = cast(GtkWidget*)widget;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 list = OS.g_list_next (list);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 OS.g_list_free (display.allChildren);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 display.allChildren = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 } 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
496 handle = OS.gtk_combo_new ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
497 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
498 OS.gtk_container_add (fixedHandle, handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 GtkCombo* combo = cast(GtkCombo*)handle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 entryHandle = combo.entry;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 listHandle = combo.list;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 * Feature in GTK. There is no API to query the arrow
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 * handle from a combo box although it is possible to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 * get the list and text field. The arrow handle is needed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 * to hook events. The fix is to find the first child that is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 * not the entry or list and assume this is the arrow handle.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 */
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
510 auto list = OS.gtk_container_get_children (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 if (list !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 int i = 0, count = OS.g_list_length (list);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 while (i<count) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 auto childHandle = OS.g_list_nth_data (list, i);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 if (childHandle !is entryHandle && childHandle !is listHandle) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 buttonHandle = cast(GtkWidget*)childHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 i++;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 OS.g_list_free (list);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
524 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
525 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
526 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
527 OS.gtk_combo_set_case_sensitive (handle, true);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 * Cuts the selected text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 * The current selection is first copied to the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 * clipboard and then deleted from the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
538 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 * @since 2.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 public void cut () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 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
547 if (entryHandle !is null) OS.gtk_editable_cut_clipboard (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 override void deregister () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 super.deregister ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 if (buttonHandle !is null) display.removeWidget (buttonHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 if (entryHandle !is null) display.removeWidget (entryHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 if (listHandle !is null) display.removeWidget (listHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 if (imContext !is null) display.removeWidget (cast(GtkWidget*)imContext);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 override bool filterKey (int keyval, GdkEventKey* event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 int time = OS.gdk_event_get_time (cast(GdkEvent*)event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 if (time !is lastEventTime) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 lastEventTime = time;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 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
565 return cast(bool)OS.gtk_im_context_filter_keypress (imContext, event);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 gdkEventKey = event;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 void fixIM () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 * The IM filter has to be called one time for each key press event.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 * 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
576 * is filtered by DWT and the second event is filtered by GTK. In some
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 * cases the GTK handler does not run (the widget is destroyed, the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 * 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
579 * filter has to be called by DWT.
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 if (gdkEventKey !is null && gdkEventKey !is cast(GdkEventKey*)-1) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 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
584 OS.gtk_im_context_filter_keypress (imContext, gdkEventKey);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 gdkEventKey = cast(GdkEventKey*)-1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 return;
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 gdkEventKey = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 override GtkWidget* fontHandle () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 if (entryHandle !is null) return entryHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 return super.fontHandle ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 override GtkWidget* focusHandle () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
599 if ((style & DWT.READ_ONLY) !is 0 && buttonHandle !is null) return buttonHandle;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601 if (entryHandle !is null) return entryHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
602 return super.focusHandle ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
605 override bool hasFocus () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 if (super.hasFocus ()) return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 if (entryHandle !is null && OS.GTK_WIDGET_HAS_FOCUS (entryHandle)) return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 if (listHandle !is null && OS.GTK_WIDGET_HAS_FOCUS (listHandle)) return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
612 override void hookEvents () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 super.hookEvents ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 if (OS.GTK_VERSION >= OS.buildVERSION(2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 OS.g_signal_connect_closure (handle, OS.changed.ptr, display.closures [CHANGED], true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 if (entryHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 OS.g_signal_connect_closure (entryHandle, OS.changed.ptr, display.closures [CHANGED], true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 OS.g_signal_connect_closure (entryHandle, OS.insert_text.ptr, display.closures [INSERT_TEXT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 OS.g_signal_connect_closure (entryHandle, OS.delete_text.ptr, display.closures [DELETE_TEXT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 OS.g_signal_connect_closure (entryHandle, OS.activate.ptr, display.closures [ACTIVATE], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 int eventMask = OS.GDK_POINTER_MOTION_MASK | OS.GDK_BUTTON_PRESS_MASK |
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 OS.GDK_BUTTON_RELEASE_MASK;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 GtkWidget*[] handles = [ buttonHandle, entryHandle, listHandle ];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 for (int i=0; i<handles.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 auto eventHandle = handles [i];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 if (eventHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 /* Connect the mouse signals */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 OS.gtk_widget_add_events (eventHandle, eventMask);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 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
633 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
634 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
635 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 * Feature in GTK. Events such as mouse move are propagated up
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 * 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
638 * correct GTK behavior but not correct for DWT. The fix is to
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 * hook a signal after and stop the propagation using a negative
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 * event number to distinguish this case.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 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
643 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
644 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
645
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 /* Connect the event_after signal for both key and mouse */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 if (eventHandle !is focusHandle ()) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 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
649 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 if (imContext !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 OS.g_signal_connect_closure (imContext, OS.commit.ptr, display.closures [COMMIT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 int id = OS.g_signal_lookup (OS.commit.ptr, OS.gtk_im_context_get_type ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 int blockMask = OS.G_SIGNAL_MATCH_DATA | OS.G_SIGNAL_MATCH_ID;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 OS.g_signal_handlers_block_matched (imContext, blockMask, id, 0, null, null, entryHandle);
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
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 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
662 return entryHandle !is null ? OS.GTK_ENTRY_IM_CONTEXT (entryHandle) : null;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 * Deselects the item at the given zero-relative index in the receiver's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 * list. If the item at the index was already deselected, it remains
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 * deselected. Indices that are out of range are ignored.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670 * @param index the index of the item to deselect
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
672 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 public void deselect (int index) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 if (index < 0 || index >= items.length) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 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
681 if (OS.gtk_combo_box_get_active (handle) is index) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682 clearText ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 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
686 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
687 auto item = OS.g_list_nth_data (children, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 bool selected = OS.GTK_WIDGET_STATE (item) is OS.GTK_STATE_SELECTED;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 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
690 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
691 OS.gtk_entry_set_text (entryHandle, "".ptr );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 * Deselects all selected items in the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
700 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 * Note: To clear the selection in the receiver's text field,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702 * use <code>clearSelection()</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
705 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
708 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
710 * @see #clearSelection
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 public void deselectAll () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 clearText ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717 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
718 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
719 OS.gtk_entry_set_text (entryHandle, "".ptr );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 ignoreSelect = 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
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 override bool dragDetect(int x, int y, bool filter, bool* consume) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 if (filter && entryHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
727 int index;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728 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
729 auto layout = OS.gtk_entry_get_layout (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
730 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
731 auto ptr = OS.pango_layout_get_text (layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732 int position = cast(int)/*64*/OS.g_utf8_pointer_to_offset (ptr, ptr + index) + trailing;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 Point selection = getSelection ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
734 if (selection.x <= position && position < selection.y) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735 if (super.dragDetect (x, y, filter, consume)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736 if (consume !is null) *consume = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
738 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
739 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
740 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 return super.dragDetect (x, y, filter, consume);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
744
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
745 override GtkWidget* enterExitHandle () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746 return fixedHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
747 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749 override GdkDrawable* eventWindow () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 return paintWindow ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753 override GdkColor* getBackgroundColor () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 return getBaseColor ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 override GdkColor* getForegroundColor () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 return getTextColor ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
762 * Returns the item at the given, zero-relative index in the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
763 * receiver's list. Throws an exception if the index is out
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 * of range.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 * @param index the index of the item to return
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767 * @return the item at the given index
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 * <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
771 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
772 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
777 public String getItem (int index) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 if (!(0 <= index && index < items.length)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
780 error (DWT.ERROR_INVALID_RANGE);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 return items [index];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786 * Returns the number of items contained in the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 * @return the number of items
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
790 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 public int getItemCount () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 return items.length;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 * Returns the height of the area which would be used to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 * display <em>one</em> of the items in the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 * @return the height of one item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
806 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 public int getItemHeight () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813 return fontHeight (getFontDescription (), listHandle !is null ? listHandle : handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814 }
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 * Returns a (possibly empty) array of <code>String</code>s which are
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 * the items in the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820 * Note: This is not the actual structure used by the receiver
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 * to maintain its list of items, so modifying the array will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822 * not affect the receiver.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 * @return the items in the receiver's list
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
827 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
832 public String [] getItems () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 checkWidget();
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
834 String [] result = new String[](items.length);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 System.arraycopy (items, 0, result, 0, items.length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 * Returns the orientation of the receiver.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 * @return the orientation style
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843 *
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 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
849 * @since 2.1.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 public int getOrientation () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
852 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
853 return style & (DWT.LEFT_TO_RIGHT | DWT.RIGHT_TO_LEFT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
854 }
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 * Returns a <code>Point</code> whose x coordinate is the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858 * character position representing the start of the selection
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
859 * in the receiver's text field, and whose y coordinate is the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 * character position representing the end of the selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 * An "empty" selection is indicated by the x and y coordinates
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
862 * having the same value.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
863 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 * Indexing is zero based. The range of a selection is from
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 * 0..N where N is the number of characters in the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868 * @return a point representing the selection start and end
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
869 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
870 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 public Point getSelection () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
877 if ((style & DWT.READ_ONLY) !is 0) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
878 int length = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879 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
880 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 if (index !is -1) length = getItem (index).length;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882 } 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
883 auto str = OS.gtk_entry_get_text (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 if (str !is null) length = cast(int)/*64*/OS.g_utf8_strlen (str, -1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
885 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
886 return new Point (0, length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
887 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
888 int start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
889 int end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
890 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
891 OS.gtk_editable_get_selection_bounds (entryHandle, &start, &end);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
892 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
893 return new Point(start, end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
894 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
895
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
896 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
897 * Returns the zero-relative index of the item which is currently
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
898 * selected in the receiver's list, or -1 if no item is selected.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
899 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
900 * @return the index of the selected item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
901 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
902 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
903 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
904 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
905 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
906 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
907 public int getSelectionIndex () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
908 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 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
910 return OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
911 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
912 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
913 auto children = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
914 auto temp = children;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
915 while (temp !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
916 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
917 if (OS.GTK_WIDGET_STATE (item) is OS.GTK_STATE_SELECTED) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
918 result = index;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
919 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
920 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
921 index++;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
922 temp = OS.g_list_next (temp);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
923 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
928 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
929 * Returns a string containing a copy of the contents of the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
930 * receiver's text field, or an empty string if there are no
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
931 * contents.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
932 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
933 * @return the receiver's text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
935 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
937 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
940 public String getText () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
941 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942 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
943 auto str = OS.gtk_entry_get_text (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 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
945 return fromStringz(str).dup;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
946 } 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
947 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
948 return index !is -1 ? getItem (index) : "";
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
950 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
951
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
952 String getText (int start, int stop) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
953 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
954 * NOTE: The current implementation uses substring ()
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955 * which can reference a potentially large character
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
956 * array.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
957 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
958 return getText ()[ start .. stop - 1];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
959 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
960
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
961 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
962 * Returns the height of the receivers's text field.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
963 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
964 * @return the text height
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
965 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
966 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
967 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
968 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
969 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
970 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
971 public int getTextHeight () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
973 GtkRequisition requisition;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
974 gtk_widget_size_request (handle, &requisition);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
975 return OS.GTK_WIDGET_REQUISITION_HEIGHT (handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
976 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
977
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
978 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
979 * Returns the maximum number of characters that the receiver's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
980 * text field is capable of holding. If this has not been changed
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
981 * by <code>setTextLimit()</code>, it will be the constant
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
982 * <code>Combo.LIMIT</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
983 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
984 * @return the text limit
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 * @see #LIMIT
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
992 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
993 public int getTextLimit () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
994 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
995 int limit = entryHandle !is null ? OS.gtk_entry_get_max_length (entryHandle) : 0;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
996 return limit is 0 ? LIMIT : limit;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
997 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
998
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
999 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1000 * Gets the number of items that are visible in the drop
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1001 * down portion of the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1002 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1003 * Note: This operation is a hint and is not supported on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1004 * platforms that do not have this concept.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1005 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1006 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1007 * @return the number of items that are visible
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1008 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1009 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1010 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1011 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1012 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1013 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1014 * @since 3.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1015 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1016 public int getVisibleItemCount () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1017 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1018 return visibleCount;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1019 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1020
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1021 override int /*long*/ gtk_activate (GtkWidget* widget) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1022 postEvent (DWT.DefaultSelection);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1023 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1024 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1025
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1026 override int gtk_changed (GtkWidget* widget) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1027 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1028 if (widget is handle) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1029 if (entryHandle is null) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1030 sendEvent(DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1031 if (isDisposed ()) return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1032 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1033 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1034 * Feature in GTK. GTK emits a changed signal whenever
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1035 * the contents of a combo box are altered by typing or
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1036 * by selecting an item in the list, but the event should
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1037 * only be sent when the list is selected. The fix is to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1038 * only send out a selection event when there is a selected
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1039 * item.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1040 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1041 * NOTE: This code relies on GTK clearing the selected
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1042 * item and not matching the item as the user types.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1043 */
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
1044 int index = OS.gtk_combo_box_get_active (handle);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1045 if (index !is -1) postEvent (DWT.Selection);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1046 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1047 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1048 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1049 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
1050 auto ptr = OS.gtk_entry_get_text (entryHandle);
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1051 String text = fromStringz(ptr).dup;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1052 for (int i = 0; i < items.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1053 if (items [i] ==/*eq*/ text) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1054 postEvent (DWT.Selection);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1055 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1056 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1057 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1058 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1059 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1060 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1061 * Feature in GTK. When the user types, GTK positions
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1062 * the caret after sending the changed signal. This
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1063 * means that application code that attempts to position
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1064 * the caret during a changed signal will fail. The fix
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1065 * is to post the modify event when the user is typing.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1066 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1067 bool keyPress = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1068 auto eventPtr = OS.gtk_get_current_event ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1069 if (eventPtr !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1070 GdkEventKey* gdkEvent = cast(GdkEventKey*)eventPtr;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1071 switch (gdkEvent.type) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1072 case OS.GDK_KEY_PRESS:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1073 keyPress = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1074 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1075 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1076 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1077 OS.gdk_event_free (eventPtr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1078 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1079 if (keyPress) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1080 postEvent (DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1081 } else {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1082 sendEvent (DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1083 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1084 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1085 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1086
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1087 override int gtk_commit (GtkIMContext* imContext, char* text) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1088 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
1089 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
1090 char [] chars = fromStringz(text);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1091 if (chars.length is 0) return 0;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1092 char [] newChars = sendIMKeyEvent (DWT.KeyDown, null, chars);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1093 if (newChars is null) return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1094 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1095 * Feature in GTK. For a GtkEntry, during the insert-text signal,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1096 * GTK allows the programmer to change only the caret location,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1097 * not the selection. If the programmer changes the selection,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1098 * the new selection is lost. The fix is to detect a selection
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1099 * change and set it after the insert-text signal has completed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1100 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1101 fixStart = fixEnd = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1102 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
1103 int id = OS.g_signal_lookup (OS.commit.ptr, OS.gtk_im_context_get_type ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1104 int mask = OS.G_SIGNAL_MATCH_DATA | OS.G_SIGNAL_MATCH_ID;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1105 OS.g_signal_handlers_unblock_matched (imContext, mask, id, 0, null, null, entryHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1106 if (newChars is chars) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1107 OS.g_signal_emit_by_name1 (imContext, OS.commit.ptr, cast(int)text);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1108 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1109 OS.g_signal_emit_by_name1 (imContext, OS.commit.ptr, cast(int)toStringz(newChars));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1110 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1111 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
1112 OS.g_signal_handlers_block_matched (imContext, mask, id, 0, null, null, entryHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1113 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
1114 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
1115 OS.gtk_editable_select_region (entryHandle, fixStart, fixEnd);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1116 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1117 fixStart = fixEnd = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1118 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1119 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1120
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1121 override int gtk_delete_text (GtkWidget* widget, int start_pos, int end_pos) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1122 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
1123 OS.gtk_list_unselect_item (listHandle, 0);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1124 OS.g_signal_stop_emission_by_name (entryHandle, OS.delete_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1125 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1126 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1127 if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0;
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1128 String newText = verifyText ("", cast(int)/*64*/start_pos, cast(int)/*64*/end_pos);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1129 if (newText is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1130 OS.g_signal_stop_emission_by_name (entryHandle, OS.delete_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1131 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1132 if (newText.length > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1133 int pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1134 pos = cast(int)/*64*/end_pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1135 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
1136 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
1137 OS.gtk_editable_insert_text (entryHandle, newText.ptr, newText.length, &pos);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1138 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
1139 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
1140 OS.gtk_editable_set_position (entryHandle, pos );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1141 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1142 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1143 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1144 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1145
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1146 override int gtk_focus_out_event (GtkWidget* widget, GdkEventFocus* event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1147 fixIM ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1148 return super.gtk_focus_out_event (widget, event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1149 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1150
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1151 override int gtk_insert_text (GtkEditable* widget, char* new_text, int new_text_length, int position) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1152 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
1153 OS.gtk_list_unselect_item (listHandle, 0);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1154 OS.g_signal_stop_emission_by_name (entryHandle, OS.insert_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1155 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1156 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1157 if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1158 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
1159 String oldText = new_text[0..new_text_length];
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1160 int pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1161 pos = position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1162 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
1163 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
1164 pos = fromStringz(ptr).length;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1165 }
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1166 String newText = verifyText (oldText, pos, pos);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1167 if (newText !is oldText) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1168 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
1169 OS.gtk_editable_get_selection_bounds (entryHandle, &newStart, &newEnd);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1170 if (newText !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1171 if (newStart !is newEnd) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1172 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
1173 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
1174 OS.gtk_editable_delete_selection (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1175 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
1176 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
1177 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1178 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
1179 OS.gtk_editable_insert_text (entryHandle, newText.ptr, newText.length, &pos);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1180 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
1181 newStart = newEnd = pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1182 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1183 pos = newEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1184 if (newStart !is newEnd) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1185 fixStart = newStart;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1186 fixEnd = newEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1187 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1188 position = pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1189 OS.g_signal_stop_emission_by_name (entryHandle, OS.insert_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1190 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1191 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1192 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1193
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1194 override int gtk_key_press_event (GtkWidget* widget, GdkEventKey* event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1195 auto result = super.gtk_key_press_event (widget, event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1196 if (result !is 0) fixIM ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1197 if (gdkEventKey is cast(GdkEventKey*)-1) result = 1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1198 gdkEventKey = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1199 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1200 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1201
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1202 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1203 * Searches the receiver's list starting at the first item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1204 * (index 0) until an item is found that is equal to the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1205 * argument, and returns the index of that item. If no item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1206 * is found, returns -1.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1207 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1208 * @param string the search item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1209 * @return the index of the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1210 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1211 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1212 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1213 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1214 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1215 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1216 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1217 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1218 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1219 public int indexOf (String string) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1220 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1221 return indexOf (string, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1222 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1223
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1224 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1225 * Searches the receiver's list starting at the given,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1226 * zero-relative index until an item is found that is equal
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1227 * to the argument, and returns the index of that item. If
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1228 * no item is found or the starting index is out of range,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1229 * returns -1.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1230 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1231 * @param string the search item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1232 * @param start the zero-relative index at which to begin the search
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1233 * @return the index of the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1234 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1235 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1236 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1237 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1238 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1239 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1240 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1241 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1242 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1243 public int indexOf (String string, int start) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1244 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1245 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1246 if (!(0 <= start && start < items.length)) return -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1247 for (int i=start; i<items.length; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1248 if (string==/*eq*/items [i]) return i;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1249 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1250 return -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1251 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1252
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1253 override GdkDrawable* paintWindow () {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1254 auto childHandle = entryHandle !is null ? entryHandle : handle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1255 OS.gtk_widget_realize (childHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1256 auto window = OS.GTK_WIDGET_WINDOW (childHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1257 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1258 if ((style & DWT.READ_ONLY) !is 0) return window;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1259 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1260 auto children = OS.gdk_window_get_children (window);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1261 if (children !is null) window = cast(GdkDrawable*)OS.g_list_data (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1262 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1263 return window;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1264 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1265
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1266 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1267 * Pastes text from clipboard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1268 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1269 * The selected text is deleted from the widget
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1270 * and new text inserted from the clipboard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1271 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1272 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1273 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1274 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1275 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1276 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1277 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1278 * @since 2.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1279 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1280 public void paste () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1281 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
1282 if (entryHandle !is null) OS.gtk_editable_paste_clipboard (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1283 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1284
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1285 override GtkWidget* parentingHandle() {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1286 return fixedHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1287 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1288
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1289 override void register () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1290 super.register ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1291 if (buttonHandle !is null) display.addWidget (buttonHandle, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1292 if (entryHandle !is null) display.addWidget (entryHandle, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1293 if (listHandle !is null) display.addWidget (listHandle, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1294 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1295 if (imContext !is null) display.addWidget (cast(GtkWidget*)imContext, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1296 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1297
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1298 override void releaseHandle () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1299 super.releaseHandle ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1300 buttonHandle = entryHandle = listHandle = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1301 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1302
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1303 override void releaseWidget () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1304 super.releaseWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1305 textRenderer = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1306 fixIM ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1307 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1308
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1309 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1310 * Removes the item from the receiver's list at the given
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1311 * zero-relative index.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1312 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1313 * @param index the index for the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1314 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1315 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1316 * <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
1317 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1318 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1319 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1320 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1321 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1322 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1323 public void remove (int index) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1324 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1325 if (!(0 <= index && index < items.length)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1326 error (DWT.ERROR_INVALID_RANGE);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1327 }
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1328 String [] oldItems = items;
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1329 String [] newItems = new String[]( oldItems.length - 1 );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1330 System.arraycopy (oldItems, 0, newItems, 0, index);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1331 System.arraycopy (oldItems, index + 1, newItems, index, oldItems.length - index - 1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1332 items = newItems;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1333 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
1334 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
1335 OS.gtk_combo_box_remove_text (handle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1336 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1337 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
1338 auto children = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1339 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
1340 bool selected = OS.GTK_WIDGET_STATE (item) is OS.GTK_STATE_SELECTED;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1341 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
1342 OS.gtk_list_remove_items (listHandle, items);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1343 OS.g_list_free (items);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1344 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1345 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
1346 OS.gtk_entry_set_text (entryHandle, "".ptr);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1347 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1348 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1349 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1350 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1351
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1352 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1353 * Removes the items from the receiver's list which are
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1354 * between the given zero-relative start and end
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1355 * indices (inclusive).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1356 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1357 * @param start the start of the range
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1358 * @param end the end of the range
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1359 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1360 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1361 * <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
1362 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1363 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1364 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1365 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1366 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1367 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1368 public void remove (int start, int end) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1369 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1370 if (start > end) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1371 if (!(0 <= start && start <= end && end < items.length)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1372 error (DWT.ERROR_INVALID_RANGE);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1373 }
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1374 String [] oldItems = items;
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1375 String [] newItems = new String[](oldItems.length - (end - start + 1));
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1376 System.arraycopy (oldItems, 0, newItems, 0, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1377 System.arraycopy (oldItems, end + 1, newItems, start, oldItems.length - end - 1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1378 items = newItems;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1379 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
1380 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1381 if (start <= index && index <= end) clearText();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1382 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
1383 OS.gtk_combo_box_remove_text (handle, i);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1384 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1385 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1386 bool selected = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1387 ignoreSelect = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1388 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
1389 auto children = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1390 for (int i = start; i <= end; i++) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1391 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
1392 selected |= OS.GTK_WIDGET_STATE (item) is OS.GTK_STATE_SELECTED;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1393 items = OS.g_list_append (items, item);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1394 }
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
1395 OS.gtk_list_remove_items (listHandle, items);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1396 OS.g_list_free (items);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1397 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1398 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
1399 OS.gtk_entry_set_text (entryHandle, "".ptr );
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1400 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1401 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1402 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1403 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1404
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1405 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1406 * Searches the receiver's list starting at the first item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1407 * until an item is found that is equal to the argument,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1408 * and removes that item from the list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1409 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1410 * @param string the item to remove
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1411 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1412 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1413 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1414 * <li>ERROR_INVALID_ARGUMENT - if the string is not found in the list</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1415 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1416 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1417 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1418 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1419 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1420 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1421 public void remove (String string) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1422 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1423 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1424 int index = indexOf (string, 0);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1425 if (index is -1) error (DWT.ERROR_INVALID_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1426 remove (index);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1427 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1428
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1429 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1430 * Removes all of the items from the receiver's list and clear the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1431 * contents of receiver's text field.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1432 * <p>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1433 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1434 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1435 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1436 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1437 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1438 public void removeAll () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1439 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1440 int count = items.length;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1441 items = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1442 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1443 clearText ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1444 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
1445 OS.gtk_combo_box_remove_text (handle, i);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1446 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1447 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1448 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
1449 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
1450 OS.gtk_entry_set_text (entryHandle, "".ptr);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1451 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1452 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1453 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1454
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1455 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1456 * Removes the listener from the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1457 * be notified when the receiver's text is modified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1458 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1459 * @param listener the listener which should no longer be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1460 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1461 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1462 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1463 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1464 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1465 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1466 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1467 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1468 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1469 * @see ModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1470 * @see #addModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1471 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1472 public void removeModifyListener (ModifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1473 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1474 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1475 if (eventTable is null) return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1476 eventTable.unhook (DWT.Modify, listener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1477 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1478
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1479 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1480 * Removes the listener from the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1481 * be notified when the user changes the receiver's selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1482 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1483 * @param listener the listener which should no longer be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1484 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1485 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1486 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1487 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1488 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1489 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1490 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1491 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1492 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1493 * @see SelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1494 * @see #addSelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1495 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1496 public void removeSelectionListener (SelectionListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1497 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1498 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1499 if (eventTable is null) return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1500 eventTable.unhook (DWT.Selection, listener);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1501 eventTable.unhook (DWT.DefaultSelection,listener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1502 }
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 * Removes the listener from the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1506 * be notified when the control is verified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1507 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1508 * @param listener the listener which should no longer be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1509 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1510 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1511 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1512 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1513 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1514 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1515 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1516 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1517 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1518 * @see VerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1519 * @see #addVerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1520 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1521 * @since 3.1
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1522 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1523 public void removeVerifyListener (VerifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1524 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1525 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1526 if (eventTable is null) return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1527 eventTable.unhook (DWT.Verify, listener);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1528 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1529
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1530 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1531 * Selects the item at the given zero-relative index in the receiver's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1532 * list. If the item at the index was already selected, it remains
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1533 * selected. Indices that are out of range are ignored.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1534 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1535 * @param index the index of the item to select
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1536 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1537 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1538 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1539 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1540 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1541 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1542 public void select (int index) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1543 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1544 if (index < 0 || index >= items.length) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1545 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1546 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
1547 OS.gtk_combo_box_set_active (handle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1548 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
1549 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1550 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
1551 OS.gtk_list_select_item (listHandle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1552 ignoreSelect = false;
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
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1556 override void setBackgroundColor (GdkColor* color) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1557 super.setBackgroundColor (color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1558 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1559 if (entryHandle !is null) OS.gtk_widget_modify_base (entryHandle, 0, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1560 OS.g_object_set1 (textRenderer, OS.background_gdk.ptr, cast(int)color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1561 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1562 OS.gtk_widget_modify_base (entryHandle, 0, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1563 if (listHandle !is null) OS.gtk_widget_modify_base (listHandle, 0, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1564 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1565 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1566
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1567 override int setBounds (int x, int y, int width, int height, bool move, bool resize) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1568 int newHeight = resize ? getTextHeight () : height;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1569 return super.setBounds (x, y, width, newHeight, move, resize);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1570 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1571
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1572 override void setFontDescription (PangoFontDescription* font) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1573 super.setFontDescription (font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1574 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1575 if (entryHandle !is null) OS.gtk_widget_modify_font (entryHandle, font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1576 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
1577 if ((style & DWT.READ_ONLY) !is 0) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1578 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1579 * Bug in GTK. Setting the font can leave the combo box with an
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1580 * invalid minimum size. The fix is to temporarily change the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1581 * selected item to force the combo box to resize.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1582 */
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
1583 int index = OS.gtk_combo_box_get_active (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1584 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
1585 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
1586 OS.gtk_combo_box_set_active (handle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1587 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
1588 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1589 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1590 OS.gtk_widget_modify_font (entryHandle, font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1591 if (listHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1592 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
1593 auto itemsList = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1594 if (itemsList !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1595 int count = OS.g_list_length (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1596 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
1597 auto widget = OS.gtk_bin_get_child (OS.g_list_nth_data (itemsList, i));
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1598 OS.gtk_widget_modify_font (widget, font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1599 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1600 OS.g_list_free (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1601 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1602 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1603 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1604 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1605
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1606 override void setForegroundColor (GdkColor* color) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1607 super.setForegroundColor (color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1608 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1609 if (entryHandle !is null) setForegroundColor (entryHandle, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1610 OS.g_object_set1 (textRenderer, OS.foreground_gdk.ptr, cast(int)color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1611 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1612 setForegroundColor (entryHandle, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1613 if (listHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1614 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
1615 auto itemsList = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1616 if (itemsList !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1617 int count = OS.g_list_length (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1618 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
1619 auto widget = OS.gtk_bin_get_child (OS.g_list_nth_data (itemsList, i));
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1620 setForegroundColor (widget, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1621 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1622 OS.g_list_free (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1623 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1624 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1625 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1626 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1627
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1628 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1629 * Sets the text of the item in the receiver's list at the given
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1630 * zero-relative index to the string argument.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1631 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1632 * @param index the index for the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1633 * @param string the new text for the item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1634 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1635 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1636 * <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
1637 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1638 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1639 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1640 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1641 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1642 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1643 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1644 public void setItem (int index, String string) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1645 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1646 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1647 if (!(0 <= index && index < items.length)) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1648 error (DWT.ERROR_INVALID_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1649 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1650 items [index] = string;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1651 char* buffer = toStringz(string);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1652 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
1653 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
1654 OS.gtk_combo_box_insert_text (handle, index, buffer);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1655 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1656 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
1657 auto children = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1658 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
1659 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
1660 OS.gtk_label_set_text (label, buffer);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1661 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1662 ignoreSelect = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1663 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1664 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1665
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1666 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1667 * Sets the receiver's list to be the given array of items.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1668 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1669 * @param items the array of items
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1670 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1671 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1672 * <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1673 * <li>ERROR_INVALID_ARGUMENT - if an item in the items array is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1674 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1675 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1676 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1677 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1678 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1679 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1680 public void setItems (String [] items) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1681 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1682 if (items is null) error (DWT.ERROR_NULL_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1683 for (int i=0; i<items.length; i++) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1684 if (items [i] is null) error (DWT.ERROR_INVALID_ARGUMENT);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1685 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1686 int count = this.items.length;
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1687 this.items = new String[](items.length);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1688 System.arraycopy (items, 0, this.items, 0, items.length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1689 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1690 clearText ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1691 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
1692 OS.gtk_combo_box_remove_text (handle, i);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1693 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1694 for (int i = 0; i < items.length; i++) {
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1695 String string = items [i];
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1696 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
1697 OS.gtk_combo_box_insert_text (handle, i, buffer);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1698 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1699 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1700 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
1701 OS.gtk_list_clear_items (listHandle, 0, -1);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1702 auto font = getFontDescription ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1703 GdkColor* color = getForegroundColor ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1704 int direction = OS.gtk_widget_get_direction (handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1705 int i = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1706 while (i < items.length) {
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1707 String string = items [i];
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1708 char * buffer = toStringz(string);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1709 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
1710 auto label = OS.gtk_bin_get_child (item);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1711 setForegroundColor (label, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1712 OS.gtk_widget_modify_font (label, font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1713 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
1714 OS.gtk_container_add (listHandle, item);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1715 OS.gtk_widget_show (item);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1716 i++;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1717 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1718 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
1719 OS.gtk_entry_set_text (entryHandle, "".ptr);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1720 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1721 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1722
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1723 /*public*/ void setListVisible (bool visible) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1724 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1725 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1726 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
1727 OS.gtk_combo_box_popup (handle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1728 } 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
1729 OS.gtk_combo_box_popdown (handle);
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
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1734 override void setOrientation() {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1735 super.setOrientation();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1736 if ((style & DWT.RIGHT_TO_LEFT) !is 0) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1737 if (listHandle !is null) OS.gtk_widget_set_direction (listHandle, OS.GTK_TEXT_DIR_RTL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1738 if (entryHandle !is null) OS.gtk_widget_set_direction (entryHandle, OS.GTK_TEXT_DIR_RTL);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1739 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1740 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1741
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1742 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1743 * 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
1744 * 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
1745 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1746 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1747 * @param orientation new orientation style
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1748 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1749 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1750 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1751 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1752 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1753 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1754 * @since 2.1.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1755 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1756 public void setOrientation (int orientation) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1757 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1758 int flags = DWT.RIGHT_TO_LEFT | DWT.LEFT_TO_RIGHT;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1759 if ((orientation & flags) is 0 || (orientation & flags) is flags) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1760 style &= ~flags;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1761 style |= orientation & flags;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1762 int dir = (orientation & DWT.RIGHT_TO_LEFT) !is 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1763 OS.gtk_widget_set_direction (fixedHandle, dir);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1764 OS.gtk_widget_set_direction (handle, dir);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1765 if (entryHandle !is null) OS.gtk_widget_set_direction (entryHandle, dir);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1766 if (listHandle !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1767 OS.gtk_widget_set_direction (listHandle, dir);
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
1768 auto itemsList = OS.gtk_container_get_children (listHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1769 if (itemsList !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1770 int count = OS.g_list_length (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1771 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
1772 auto widget = OS.gtk_bin_get_child (OS.g_list_nth_data (itemsList, i));
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1773 OS.gtk_widget_set_direction (widget, dir);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1774 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1775 OS.g_list_free (itemsList);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1776 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1777 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1778 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1779
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1780 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1781 * Sets the selection in the receiver's text field to the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1782 * range specified by the argument whose x coordinate is the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1783 * start of the selection and whose y coordinate is the end
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1784 * of the selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1785 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1786 * @param selection a point representing the new selection start and end
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1787 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1788 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1789 * <li>ERROR_NULL_ARGUMENT - if the point is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1790 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1791 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1792 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1793 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1794 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1795 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1796 public void setSelection (Point selection) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1797 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1798 if (selection is null) error (DWT.ERROR_NULL_ARGUMENT);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1799 if ((style & DWT.READ_ONLY) !is 0) return;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1800 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
1801 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
1802 OS.gtk_editable_select_region (entryHandle, selection.x, selection.y);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1803 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1804 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1805
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1806 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1807 * Sets the contents of the receiver's text field to the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1808 * given string.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1809 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1810 * Note: The text field in a <code>Combo</code> is typically
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1811 * only capable of displaying a single line of text. Thus,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1812 * setting the text to a string containing line breaks or
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1813 * other special characters will probably cause it to
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1814 * display incorrectly.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1815 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1816 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1817 * @param string the new text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1818 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1819 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1820 * <li>ERROR_NULL_ARGUMENT - if the string is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1821 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1822 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1823 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1824 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1825 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1826 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1827 public void setText (String string) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1828 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1829 if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1830 if ((style & DWT.READ_ONLY) !is 0) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1831 int index = indexOf (string);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1832 if (index is -1) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1833 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1834 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
1835 OS.gtk_combo_box_set_active (handle, index);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1836 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
1837 return;
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 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1841 * 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
1842 * insertion of the text. This is not wrong, but is inconsistent with other platforms. The
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1843 * 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
1844 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1845 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
1846 auto ptr = OS.gtk_entry_get_text (entryHandle);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1847 string = verifyText (string, 0, cast(int)/*64*/OS.g_utf8_strlen (ptr, -1));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1848 if (string is null) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1849 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1850 auto buffer = toStringz(string);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1851 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1852 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
1853 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1854 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
1855 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
1856 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
1857 OS.gtk_entry_set_text (entryHandle, buffer);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1858 if (OS.GTK_VERSION >= OS.buildVERSION (2, 4, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1859 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
1860 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1861 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
1862 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
1863 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
1864 sendEvent (DWT.Modify);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1865 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1866
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1867 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1868 * Sets the maximum number of characters that the receiver's
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1869 * text field is capable of holding to be the argument.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1870 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1871 * To reset this value to the default, use <code>setTextLimit(Combo.LIMIT)</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1872 * Specifying a limit value larger than <code>Combo.LIMIT</code> sets the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1873 * receiver's limit to <code>Combo.LIMIT</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1874 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1875 * @param limit new text limit
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1876 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1877 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1878 * <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1879 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1880 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1881 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1882 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1883 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1884 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1885 * @see #LIMIT
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1886 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1887 public void setTextLimit (int limit) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1888 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1889 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
1890 if (entryHandle !is null) OS.gtk_entry_set_max_length (entryHandle, limit);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1891 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1892
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1893 override void setToolTipText (Shell shell, String newString) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1894 if (entryHandle !is null) shell.setToolTipText (entryHandle, newString);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1895 if (buttonHandle !is null) shell.setToolTipText (buttonHandle, newString);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1896 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1897
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1898 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1899 * Sets the number of items that are visible in the drop
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1900 * down portion of the receiver's list.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1901 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1902 * Note: This operation is a hint and is not supported on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1903 * platforms that do not have this concept.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1904 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1905 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1906 * @param count the new number of items to be visible
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1907 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1908 * @exception DWTException <ul>
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1909 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1910 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1911 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1912 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1913 * @since 3.0
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1914 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1915 public void setVisibleItemCount (int count) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1916 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1917 if (count < 0) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1918 visibleCount = count;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1919 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1920
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1921 override bool translateTraversal (GdkEventKey* keyEvent) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1922 int key = keyEvent.keyval;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1923 switch (key) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1924 case OS.GDK_KP_Enter:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1925 case OS.GDK_Return: {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1926 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1927 if (imContext !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1928 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
1929 OS.gtk_im_context_get_preedit_string (imContext, &preeditString, null, null);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1930 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
1931 int length = fromStringz(preeditString).length;
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1932 OS.g_free (preeditString);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1933 if (length !is 0) return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1934 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1935 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1936 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1937 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1938 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1939 return super.translateTraversal (keyEvent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1940 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1941
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
1942 String verifyText (String string, int start, int end) {
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1943 if (string.length is 0 && start is end) return null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1944 Event event = new Event ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1945 event.text = string;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1946 event.start = start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1947 event.end = end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1948 auto eventPtr = OS.gtk_get_current_event ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1949 if (eventPtr !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1950 GdkEventKey* gdkEvent = cast(GdkEventKey*)eventPtr;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1951 switch (gdkEvent.type) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1952 case OS.GDK_KEY_PRESS:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1953 setKeyState (event, gdkEvent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1954 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1955 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1956 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1957 OS.gdk_event_free (eventPtr);
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 * It is possible (but unlikely), that application
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1961 * code could have disposed the widget in the verify
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1962 * event. If this happens, answer null to cancel
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1963 * the operation.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1964 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 69
diff changeset
1965 sendEvent (DWT.Verify, event);
69
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1966 if (!event.doit || isDisposed ()) return null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1967 return event.text;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1968 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1969
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1970 }