annotate dwt/widgets/Text.d @ 259:c0d810de7093

Update SWT 3.4M7 to 3.4
author Frank Benoit <benoit@tionex.de>
date Sun, 29 Jun 2008 14:33:38 +0200
parents 5a30aa9820f3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
72
5899e0b43e5d porting notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1 /*******************************************************************************
259
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
2 * Copyright (c) 2000, 2008 IBM Corporation and others.
60
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>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwt.widgets.Text;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
15 import dwt.dwthelper.utils;
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
16
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
18 import dwt.DWT;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.internal.gtk.OS;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.graphics.Rectangle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.events.ModifyListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.widgets.TypedListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.events.SelectionListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.events.SelectionEvent;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.events.VerifyListener;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.widgets.Event;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.widgets.Scrollable;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.Composite;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import Math = tango.math.Math;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 static import tango.stdc.string;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 * Instances of this class are selectable user interface
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * objects that allow the user to enter and modify text.
259
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
36 * Text controls can be either single or multi-line.
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
37 * When a text control is created with a border, the
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
38 * operating system includes a platform specific inset
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
39 * around the contents of the control. When created
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
40 * without a border, an effort is made to remove the
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
41 * inset such that the preferred size of the control
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
42 * is the same size as the contents.
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * <dl>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * <dt><b>Styles:</b></dt>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * <dd>CANCEL, CENTER, LEFT, MULTI, PASSWORD, SEARCH, SINGLE, RIGHT, READ_ONLY, WRAP</dd>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * <dt><b>Events:</b></dt>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * <dd>DefaultSelection, Modify, Verify</dd>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * </dl>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * Note: Only one of the styles MULTI and SINGLE may be specified,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * and only one of the styles LEFT, CENTER, and RIGHT may be specified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * </p><p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * IMPORTANT: This class is <em>not</em> intended to be subclassed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * </p>
259
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
56 *
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
57 * @see <a href="http://www.eclipse.org/swt/snippets/#text">Text snippets</a>
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
58 * @see <a href="http://www.eclipse.org/swt/examples.php">DWT Example: ControlExample</a>
c0d810de7093 Update SWT 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 255
diff changeset
59 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 public class Text : Scrollable {
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 139
diff changeset
62
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 139
diff changeset
63 alias Scrollable.computeSize computeSize;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 139
diff changeset
64 alias Scrollable.dragDetect dragDetect;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 139
diff changeset
65 alias Scrollable.setBackgroundColor setBackgroundColor;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 139
diff changeset
66 alias Scrollable.setCursor setCursor;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 139
diff changeset
67 alias Scrollable.setOrientation setOrientation;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 139
diff changeset
68 alias Scrollable.translateTraversal translateTraversal;
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 139
diff changeset
69
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 GtkTextBuffer* bufferHandle;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 int tabs = 8, lastEventTime = 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 GdkEventKey* gdkEventKey;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 int fixStart = -1, fixEnd = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 bool doubleClick;
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
75 String message = "";
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 static const int INNER_BORDER = 2;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 //static const int ITER_SIZEOF = GtkTextIter.sizeof;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * The maximum number of characters that can be entered
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * into a text widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 * Note that this value is platform dependent, based upon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 * the native widget implementation.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 public const static int LIMIT = 0x7FFFFFFF;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * The delimiter used by multi-line text widgets. When text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 * is queried and from the widget, it will be delimited using
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 * this delimiter.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
94 public const static String DELIMITER = "\n";
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * These values can be different on different platforms.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * Therefore they are not initialized in the declaration
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * to stop the compiler from inlining.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 // <keinfarbton> avoid static ctor
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 //static {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 // LIMIT = 0x7FFFFFFF;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 // DELIMITER = "\n";
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 //}
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 * Constructs a new instance of this class given its parent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 * and a style value describing its behavior and appearance.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 * The style value is either one of the style constants defined in
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
111 * class <code>DWT</code> which is applicable to instances of this
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 * class, or must be built by <em>bitwise OR</em>'ing together
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 * (that is, using the <code>int</code> "|" operator) two or more
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
114 * of those <code>DWT</code> style constants. The class description
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 * lists the style constants that are applicable to the class.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 * Style bits are also inherited from superclasses.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * @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
120 * @param style the style of control to construct
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
125 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
130 * @see DWT#SINGLE
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
131 * @see DWT#MULTI
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
132 * @see DWT#READ_ONLY
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
133 * @see DWT#WRAP
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 * @see Widget#checkSubclass
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 * @see Widget#getStyle
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 public this (Composite parent, int style) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 super (parent, checkStyle (style));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 static int checkStyle (int style) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
142 if ((style & DWT.SEARCH) !is 0) {
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
143 style |= DWT.SINGLE | DWT.BORDER;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
144 style &= ~DWT.PASSWORD;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
146 style &= ~DWT.SEARCH;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
147 if ((style & DWT.SINGLE) !is 0 && (style & DWT.MULTI) !is 0) {
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
148 style &= ~DWT.MULTI;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
150 style = checkBits (style, DWT.LEFT, DWT.CENTER, DWT.RIGHT, 0, 0, 0);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
151 if ((style & DWT.SINGLE) !is 0) style &= ~(DWT.H_SCROLL | DWT.V_SCROLL | DWT.WRAP);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
152 if ((style & DWT.WRAP) !is 0) {
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
153 style |= DWT.MULTI;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
154 style &= ~DWT.H_SCROLL;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
156 if ((style & DWT.MULTI) !is 0) style &= ~DWT.PASSWORD;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
157 if ((style & (DWT.SINGLE | DWT.MULTI)) !is 0) return style;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
158 if ((style & (DWT.H_SCROLL | DWT.V_SCROLL)) !is 0) return style | DWT.MULTI;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
159 return style | DWT.SINGLE;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 override void createHandle (int index) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 state |= HANDLE | MENU;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 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: 66
diff changeset
165 if (fixedHandle is null) error (DWT.ERROR_NO_HANDLES);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 OS.gtk_fixed_set_has_window (cast(GtkFixed*)fixedHandle, true);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
167 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 handle = OS.gtk_entry_new ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
169 if (handle is null) error (DWT.ERROR_NO_HANDLES);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 OS.gtk_container_add (cast(GtkContainer*)fixedHandle, handle);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
171 OS.gtk_editable_set_editable (cast(GtkEditable*)handle, (style & DWT.READ_ONLY) is 0);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
172 OS.gtk_entry_set_has_frame (cast(GtkEntry*)handle, (style & DWT.BORDER) !is 0);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
173 OS.gtk_entry_set_visibility (cast(GtkEntry*)handle, (style & DWT.PASSWORD) is 0);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 float alignment = 0.0f;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
175 if ((style & DWT.CENTER) !is 0) alignment = 0.5f;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
176 if ((style & DWT.RIGHT) !is 0) alignment = 1.0f;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 if (alignment > 0.0f) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 OS.gtk_entry_set_alignment (cast(GtkEntry*)handle, alignment);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 scrolledHandle = cast(GtkWidget*) OS.gtk_scrolled_window_new (null, null);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
182 if (scrolledHandle is null) error (DWT.ERROR_NO_HANDLES);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 handle = OS.gtk_text_view_new ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
184 if (handle is null) error (DWT.ERROR_NO_HANDLES);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 bufferHandle = OS.gtk_text_view_get_buffer (cast(GtkTextView*)handle);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
186 if (bufferHandle is null) error (DWT.ERROR_NO_HANDLES);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 OS.gtk_container_add (cast(GtkContainer*)fixedHandle, scrolledHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 OS.gtk_container_add (cast(GtkContainer*)scrolledHandle, handle);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
189 OS.gtk_text_view_set_editable (cast(GtkTextView*)handle, (style & DWT.READ_ONLY) is 0);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
190 if ((style & DWT.WRAP) !is 0) OS.gtk_text_view_set_wrap_mode (cast(GtkTextView*)handle, OS.GTK_WRAP_WORD_CHAR);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
191 int hsp = (style & DWT.H_SCROLL) !is 0 ? OS.GTK_POLICY_ALWAYS : OS.GTK_POLICY_NEVER;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
192 int vsp = (style & DWT.V_SCROLL) !is 0 ? OS.GTK_POLICY_ALWAYS : OS.GTK_POLICY_NEVER;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 OS.gtk_scrolled_window_set_policy (cast(GtkScrolledWindow*)scrolledHandle, hsp, vsp);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
194 if ((style & DWT.BORDER) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 OS.gtk_scrolled_window_set_shadow_type (cast(GtkScrolledWindow*)scrolledHandle, OS.GTK_SHADOW_ETCHED_IN);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 int just = OS.GTK_JUSTIFY_LEFT;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
198 if ((style & DWT.CENTER) !is 0) just = OS.GTK_JUSTIFY_CENTER;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
199 if ((style & DWT.RIGHT) !is 0) just = OS.GTK_JUSTIFY_RIGHT;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 OS.gtk_text_view_set_justification (cast(GtkTextView*)handle, just);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 override void createWidget (int index) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 super.createWidget (index);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 doubleClick = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 * Adds the listener to the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 * be notified when the receiver's text is modified, by sending
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * it one of the messages defined in the <code>ModifyListener</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 * interface.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * @param listener the listener which should be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
220 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 * @see ModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 * @see #removeModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 public void addModifyListener (ModifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
230 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 TypedListener typedListener = new TypedListener (listener);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
232 addListener (DWT.Modify, typedListener);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 * Adds the listener to the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 * be notified when the control is selected by the user, by sending
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 * it one of the messages defined in the <code>SelectionListener</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 * interface.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 * <code>widgetSelected</code> is not called for texts.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed in a single-line text,
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
243 * or when ENTER is pressed in a search text. If the receiver has the <code>DWT.SEARCH | DWT.CANCEL</code> style
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
244 * and the user cancels the search, the event object detail field contains the value <code>DWT.CANCEL</code>.
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * @param listener the listener which should be notified when the control is selected by the user
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
252 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 * @see SelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 * @see #removeSelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 * @see SelectionEvent
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 public void addSelectionListener(SelectionListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
263 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 TypedListener typedListener = new TypedListener(listener);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
265 addListener(DWT.Selection,typedListener);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
266 addListener(DWT.DefaultSelection,typedListener);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 * Adds the listener to the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 * be notified when the receiver's text is verified, by sending
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 * it one of the messages defined in the <code>VerifyListener</code>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 * interface.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 * @param listener the listener which should be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
280 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 * @see VerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 * @see #removeVerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 public void addVerifyListener (VerifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
290 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 TypedListener typedListener = new TypedListener (listener);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
292 addListener (DWT.Verify, typedListener);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 * Appends a string.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 * The new text is appended to the text at
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 * the end of the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 * @param string the string to be appended
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
304 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
309 public void append (String string) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 checkWidget ();
255
5a30aa9820f3 removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
311 // DWT extension: allow null for zero length string
5a30aa9820f3 removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
312 //if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
313 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 int dummy = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 OS.gtk_editable_insert_text (cast(GtkEditable*)handle, string.ptr, string.length, &dummy );
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 OS.gtk_editable_set_position (cast(GtkEditable*)handle, -1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 GtkTextIter position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 OS.gtk_text_buffer_get_end_iter (bufferHandle, &position);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 OS.gtk_text_buffer_insert (bufferHandle, &position, string.ptr, string.length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 OS.gtk_text_buffer_place_cursor (bufferHandle, &position);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 auto mark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 OS.gtk_text_view_scroll_mark_onscreen (cast(GtkTextView*)handle, mark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 * Clears the selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
330 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 public void clearSelection () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
337 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 int position = OS.gtk_editable_get_position (cast(GtkEditable*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 OS.gtk_editable_select_region (cast(GtkEditable*)handle, position, position);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 GtkTextIter position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 auto insertMark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 auto selectionMark = OS.gtk_text_buffer_get_selection_bound (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 OS.gtk_text_buffer_get_iter_at_mark (bufferHandle, &position, insertMark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 OS.gtk_text_buffer_move_mark (bufferHandle, selectionMark, &position);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 OS.gtk_text_buffer_move_mark (bufferHandle, insertMark, &position);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 override public Point computeSize (int wHint, int hHint, bool changed) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
352 if (wHint !is DWT.DEFAULT && wHint < 0) wHint = 0;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
353 if (hHint !is DWT.DEFAULT && hHint < 0) hHint = 0;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 int w , h;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
355 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 OS.gtk_widget_realize (handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 auto layout = OS.gtk_entry_get_layout (cast(GtkEntry*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 OS.pango_layout_get_size (layout, &w, &h);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 GtkTextIter start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 GtkTextIter end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 OS.gtk_text_buffer_get_bounds (bufferHandle, &start, &end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 auto text = OS.gtk_text_buffer_get_text (bufferHandle, &start, &end, true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 auto layout = OS.gtk_widget_create_pango_layout (handle, text);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 OS.g_free (text);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 OS.pango_layout_set_width (layout, wHint * OS.PANGO_SCALE);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 OS.pango_layout_get_size (layout, &w, &h);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 OS.g_object_unref (layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 int width = OS.PANGO_PIXELS (w);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 int height = OS.PANGO_PIXELS (h);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 //This code is intentionally commented
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
373 // if ((style & DWT.SEARCH) !is 0 && message.length () !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 // GC gc = new GC (this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 // Point size = gc.stringExtent (message);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 // width = Math.max (width, size.x);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 // gc.dispose ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 // }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 if (width is 0) width = DEFAULT_WIDTH;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 if (height is 0) height = DEFAULT_HEIGHT;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
381 width = wHint is DWT.DEFAULT ? width : wHint;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
382 height = hHint is DWT.DEFAULT ? height : hHint;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 Rectangle trim = computeTrim (0, 0, width, height);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 return new Point (trim.width, trim.height);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 override public Rectangle computeTrim (int x, int y, int width, int height) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 Rectangle trim = super.computeTrim (x, y, width, height);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 int xborder = 0, yborder = 0;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
391 if ((style & DWT.SINGLE) !is 0) {
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
392 if ((style & DWT.BORDER) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 auto style = OS.gtk_widget_get_style (handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 xborder += OS.gtk_style_get_xthickness (style);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 yborder += OS.gtk_style_get_ythickness (style);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 xborder += INNER_BORDER;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 yborder += INNER_BORDER;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 int borderWidth = OS.gtk_container_get_border_width (cast(GtkContainer*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 xborder += borderWidth;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 yborder += borderWidth;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 int property;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 OS.gtk_widget_style_get1 (handle, OS.interior_focus.ptr, &property);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 if (property is 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 OS.gtk_widget_style_get1 (handle, OS.focus_line_width.ptr, &property);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 xborder += property;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 yborder += property;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 trim.x -= xborder;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 trim.y -= yborder;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 trim.width += 2 * xborder;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 trim.height += 2 * yborder;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 return new Rectangle (trim.x, trim.y, trim.width, trim.height);
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 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 * Copies the selected text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 * The current selection is copied to the clipboard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
424 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 public void copy () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
431 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 OS.gtk_editable_copy_clipboard (cast(GtkEditable*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 auto clipboard = OS.gtk_clipboard_get (cast(void*)OS.GDK_NONE);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 OS.gtk_text_buffer_copy_clipboard (bufferHandle, clipboard);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 * Cuts the selected text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 * The current selection is first copied to the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 * clipboard and then deleted from the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
446 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 public void cut () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
453 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 OS.gtk_editable_cut_clipboard (cast(GtkEditable*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 auto clipboard = OS.gtk_clipboard_get (cast(void*)OS.GDK_NONE);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 OS.gtk_text_buffer_cut_clipboard (bufferHandle, clipboard, OS.gtk_text_view_get_editable (cast(GtkTextView*)handle));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 override void deregister () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 super.deregister ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 if (bufferHandle !is null) display.removeWidget (cast(GtkWidget*)bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 if (imContext !is null) display.removeWidget (cast(GtkWidget*)imContext);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 override bool dragDetect (int x, int y, bool filter, bool* consume) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 if (filter) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 int start = 0, end = 0;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
471 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 int s, e;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 OS.gtk_editable_get_selection_bounds (cast(GtkEditable*)handle, &s, &e);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 start = s;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 end = e;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 GtkTextIter s;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 GtkTextIter e;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 OS.gtk_text_buffer_get_selection_bounds (bufferHandle, &s, &e);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 start = OS.gtk_text_iter_get_offset (&s);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 end = OS.gtk_text_iter_get_offset (&e);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 if (start !is end) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 if (end < start) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 int temp = end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 end = start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 start = temp;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 int position = -1;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
490 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 int index;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 int trailing;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 auto layout = OS.gtk_entry_get_layout (cast(GtkEntry*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 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
495 auto ptr = OS.pango_layout_get_text (layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 position = cast(int)/*64*/OS.g_utf8_pointer_to_offset (ptr, ptr + index) + trailing;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 GtkTextIter p;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 OS.gtk_text_view_get_iter_at_location (cast(GtkTextView*)handle, &p, x, y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 position = OS.gtk_text_iter_get_offset (&p);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 if (start <= position && position < end) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 if (super.dragDetect (x, y, filter, consume)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 if (consume !is null) consume [0] = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 return true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 return super.dragDetect (x, y, filter, consume);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 override GdkDrawable* eventWindow () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 return paintWindow ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
518 override bool filterKey (int keyval, GdkEventKey* event) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 int time = OS.gdk_event_get_time (cast(GdkEvent*)event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 if (time !is lastEventTime) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 lastEventTime = time;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 if (imContext !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 return cast(bool)OS.gtk_im_context_filter_keypress (imContext, event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 gdkEventKey = event;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 return false;
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 void fixIM () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 * The IM filter has to be called one time for each key press event.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 * 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: 66
diff changeset
535 * is filtered by DWT and the second event is filtered by GTK. In some
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 * cases the GTK handler does not run (the widget is destroyed, the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 * application code consumes the event, etc), for these cases the IM
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
538 * filter has to be called by DWT.
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 if (gdkEventKey !is null && gdkEventKey !is cast(GdkEventKey*)-1) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 if (imContext !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 OS.gtk_im_context_filter_keypress (imContext, gdkEventKey);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 gdkEventKey = cast(GdkEventKey*)-1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 gdkEventKey = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
551 override GdkColor* getBackgroundColor () {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 return getBaseColor ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 139
diff changeset
555 public override int getBorderWidth () {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
557 if ((style & DWT.MULTI) !is 0) return super.getBorderWidth ();
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 auto style = OS.gtk_widget_get_style (handle);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
559 if ((this.style & DWT.BORDER) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 return OS.gtk_style_get_xthickness (style);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 * Returns the line number of the caret.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 * The line number of the caret is returned.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 * @return the line number
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
573 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 public int getCaretLineNumber () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
580 if ((style & DWT.SINGLE) !is 0) return 1;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 GtkTextIter position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 auto mark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 OS.gtk_text_buffer_get_iter_at_mark (bufferHandle, &position, mark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 return OS.gtk_text_iter_get_line (&position);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 * Returns a point describing the receiver's location relative
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 * to its parent (or its display if its parent is null).
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 * The location of the caret is returned.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 * @return a point, the location of the caret
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
596 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601 public Point getCaretLocation () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
602 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
603 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 int index = OS.gtk_editable_get_position (cast(GtkEditable*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 if (OS.GTK_VERSION >= OS.buildVERSION (2, 6, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 index = OS.gtk_entry_text_index_to_layout_index (cast(GtkEntry*)handle, index);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 int offset_x, offset_y;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 OS.gtk_entry_get_layout_offsets (cast(GtkEntry*)handle, &offset_x, &offset_y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 auto layout = OS.gtk_entry_get_layout (cast(GtkEntry*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 PangoRectangle pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 OS.pango_layout_index_to_pos (layout, index, &pos);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 int x = offset_x + OS.PANGO_PIXELS (pos.x) - getBorderWidth ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 int y = offset_y + OS.PANGO_PIXELS (pos.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 return new Point (x, y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 GtkTextIter position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 auto mark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 OS.gtk_text_buffer_get_iter_at_mark (bufferHandle, &position, mark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 GdkRectangle rect;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 OS.gtk_text_view_get_iter_location (cast(GtkTextView*)handle, &position, &rect);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 int x;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 int y;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 OS.gtk_text_view_buffer_to_window_coords (cast(GtkTextView*)handle, OS.GTK_TEXT_WINDOW_TEXT, rect.x, rect.y, &x, &y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 return new Point (x, y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 * Returns the character position of the caret.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 * Indexing is zero based.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 * @return the position of the caret
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
636 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 public int getCaretPosition () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
643 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 return OS.gtk_editable_get_position (cast(GtkEditable*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 GtkTextIter position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 auto mark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 OS.gtk_text_buffer_get_iter_at_mark (bufferHandle, &position, mark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 return OS.gtk_text_iter_get_offset (&position);
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 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 * Returns the number of characters.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 * @return number of characters in the widget
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
657 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 public int getCharCount () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
664 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 auto ptr = OS.gtk_entry_get_text (cast(GtkEntry*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 return cast(int)/*64*/OS.g_utf8_strlen (ptr, -1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 return OS.gtk_text_buffer_get_char_count (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 * Returns the double click enabled flag.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 * The double click flag enables or disables the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 * default action of the text widget when the user
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 * double clicks.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 * @return whether or not double click is enabled
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
681 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 public bool getDoubleClickEnabled () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 return doubleClick;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 * Returns the echo character.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694 * The echo character is the character that is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 * displayed when the user enters text or the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 * text is changed by the programmer.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 * @return the echo character
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
700 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
701 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 * @see #setEchoChar
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
708 public char getEchoChar () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
710 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 if (!OS.gtk_entry_get_visibility (cast(GtkEntry*)handle)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 return OS.gtk_entry_get_invisible_char (cast(GtkEntry*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 return '\0';
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 * Returns the editable state.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721 * @return whether or not the receiver is editable
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
722 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
723 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
724 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
727 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728 public bool getEditable () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
730 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 return cast(bool)OS.gtk_editable_get_editable (cast(GtkEditable*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 return cast(bool)OS.gtk_text_view_get_editable (cast(GtkTextView*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
734 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
736 override GdkColor* getForegroundColor () {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 return getTextColor ();
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 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741 * Returns the number of lines.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743 * @return the number of lines in the widget
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
744 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
745 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
747 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 public int getLineCount () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
752 if ((style & DWT.SINGLE) !is 0) return 1;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753 return OS.gtk_text_buffer_get_line_count (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 }
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 * Returns the line delimiter.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 * @return a string that is the line delimiter
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
761 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
762 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
763 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 * @see #DELIMITER
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
768 public String getLineDelimiter () {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 return "\n";
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
771 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 * Returns the height of a line.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 * @return the height of a row of text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
778 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 public int getLineHeight () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 return fontHeight (getFontDescription (), handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 * Returns the widget message. When the widget is created
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
790 * with the style <code>DWT.SEARCH</code>, the message text
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791 * is displayed as a hint for the user, indicating the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 * purpose of the field.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 * Note: This operation is a <em>HINT</em> and is not
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 * supported on platforms that do not have this concept.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 * @return the widget message
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
800 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 * @since 3.3
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
807 public String getMessage () {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 return message;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813 * Returns the orientation of the receiver, which will be one of the
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
814 * constants <code>DWT.LEFT_TO_RIGHT</code> or <code>DWT.RIGHT_TO_LEFT</code>.
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816 * @return the orientation style
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
818 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 * @since 2.1.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 public int getOrientation () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 checkWidget();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
827 return style & (DWT.LEFT_TO_RIGHT | DWT.RIGHT_TO_LEFT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830 /*public*/ int getPosition (Point point) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
832 if (point is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 int position = -1;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
834 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 int index;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 int trailing;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837 auto layout = OS.gtk_entry_get_layout (cast(GtkEntry*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838 OS.pango_layout_xy_to_index (layout, point.x * OS.PANGO_SCALE, point.y * OS.PANGO_SCALE, &index, &trailing);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 auto ptr = OS.pango_layout_get_text (layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 position = cast(int)/*64*/OS.g_utf8_pointer_to_offset (ptr, ptr + index) + trailing;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 GtkTextIter p;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843 OS.gtk_text_view_get_iter_at_location (cast(GtkTextView*)handle, &p, point.x, point.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
844 position = OS.gtk_text_iter_get_offset (&p);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
846 return position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
847 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
848
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
849 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 * Returns a <code>Point</code> whose x coordinate is the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 * character position representing the start of the selected
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
852 * text, and whose y coordinate is the character position
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
853 * representing the end of the selection. An "empty" selection
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
854 * is indicated by the x and y coordinates having the same value.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
856 * Indexing is zero based. The range of a selection is from
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
857 * 0..N where N is the number of characters in the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
859 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 * @return a point representing the selection start and end
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
862 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
863 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 public Point getSelection () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
869 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
870 int start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871 int end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 OS.gtk_editable_get_selection_bounds (cast(GtkEditable*)handle, &start, &end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873 return new Point (start, end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 GtkTextIter start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876 GtkTextIter end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
877 OS.gtk_text_buffer_get_selection_bounds (bufferHandle, &start, &end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
878 return new Point (OS.gtk_text_iter_get_offset (&start), OS.gtk_text_iter_get_offset (&end));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
880
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882 * Returns the number of selected characters.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
883 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 * @return the number of selected characters.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
885 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
886 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
887 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
888 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
889 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
890 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
891 public int getSelectionCount () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
892 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
893 Point selection = getSelection ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
894 return Math.abs (selection.y - selection.x);
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 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
898 * Gets the selected text, or an empty string if there is no current selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
899 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
900 * @return the selected text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
901 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
902 * @exception DWTException <ul>
60
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 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
907 public String getSelectionText () {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
908 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 Point selection = getSelection ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
910 return getText ()[ selection.x .. selection.y ];
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
911 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
912
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
913 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
914 * Returns the number of tabs.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
915 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
916 * Tab stop spacing is specified in terms of the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
917 * space (' ') character. The width of a single
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
918 * tab stop is the pixel width of the spaces.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
919 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
920 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
921 * @return the number of tab characters
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
922 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
923 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
928 public int getTabs () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
929 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
930 return tabs;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
931 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
932
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
933 int getTabWidth (int tabs) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934 auto layout = OS.gtk_widget_create_pango_layout (handle, " ".ptr );
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
935 int width;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 int height;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
937 OS.pango_layout_get_size (layout, &width, &height);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 OS.g_object_unref (layout);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939 return width * tabs;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
940 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
941
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
943 * Returns the widget text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
945 * The text for a text widget is the characters in the widget, or
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
946 * an empty string if this has never been set.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
947 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
948 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949 * @return the widget text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
950 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
951 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
952 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
953 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
954 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
956 public String getText () {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
957 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
958 char* address;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
959 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
960 address = OS.gtk_entry_get_text (cast(GtkEntry*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
961 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
962 GtkTextIter start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
963 GtkTextIter end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
964 OS.gtk_text_buffer_get_bounds (bufferHandle, &start, &end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
965 address = OS.gtk_text_buffer_get_text (bufferHandle, &start, &end, true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
966 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
967 if (address is null) return "";
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
968 String res = fromStringz( address ).dup;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
969 if ((style & DWT.MULTI) !is 0) OS.g_free (address);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
970 return res;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
971 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
973 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
974 * Returns a range of text. Returns an empty string if the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
975 * start of the range is greater than the end.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
976 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
977 * Indexing is zero based. The range of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
978 * a selection is from 0..N-1 where N is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
979 * the number of characters in the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
980 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
981 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
982 * @param start the start of the range
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
983 * @param end the end of the range
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
984 * @return the range of text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
985 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
986 * @exception DWTException <ul>
60
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 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
991 public String getText (int start, int end) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
992 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
993 if (!(start <= end && 0 <= end)) return "";
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
994 start = Math.max (0, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
995 char* address;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
996 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
997 address = OS.gtk_editable_get_chars (cast(GtkEditable*)handle, start, end + 1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
998 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
999 int length = OS.gtk_text_buffer_get_char_count (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1000 end = Math.min (end, length - 1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1001 GtkTextIter startIter;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1002 GtkTextIter endIter;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1003 OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, &startIter, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1004 OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, &endIter, end + 1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1005 address = OS.gtk_text_buffer_get_text (bufferHandle, &startIter, &endIter, true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1006 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1007 if (address is null) error (DWT.ERROR_CANNOT_GET_TEXT);
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1008 String res = fromStringz( address ).dup;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1009 OS.g_free (address);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1010 return res;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1011 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1012
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1013 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1014 * Returns the maximum number of characters that the receiver is capable of holding.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1015 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1016 * If this has not been changed by <code>setTextLimit()</code>,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1017 * it will be the constant <code>Text.LIMIT</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1018 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1019 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1020 * @return the text limit
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1021 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1022 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1023 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1024 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1025 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1026 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1027 * @see #LIMIT
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1028 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1029 public int getTextLimit () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1030 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1031 if ((style & DWT.MULTI) !is 0) return LIMIT;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1032 int limit = OS.gtk_entry_get_max_length (cast(GtkEntry*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1033 return limit is 0 ? 0xFFFF : limit;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1034 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1035
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1036 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1037 * Returns the zero-relative index of the line which is currently
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1038 * at the top of the receiver.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1039 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1040 * This index can change when lines are scrolled or new lines are added or removed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1041 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1042 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1043 * @return the index of the top line
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1044 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1045 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1046 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1047 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1048 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1049 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1050 public int getTopIndex () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1051 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1052 if ((style & DWT.SINGLE) !is 0) return 0;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1053 GtkTextIter position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1054 GdkRectangle rect;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1055 OS.gtk_text_view_get_visible_rect (cast(GtkTextView*)handle, &rect);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1056 OS.gtk_text_view_get_line_at_y (cast(GtkTextView*)handle, &position, rect.y, null);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1057 return OS.gtk_text_iter_get_line (&position);
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 * Returns the top pixel.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1062 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1063 * The top pixel is the pixel position of the line
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1064 * that is currently at the top of the widget. On
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1065 * some platforms, a text widget can be scrolled by
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1066 * pixels instead of lines so that a partial line
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1067 * is displayed at the top of the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1068 * </p><p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1069 * The top pixel changes when the widget is scrolled.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1070 * The top pixel does not include the widget trimming.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1071 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1072 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1073 * @return the pixel position of the top line
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1074 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1075 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1076 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1077 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1078 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1079 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1080 public int getTopPixel () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1081 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1082 if ((style & DWT.SINGLE) !is 0) return 0;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1083 GtkTextIter position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1084 GdkRectangle rect;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1085 OS.gtk_text_view_get_visible_rect (cast(GtkTextView*)handle, &rect);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1086 int lineTop;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1087 OS.gtk_text_view_get_line_at_y (cast(GtkTextView*)handle, &position, rect.y, &lineTop);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1088 return lineTop;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1089 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1090
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1091 override int /*long*/ gtk_activate (GtkWidget* widget) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1092 postEvent (DWT.DefaultSelection);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1093 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1094 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1095
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1096 override int /*long*/ gtk_button_press_event (GtkWidget* widget, GdkEventButton* gdkEvent) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1097 auto result = super.gtk_button_press_event (widget, gdkEvent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1098 if (result !is 0) return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1099 if (!doubleClick) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1100 switch (gdkEvent.type) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1101 case OS.GDK_2BUTTON_PRESS:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1102 case OS.GDK_3BUTTON_PRESS:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1103 return 1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1104 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1105 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1106 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1107 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1108 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1109
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1110
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1111 override int /*long*/ gtk_changed (GtkWidget* widget) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1112 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1113 * Feature in GTK. When the user types, GTK positions
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1114 * the caret after sending the changed signal. This
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1115 * means that application code that attempts to position
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1116 * the caret during a changed signal will fail. The fix
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1117 * is to post the modify event when the user is typing.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1118 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1119 bool keyPress = false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1120 auto eventPtr = OS.gtk_get_current_event ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1121 if (eventPtr !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1122 GdkEventKey* gdkEvent = cast(GdkEventKey*)eventPtr;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1123 switch (gdkEvent.type) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1124 case OS.GDK_KEY_PRESS:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1125 keyPress = true;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1126 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1127 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1128 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1129 OS.gdk_event_free (eventPtr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1130 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1131 if (keyPress) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1132 postEvent (DWT.Modify);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1133 } else {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1134 sendEvent (DWT.Modify);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1135 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1136 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1137 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1138
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1139 override int /*long*/ gtk_commit (GtkIMContext* imcontext, char* text) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1140 if (text is null) return 0;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1141 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1142 if (!OS.gtk_editable_get_editable (cast(GtkEditable*)handle)) return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1143 }
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
1144 char [] chars = fromStringz( text ).dup;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1145 if (chars.length is 0) return 0;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1146 char [] newChars = sendIMKeyEvent (DWT.KeyDown, null, chars);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1147 if (newChars is null) return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1148 /*
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1149 * Feature in GTK. For a GtkEntry, during the insert-text signal,
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1150 * GTK allows the programmer to change only the caret location,
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1151 * not the selection. If the programmer changes the selection,
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1152 * the new selection is lost. The fix is to detect a selection
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1153 * change and set it after the insert-text signal has completed.
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1154 */
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1155 fixStart = fixEnd = -1;
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1156 OS.g_signal_handlers_block_matched (imContext, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCOMMIT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1157 int id = OS.g_signal_lookup (OS.commit.ptr, OS.gtk_im_context_get_type ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1158 int mask = OS.G_SIGNAL_MATCH_DATA | OS.G_SIGNAL_MATCH_ID;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1159 OS.g_signal_handlers_unblock_matched (imContext, mask, id, 0, null, null, cast(void*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1160 if (newChars is chars) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1161 OS.g_signal_emit_by_name1 (imContext, OS.commit.ptr, cast(int)text);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1162 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1163 OS.g_signal_emit_by_name1 (imContext, OS.commit.ptr, cast(int)toStringz(newChars) );
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1164 }
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1165 OS.g_signal_handlers_unblock_matched (imContext, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCOMMIT );
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1166 OS.g_signal_handlers_block_matched (imContext, mask, id, 0, null, null, cast(void*)handle);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1167 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1168 if (fixStart !is -1 && fixEnd !is -1) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1169 OS.gtk_editable_set_position (cast(GtkEditable*)handle, fixStart);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1170 OS.gtk_editable_select_region (cast(GtkEditable*)handle, fixStart, fixEnd);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1171 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1172 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1173 fixStart = fixEnd = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1174 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1175 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1176
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1177 override int /*long*/ gtk_delete_range (GtkWidget* widget, int /*long*/ iter1, int /*long*/ iter2) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1178 if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1179 GtkTextIter startIter = *cast(GtkTextIter*)iter1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1180 GtkTextIter endIter = *cast(GtkTextIter*)iter2;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1181 int start = OS.gtk_text_iter_get_offset (&startIter);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1182 int end = OS.gtk_text_iter_get_offset (&endIter);
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1183 String newText = verifyText ("", start, end);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1184 if (newText is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1185 /* Remember the selection when the text was deleted */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1186 OS.gtk_text_buffer_get_selection_bounds (bufferHandle, &startIter, &endIter);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1187 start = OS.gtk_text_iter_get_offset (&startIter);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1188 end = OS.gtk_text_iter_get_offset (&endIter);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1189 if (start !is end) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1190 fixStart = start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1191 fixEnd = end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1192 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1193 OS.g_signal_stop_emission_by_name (bufferHandle, OS.delete_range.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1194 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1195 if (newText.length > 0) {
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1196 OS.g_signal_handlers_block_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1197 OS.g_signal_handlers_block_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_RANGE);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1198 OS.gtk_text_buffer_delete (bufferHandle, &startIter, &endIter);
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1199 OS.g_signal_handlers_unblock_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_RANGE);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1200 OS.g_signal_handlers_unblock_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1201 OS.g_signal_handlers_block_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udTEXT_BUFFER_INSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1202 OS.gtk_text_buffer_insert (bufferHandle, &startIter, newText.ptr, newText.length);
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1203 OS.g_signal_handlers_unblock_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udTEXT_BUFFER_INSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1204 OS.g_signal_stop_emission_by_name (bufferHandle, OS.delete_range.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1205 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1206 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1207 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1208 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1209
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1210 override int /*long*/ gtk_delete_text (GtkWidget* widget, int /*long*/ start_pos, int /*long*/ end_pos) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1211 if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0;
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1212 String newText = verifyText ("", cast(int)/*64*/start_pos, cast(int)/*64*/end_pos);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1213 if (newText is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1214 /* Remember the selection when the text was deleted */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1215 int newStart, newEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1216 OS.gtk_editable_get_selection_bounds (cast(GtkEditable*)handle, &newStart, &newEnd);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1217 if (newStart !is newEnd) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1218 fixStart = newStart;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1219 fixEnd = newEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1220 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1221 OS.g_signal_stop_emission_by_name (handle, OS.delete_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1222 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1223 if (newText.length > 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1224 int pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1225 pos = cast(int)/*64*/end_pos;
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1226 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1227 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1228 OS.gtk_editable_insert_text (cast(GtkEditable*)handle, newText.ptr, newText.length, &pos);
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1229 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1230 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1231 OS.gtk_editable_set_position (cast(GtkEditable*)handle, pos);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1232 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1233 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1234 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1235 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1236
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1237 override int /*long*/ gtk_event_after (GtkWidget* widget, GdkEvent* event) {
113
1401263f71b0 renamed setCursor(Gtk..) to gtk_setCursor, so the public interface do not need a cast for passing null
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1238 if (cursor !is null) gtk_setCursor (cursor.handle);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1239 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1240 * Feature in GTK. The gtk-entry-select-on-focus property is a global
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1241 * setting. Return it to its default value after the GtkEntry has done
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1242 * its focus in processing so that other widgets (such as the combo)
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1243 * use the correct value.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1244 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1245 if ((style & DWT.SINGLE) !is 0 && display.entrySelectOnFocus) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1246 switch (event.type) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1247 case OS.GDK_FOCUS_CHANGE:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1248 GdkEventFocus* gdkEventFocus = cast(GdkEventFocus*)event;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1249 if (gdkEventFocus.in_ is 0) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1250 auto settings = OS.gtk_settings_get_default ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1251 OS.g_object_set1 (settings, OS.gtk_entry_select_on_focus.ptr, true );
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1252 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1253 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1254 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1255 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1256 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1257 return super.gtk_event_after (widget, event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1258 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1259
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1260 override int /*long*/ gtk_focus_out_event (GtkWidget* widget, GdkEventFocus* event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1261 fixIM ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1262 return super.gtk_focus_out_event (widget, event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1263 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1264
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1265 override int /*long*/ gtk_grab_focus (GtkWidget* widget) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1266 auto result = super.gtk_grab_focus (widget);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1267 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1268 * Feature in GTK. GtkEntry widgets select their text on focus in,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1269 * clearing the previous selection. This behavior is controlled by
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1270 * the gtk-entry-select-on-focus property. The fix is to disable
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1271 * this property when a GtkEntry is given focus and restore it after
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1272 * the entry has done focus in processing.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1273 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1274 if ((style & DWT.SINGLE) !is 0 && display.entrySelectOnFocus) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1275 auto settings = OS.gtk_settings_get_default ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1276 OS.g_object_set1 (settings, OS.gtk_entry_select_on_focus.ptr, false );
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1277 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1278 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1279 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1280
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1281 override int /*long*/ gtk_insert_text (GtkEditable* widget, char* new_text, int new_text_length, int position) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1282 if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1283 if (new_text is null || new_text_length is 0) return 0;
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1284 String oldText = (cast(char*)new_text)[ 0 .. new_text_length ].dup;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1285 int pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1286 pos = *cast(int*)position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1287 if (pos is -1) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1288 auto ptr = OS.gtk_entry_get_text (cast(GtkEntry*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1289 pos = cast(int)/*64*/OS.g_utf8_strlen (ptr, -1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1290 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1291 /* Use the selection when the text was deleted */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1292 int start = pos, end = pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1293 if (fixStart !is -1 && fixEnd !is -1) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1294 start = pos = fixStart;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1295 end = fixEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1296 fixStart = fixEnd = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1297 }
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1298 String newText = verifyText (oldText, start, end);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1299 if (newText !is oldText) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1300 int newStart, newEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1301 OS.gtk_editable_get_selection_bounds (cast(GtkEditable*)handle, &newStart, &newEnd);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1302 if (newText !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1303 if (newStart !is newEnd) {
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1304 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_TEXT);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1305 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1306 OS.gtk_editable_delete_selection (cast(GtkEditable*)handle);
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1307 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_TEXT);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1308 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1309 }
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1310 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1311 OS.gtk_editable_insert_text (cast(GtkEditable*)handle, newText.ptr, newText.length, &pos);
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1312 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1313 newStart = newEnd = pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1314 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1315 pos = newEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1316 if (newStart !is newEnd) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1317 fixStart = newStart;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1318 fixEnd = newEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1319 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1320 *cast(int*)position = pos;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1321 OS.g_signal_stop_emission_by_name (handle, OS.insert_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1322 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1323 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1324 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1325
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1326 override int /*long*/ gtk_key_press_event (GtkWidget* widget, GdkEventKey* event) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1327 auto result = super.gtk_key_press_event (widget, event);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1328 if (result !is 0) fixIM ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1329 if (gdkEventKey is cast(GdkEventKey*)-1) result = 1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1330 gdkEventKey = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1331 return result;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1332 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1333
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1334 override int /*long*/ gtk_populate_popup (GtkWidget* widget, GtkWidget* menu) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1335 if ((style & DWT.RIGHT_TO_LEFT) !is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1336 OS.gtk_widget_set_direction (menu, OS.GTK_TEXT_DIR_RTL);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1337 display.doSetDirectionProc (menu, OS.GTK_TEXT_DIR_RTL);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1338 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1339 return 0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1340 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1341
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1342 override int /*long*/ gtk_text_buffer_insert_text (GtkTextBuffer *widget, GtkTextIter *iter, char *text, int len) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1343 if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1344 GtkTextIter position = *iter;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1345 /* Use the selection when the text was deleted */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1346 int start = OS.gtk_text_iter_get_offset (&position), end = start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1347 if (fixStart !is -1 && fixEnd !is -1) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1348 start = fixStart;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1349 end = fixEnd;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1350 fixStart = fixEnd = -1;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1351 }
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1352 String oldText = text[ 0 .. len ];
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1353 String newText = verifyText (oldText, start, end);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1354 if (newText is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1355 OS.g_signal_stop_emission_by_name (bufferHandle, OS.insert_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1356 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1357 if (newText !is oldText) {
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1358 OS.g_signal_handlers_block_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udTEXT_BUFFER_INSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1359 OS.gtk_text_buffer_insert (bufferHandle, iter, newText.ptr, newText.length);
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1360 OS.g_signal_handlers_unblock_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udTEXT_BUFFER_INSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1361 OS.g_signal_stop_emission_by_name (bufferHandle, OS.insert_text.ptr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1362 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1363 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1364 return 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1365 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1366
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1367 override void hookEvents () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1368 super.hookEvents();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1369 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1370 OS.g_signal_connect_closure (handle, OS.changed.ptr, display.closures [CHANGED], true);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1371 OS.g_signal_connect_closure (handle, OS.insert_text.ptr, display.closures [INSERT_TEXT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1372 OS.g_signal_connect_closure (handle, OS.delete_text.ptr, display.closures [DELETE_TEXT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1373 OS.g_signal_connect_closure (handle, OS.activate.ptr, display.closures [ACTIVATE], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1374 OS.g_signal_connect_closure (handle, OS.grab_focus.ptr, display.closures [GRAB_FOCUS], false);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1375 OS.g_signal_connect_closure (handle, OS.populate_popup.ptr, display.closures [POPULATE_POPUP], false);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1376 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1377 OS.g_signal_connect_closure (bufferHandle, OS.changed.ptr, display.closures [CHANGED], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1378 OS.g_signal_connect_closure (bufferHandle, OS.insert_text.ptr, display.closures [TEXT_BUFFER_INSERT_TEXT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1379 OS.g_signal_connect_closure (bufferHandle, OS.delete_range.ptr, display.closures [DELETE_RANGE], false);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1380 OS.g_signal_connect_closure (handle, OS.populate_popup.ptr, display.closures [POPULATE_POPUP], false);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1381 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1382 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1383 if (imContext !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1384 OS.g_signal_connect_closure (imContext, OS.commit.ptr, display.closures [COMMIT], false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1385 int id = OS.g_signal_lookup (OS.commit.ptr, OS.gtk_im_context_get_type ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1386 int mask = OS.G_SIGNAL_MATCH_DATA | OS.G_SIGNAL_MATCH_ID;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1387 OS.g_signal_handlers_block_matched (imContext, mask, id, 0, null, null, cast(void*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1388 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1389 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1390
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1391 GtkIMContext* imContext () {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1392 if ((style & DWT.SINGLE) !is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1393 return OS.gtk_editable_get_editable (handle) ? OS.GTK_ENTRY_IM_CONTEXT (handle) : null;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1394 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1395 return OS.GTK_TEXTVIEW_IM_CONTEXT (cast(GtkTextView*)handle);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1396 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1397
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1398 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1399 * Inserts a string.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1400 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1401 * The old selection is replaced with the new text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1402 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1403 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1404 * @param string the string
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1405 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1406 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1407 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1408 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1409 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1410 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1411 public void insert (String string) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1412 checkWidget ();
255
5a30aa9820f3 removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
1413 // DWT extension: allow null for zero length string
5a30aa9820f3 removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
1414 //if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1415 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1416 int start, end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1417 OS.gtk_editable_get_selection_bounds (cast(GtkEditable*)handle, &start, &end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1418 OS.gtk_editable_delete_selection (cast(GtkEditable*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1419 OS.gtk_editable_insert_text (cast(GtkEditable*)handle, string.ptr, string.length, &start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1420 OS.gtk_editable_set_position (cast(GtkEditable*)handle, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1421 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1422 GtkTextIter start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1423 GtkTextIter end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1424 if (OS.gtk_text_buffer_get_selection_bounds (bufferHandle, &start, &end)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1425 OS.gtk_text_buffer_delete (bufferHandle, &start, &end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1426 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1427 OS.gtk_text_buffer_insert (bufferHandle, &start, string.ptr, string.length);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1428 OS.gtk_text_buffer_place_cursor (bufferHandle, &start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1429 auto mark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1430 OS.gtk_text_view_scroll_mark_onscreen (cast(GtkTextView*)handle, mark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1431 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1432 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1433
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1434 override GdkDrawable* paintWindow () {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1435 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1436 auto window = super.paintWindow ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1437 auto children = OS.gdk_window_get_children (window);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1438 if (children !is null) window = cast(GdkDrawable*) OS.g_list_data (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1439 OS.g_list_free (children);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1440 return window;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1441 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1442 OS.gtk_widget_realize (handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1443 return OS.gtk_text_view_get_window (cast(GtkTextView*)handle, OS.GTK_TEXT_WINDOW_TEXT);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1444 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1445
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1446 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1447 * Pastes text from clipboard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1448 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1449 * The selected text is deleted from the widget
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1450 * and new text inserted from the clipboard.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1451 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1452 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1453 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1454 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1455 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1456 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1457 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1458 public void paste () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1459 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1460 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1461 OS.gtk_editable_paste_clipboard (cast(GtkEditable*)handle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1462 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1463 auto clipboard = OS.gtk_clipboard_get (cast(void*)OS.GDK_NONE);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1464 OS.gtk_text_buffer_paste_clipboard (bufferHandle, clipboard, null, OS.gtk_text_view_get_editable (cast(GtkTextView*)handle));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1465 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1466 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1467
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1468 override void register () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1469 super.register ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1470 if (bufferHandle !is null) display.addWidget (cast(GtkWidget*)bufferHandle, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1471 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1472 if (imContext !is null) display.addWidget (cast(GtkWidget*)imContext, this);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1473 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1474
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1475 override void releaseWidget () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1476 super.releaseWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1477 fixIM ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1478 if (OS.GTK_VERSION < OS.buildVERSION (2, 6, 0)) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1479 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1480 * Bug in GTK. Any text copied into the clipboard will be lost when
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1481 * the GtkTextView is destroyed. The fix is to paste the contents as
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1482 * the widget is being destroyed to reference the text buffer, keeping
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1483 * it around until ownership of the clipboard is lost.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1484 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1485 if ((style & DWT.MULTI) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1486 auto clipboard = OS.gtk_clipboard_get (cast(void*)OS.GDK_NONE);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1487 OS.gtk_text_buffer_paste_clipboard (bufferHandle, clipboard, null, OS.gtk_text_view_get_editable (cast(GtkTextView*)handle));
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1488 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1489 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1490 message = null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1491 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1492
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1493 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1494 * Removes the listener from the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1495 * be notified when the receiver's text is modified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1496 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1497 * @param listener the listener which should no longer be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1498 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1499 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1500 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1501 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1502 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1503 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1504 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1505 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1506 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1507 * @see ModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1508 * @see #addModifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1509 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1510 public void removeModifyListener (ModifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1511 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1512 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1513 if (eventTable is null) return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1514 eventTable.unhook (DWT.Modify, listener);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1515 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1516
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1517 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1518 * Removes the listener from the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1519 * be notified when the control is selected by the user.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1520 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1521 * @param listener the listener which should no longer be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1522 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1523 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1524 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1525 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1526 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1527 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1528 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1529 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1530 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1531 * @see SelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1532 * @see #addSelectionListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1533 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1534 public void removeSelectionListener(SelectionListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1535 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1536 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1537 if (eventTable is null) return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1538 eventTable.unhook(DWT.Selection, listener);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1539 eventTable.unhook(DWT.DefaultSelection,listener);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1540 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1541
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1542 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1543 * Removes the listener from the collection of listeners who will
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1544 * be notified when the control is verified.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1545 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1546 * @param listener the listener which should no longer be notified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1547 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1548 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1549 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1550 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1551 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1552 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1553 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1554 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1555 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1556 * @see VerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1557 * @see #addVerifyListener
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1558 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1559 public void removeVerifyListener (VerifyListener listener) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1560 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1561 if (listener is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1562 if (eventTable is null) return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1563 eventTable.unhook (DWT.Verify, listener);
60
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 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1567 * Selects all the text in the receiver.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1568 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1569 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1570 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1571 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1572 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1573 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1574 public void selectAll () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1575 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1576 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1577 OS.gtk_editable_select_region (cast(GtkEditable*)handle, 0, -1);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1578 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1579 GtkTextIter start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1580 GtkTextIter end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1581 OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, &start, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1582 OS.gtk_text_buffer_get_end_iter (bufferHandle, &end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1583 auto insertMark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1584 auto selectionMark = OS.gtk_text_buffer_get_selection_bound (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1585 OS.gtk_text_buffer_move_mark (bufferHandle, selectionMark, &start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1586 OS.gtk_text_buffer_move_mark (bufferHandle, insertMark, &end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1587 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1588 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1589
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1590 override void setBackgroundColor (GdkColor* color) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1591 super.setBackgroundColor (color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1592 OS.gtk_widget_modify_base (handle, 0, color);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1593 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1594
113
1401263f71b0 renamed setCursor(Gtk..) to gtk_setCursor, so the public interface do not need a cast for passing null
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1595 override void gtk_setCursor (GdkCursor* cursor) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1596 GdkCursor* defaultCursor;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1597 if (cursor is null) defaultCursor = OS.gdk_cursor_new (OS.GDK_XTERM);
113
1401263f71b0 renamed setCursor(Gtk..) to gtk_setCursor, so the public interface do not need a cast for passing null
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
1598 super.gtk_setCursor (cursor !is null ? cursor : defaultCursor);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1599 if (cursor is null) OS.gdk_cursor_destroy (defaultCursor);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1600 }
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 * Sets the double click enabled flag.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1604 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1605 * The double click flag enables or disables the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1606 * default action of the text widget when the user
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1607 * double clicks.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1608 * </p><p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1609 * Note: This operation is a hint and is not supported on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1610 * platforms that do not have this concept.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1611 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1612 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1613 * @param doubleClick the new double click flag
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1614 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1615 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1616 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1617 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1618 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1619 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1620 public void setDoubleClickEnabled (bool doubleClick) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1621 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1622 this.doubleClick = doubleClick;
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 * Sets the echo character.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1627 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1628 * The echo character is the character that is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1629 * displayed when the user enters text or the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1630 * text is changed by the programmer. Setting
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1631 * the echo character to '\0' clears the echo
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1632 * character and redraws the original text.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1633 * If for any reason the echo character is invalid,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1634 * or if the platform does not allow modification
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1635 * of the echo character, the default echo character
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1636 * for the platform is used.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1637 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1638 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1639 * @param echo the new echo character
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1640 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1641 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1642 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1643 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1644 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1645 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1646 public void setEchoChar (char echo) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1647 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1648 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1649 OS.gtk_entry_set_visibility (cast(GtkEntry*)handle, echo is '\0');
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1650 OS.gtk_entry_set_invisible_char (cast(GtkEntry*)handle, echo);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1651 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1652 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1653
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1654 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1655 * Sets the editable state.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1656 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1657 * @param editable the new editable state
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1658 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1659 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1660 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1661 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1662 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1663 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1664 public void setEditable (bool editable) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1665 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1666 style &= ~DWT.READ_ONLY;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1667 if (!editable) style |= DWT.READ_ONLY;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1668 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1669 OS.gtk_editable_set_editable (cast(GtkEditable*)handle, editable);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1670 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1671 OS.gtk_text_view_set_editable (cast(GtkTextView*)handle, editable);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1672 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1673 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1674
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1675 override void setFontDescription (PangoFontDescription* font) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1676 super.setFontDescription (font);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1677 setTabStops (tabs);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1678 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1679
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1680 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1681 * Sets the widget message. When the widget is created
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1682 * with the style <code>DWT.SEARCH</code>, the message text
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1683 * is displayed as a hint for the user, indicating the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1684 * purpose of the field.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1685 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1686 * Note: This operation is a <em>HINT</em> and is not
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1687 * supported on platforms that do not have this concept.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1688 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1689 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1690 * @param message the new message
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1691 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1692 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1693 * <li>ERROR_NULL_ARGUMENT - if the message is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1694 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1695 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1696 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1697 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1698 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1699 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1700 * @since 3.3
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1701 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1702 public void setMessage (String message) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1703 checkWidget ();
255
5a30aa9820f3 removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
1704 // DWT extension: allow null for zero length string
5a30aa9820f3 removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
1705 //if (message is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1706 this.message = message;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1707 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1708
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1709 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1710 * Sets the orientation of the receiver, which must be one
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1711 * of the constants <code>DWT.LEFT_TO_RIGHT</code> or <code>DWT.RIGHT_TO_LEFT</code>.
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1712 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1713 * Note: This operation is a hint and is not supported on
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1714 * platforms that do not have this concept.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1715 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1716 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1717 * @param orientation new orientation style
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1718 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1719 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1720 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1721 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1722 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1723 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1724 * @since 2.1.2
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1725 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1726 public void setOrientation (int orientation) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1727 checkWidget();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1728 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1729
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1730 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1731 * Sets the selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1732 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1733 * Indexing is zero based. The range of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1734 * a selection is from 0..N where N is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1735 * the number of characters in the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1736 * </p><p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1737 * Text selections are specified in terms of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1738 * caret positions. In a text widget that
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1739 * contains N characters, there are N+1 caret
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1740 * positions, ranging from 0..N. This differs
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1741 * from other functions that address character
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1742 * position such as getText () that use the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1743 * regular array indexing rules.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1744 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1745 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1746 * @param start new caret position
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1747 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1748 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1749 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1750 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1751 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1752 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1753 public void setSelection (int start) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1754 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1755 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1756 OS.gtk_editable_set_position (cast(GtkEditable*)handle, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1757 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1758 GtkTextIter position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1759 OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, &position, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1760 OS.gtk_text_buffer_place_cursor (bufferHandle, &position);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1761 auto mark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1762 OS.gtk_text_view_scroll_mark_onscreen (cast(GtkTextView*)handle, mark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1763 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1764 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1765
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1766 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1767 * Sets the selection to the range specified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1768 * by the given start and end indices.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1769 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1770 * Indexing is zero based. The range of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1771 * a selection is from 0..N where N is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1772 * the number of characters in the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1773 * </p><p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1774 * Text selections are specified in terms of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1775 * caret positions. In a text widget that
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1776 * contains N characters, there are N+1 caret
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1777 * positions, ranging from 0..N. This differs
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1778 * from other functions that address character
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1779 * position such as getText () that use the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1780 * usual array indexing rules.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1781 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1782 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1783 * @param start the start of the range
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1784 * @param end the end of the range
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1785 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1786 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1787 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1788 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1789 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1790 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1791 public void setSelection (int start, int end) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1792 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1793 if ((style & DWT.SINGLE) !is 0) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1794 OS.gtk_editable_set_position (cast(GtkEditable*)handle, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1795 OS.gtk_editable_select_region (cast(GtkEditable*)handle, start, end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1796 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1797 GtkTextIter startIter;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1798 GtkTextIter endIter;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1799 OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, &startIter, start);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1800 OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, &endIter, end);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1801 auto insertMark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1802 auto selectionMark = OS.gtk_text_buffer_get_selection_bound (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1803 OS.gtk_text_buffer_move_mark (bufferHandle, selectionMark, &startIter);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1804 OS.gtk_text_buffer_move_mark (bufferHandle, insertMark, &endIter);
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
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1808 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1809 * Sets the selection to the range specified
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1810 * by the given point, where the x coordinate
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1811 * represents the start index and the y coordinate
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1812 * represents the end index.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1813 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1814 * Indexing is zero based. The range of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1815 * a selection is from 0..N where N is
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1816 * the number of characters in the widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1817 * </p><p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1818 * Text selections are specified in terms of
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1819 * caret positions. In a text widget that
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1820 * contains N characters, there are N+1 caret
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1821 * positions, ranging from 0..N. This differs
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1822 * from other functions that address character
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1823 * position such as getText () that use the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1824 * usual array indexing rules.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1825 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1826 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1827 * @param selection the point
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1828 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1829 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1830 * <li>ERROR_NULL_ARGUMENT - if the point is null</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1831 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1832 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1833 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1834 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1835 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1836 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1837 public void setSelection (Point selection) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1838 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1839 if (selection is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1840 setSelection (selection.x, selection.y);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1841 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1842
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1843 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1844 * Sets the number of tabs.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1845 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1846 * Tab stop spacing is specified in terms of the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1847 * space (' ') character. The width of a single
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1848 * tab stop is the pixel width of the spaces.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1849 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1850 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1851 * @param tabs the number of tabs
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1852 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1853 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1854 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1855 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1856 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1857 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1858 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1859 public void setTabs (int tabs) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1860 checkWidget ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1861 if (tabs < 0) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1862 setTabStops (this.tabs = tabs);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1863 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1864
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1865 void setTabStops (int tabs) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1866 if ((style & DWT.SINGLE) !is 0) return;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1867 int tabWidth = getTabWidth (tabs);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1868 auto tabArray = OS.pango_tab_array_new (1, false);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1869 OS.pango_tab_array_set_tab (tabArray, 0, OS.PANGO_TAB_LEFT, tabWidth);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1870 OS.gtk_text_view_set_tabs (cast(GtkTextView*)handle, tabArray);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1871 OS.pango_tab_array_free (tabArray);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1872 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1873
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1874 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1875 * Sets the contents of the receiver to the given string. If the receiver has style
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1876 * SINGLE and the argument contains multiple lines of text, the result of this
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1877 * operation is undefined and may vary from platform to platform.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1878 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1879 * @param string the new text
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1880 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1881 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1882 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1883 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1884 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1885 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
1886 public void setText (String string) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1887 checkWidget ();
255
5a30aa9820f3 removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
1888 // DWT extension: allow null for zero length string
5a30aa9820f3 removed tango.stdc.stringz imports and allow null for arrays and string arguments.
Frank Benoit <benoit@tionex.de>
parents: 240
diff changeset
1889 //if (string is null) error (DWT.ERROR_NULL_ARGUMENT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1890 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1891 * 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
1892 * insertion of the text. This is not wrong, but is inconsistent with other platforms. The
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1893 * 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
1894 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1895 if (hooks (DWT.Verify) || filters (DWT.Verify)) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1896 string = verifyText (string, 0, getCharCount ());
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1897 if (string is null) return;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1898 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1899 if ((style & DWT.SINGLE) !is 0) {
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1900 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1901 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_TEXT);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1902 OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1903 OS.gtk_entry_set_text (cast(GtkEntry*)handle, toStringz(string) );
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1904 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1905 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_TEXT);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1906 OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udINSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1907 } else {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1908 GtkTextIter position;
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1909 OS.g_signal_handlers_block_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1910 OS.g_signal_handlers_block_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_RANGE);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1911 OS.g_signal_handlers_block_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udTEXT_BUFFER_INSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1912 OS.gtk_text_buffer_set_text (bufferHandle, string.ptr, string.length);
66
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1913 OS.g_signal_handlers_unblock_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udCHANGED);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1914 OS.g_signal_handlers_unblock_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udDELETE_RANGE);
bb2217c09e61 Fixed signal blocking/unblocking:
Frank Benoit <benoit@tionex.de>
parents: 60
diff changeset
1915 OS.g_signal_handlers_unblock_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udTEXT_BUFFER_INSERT_TEXT);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1916 OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, &position, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1917 OS.gtk_text_buffer_place_cursor (bufferHandle, &position);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1918 auto mark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1919 OS.gtk_text_view_scroll_mark_onscreen (cast(GtkTextView*)handle, mark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1920 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1921 sendEvent (DWT.Modify);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1922 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1923
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1924 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1925 * Sets the maximum number of characters that the receiver
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1926 * is capable of holding to be the argument.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1927 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1928 * Instead of trying to set the text limit to zero, consider
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1929 * creating a read-only text widget.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1930 * </p><p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1931 * To reset this value to the default, use <code>setTextLimit(Text.LIMIT)</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1932 * Specifying a limit value larger than <code>Text.LIMIT</code> sets the
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1933 * receiver's limit to <code>Text.LIMIT</code>.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1934 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1935 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1936 * @param limit new text limit
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1937 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1938 * @exception IllegalArgumentException <ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1939 * <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1940 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1941 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1942 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1943 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1944 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1945 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1946 * @see #LIMIT
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1947 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1948 public void setTextLimit (int limit) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1949 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1950 if (limit is 0) error (DWT.ERROR_CANNOT_BE_ZERO);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1951 if ((style & DWT.SINGLE) !is 0) OS.gtk_entry_set_max_length (cast(GtkEntry*)handle, limit);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1952 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1953
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1954 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1955 * Sets the zero-relative index of the line which is currently
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1956 * at the top of the receiver. This index can change when lines
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1957 * are scrolled or new lines are added and removed.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1958 *
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1959 * @param index the index of the top item
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1960 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1961 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1962 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1963 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1964 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1965 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1966 public void setTopIndex (int index) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1967 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1968 if ((style & DWT.SINGLE) !is 0) return;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1969 GtkTextIter position;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1970 OS.gtk_text_buffer_get_iter_at_line (bufferHandle, &position, index);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1971 OS.gtk_text_view_scroll_to_iter (cast(GtkTextView*)handle, &position, 0, true, 0, 0);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1972 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1973
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1974 /**
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1975 * Shows the selection.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1976 * <p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1977 * If the selection is already showing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1978 * in the receiver, this method simply returns. Otherwise,
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1979 * lines are scrolled until the selection is visible.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1980 * </p>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1981 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1982 * @exception DWTException <ul>
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1983 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1984 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1985 * </ul>
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1986 */
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1987 public void showSelection () {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1988 checkWidget ();
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
1989 if ((style & DWT.SINGLE) !is 0) return;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1990 auto mark = OS.gtk_text_buffer_get_selection_bound (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1991 OS.gtk_text_view_scroll_mark_onscreen (cast(GtkTextView*)handle, mark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1992 mark = OS.gtk_text_buffer_get_insert (bufferHandle);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1993 OS.gtk_text_view_scroll_mark_onscreen (cast(GtkTextView*)handle, mark);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1994 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1995
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
1996 override bool translateTraversal (GdkEventKey* keyEvent) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1997 int key = keyEvent.keyval;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1998 switch (key) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1999 case OS.GDK_KP_Enter:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2000 case OS.GDK_Return: {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2001 auto imContext = imContext ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2002 if (imContext !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2003 char* preeditString;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2004 OS.gtk_im_context_get_preedit_string (imContext, &preeditString, null, null);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2005 if (preeditString !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2006 int length = tango.stdc.string.strlen (preeditString);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2007 OS.g_free (preeditString);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2008 if (length !is 0) return false;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2009 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2010 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2011 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2012 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2013 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2014 return super.translateTraversal (keyEvent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2015 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2016
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
2017 override int traversalCode (int key, GdkEventKey* event) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2018 int bits = super.traversalCode (key, event);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
2019 if ((style & DWT.READ_ONLY) !is 0) return bits;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
2020 if ((style & DWT.MULTI) !is 0) {
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
2021 bits &= ~DWT.TRAVERSE_RETURN;
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2022 if (key is OS.GDK_Tab && event !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2023 bool next = (event.state & OS.GDK_SHIFT_MASK) is 0;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2024 if (next && (event.state & OS.GDK_CONTROL_MASK) is 0) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
2025 bits &= ~(DWT.TRAVERSE_TAB_NEXT | DWT.TRAVERSE_TAB_PREVIOUS);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2026 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2027 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2028 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2029 return bits;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2030 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2031
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
2032 String verifyText (String string, int start, int end) {
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2033 if (string.length is 0 && start is end) return null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2034 Event event = new Event ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2035 event.text = string;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2036 event.start = start;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2037 event.end = end;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2038 auto eventPtr = OS.gtk_get_current_event ();
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2039 if (eventPtr !is null) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2040 GdkEventKey* gdkEvent = cast(GdkEventKey*)eventPtr;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2041 switch (gdkEvent.type) {
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2042 case OS.GDK_KEY_PRESS:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2043 setKeyState (event, gdkEvent);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2044 break;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2045 default:
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2046 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2047 OS.gdk_event_free (eventPtr);
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2048 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2049 /*
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2050 * It is possible (but unlikely), that application
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2051 * code could have disposed the widget in the verify
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2052 * event. If this happens, answer null to cancel
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2053 * the operation.
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2054 */
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 66
diff changeset
2055 sendEvent (DWT.Verify, event);
60
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2056 if (!event.doit || isDisposed ()) return null;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2057 return event.text;
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2058 }
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2059
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2060 }