# HG changeset patch # User Frank Benoit # Date 1199843972 -3600 # Node ID 10acbb123580f2e49875efe27bea4eb08bfb6b19 # Parent ffa3c27c4328df978bcaae06384c43767fd38820 Widget and TypedListener diff -r ffa3c27c4328 -r 10acbb123580 dwt/dwthelper/utils.d --- a/dwt/dwthelper/utils.d Wed Jan 09 01:08:22 2008 +0100 +++ b/dwt/dwthelper/utils.d Wed Jan 09 02:59:32 2008 +0100 @@ -26,6 +26,8 @@ alias ArrayWrapperT!(int) ArrayWrapperInt; alias ArrayWrapperT!(Object) ArrayWrapperObject; +alias ArrayWrapperT!(char) ArrayWrapperString; +alias ArrayWrapperT!(char[]) ArrayWrapperString2; diff -r ffa3c27c4328 -r 10acbb123580 dwt/graphics/Device.d --- a/dwt/graphics/Device.d Wed Jan 09 01:08:22 2008 +0100 +++ b/dwt/graphics/Device.d Wed Jan 09 02:59:32 2008 +0100 @@ -77,7 +77,7 @@ * platforms and should never be accessed from application code. *

*/ - protected dwt.internal.gtk.c.cairotypes.Display* xDisplay; + protected void* xDisplay; GtkWidget* shellHandle; /* Debugging */ @@ -287,7 +287,7 @@ } } -static synchronized Device findDevice (dwt.internal.gtk.c.cairotypes.Display* xDisplay) { +static synchronized Device findDevice (void* xDisplay) { for (int i=0; idata g_list_set_next(arg0, arg1) (arg0)->next = arg1 g_list_set_previous(arg0, arg1) (arg0)->prev = arg1 + +/ - gtk_rc_style_get_bg_pixmap_name(arg0, arg1) (arg0)->bg_pixmap_name[arg1] - gtk_rc_style_get_color_flags(arg0, arg1) (arg0)->color_flags[arg1] - gtk_rc_style_set_bg(arg0, arg1, arg2) if (arg2) (arg0)->bg[arg1] = *arg2 - gtk_rc_style_set_bg_pixmap_name(arg0, arg1, arg2) (arg0)->bg_pixmap_name[arg1] = (char *)arg2 - gtk_rc_style_set_color_flags(arg0, arg1, arg2) (arg0)->color_flags[arg1] = arg2 - gtk_rc_style_set_fg(arg0, arg1, arg2) if (arg2) (arg0)->fg[arg1] = *arg2 - gtk_rc_style_set_text(arg0, arg1, arg2) if (arg2) (arg0)->text[arg1] = *arg2 + //gtk_rc_style_get_bg_pixmap_name(arg0, arg1) (arg0)->bg_pixmap_name[arg1] + static char* gtk_rc_style_get_bg_pixmap_name( GtkRcStyle* arg0, int arg1 ) { + return arg0.bg_pixmap_name[arg1]; + } + //gtk_rc_style_get_color_flags(arg0, arg1) (arg0)->color_flags[arg1] + static int gtk_rc_style_get_color_flags( GtkRcStyle* arg0, int arg1 ) { + return arg0.color_flags[arg1]; + } + //gtk_rc_style_set_bg(arg0, arg1, arg2) if (arg2) (arg0)->bg[arg1] = *arg2 + static void gtk_rc_style_set_bg( GtkRcStyle* arg0, int arg1, GdkColor* arg2 ) { + if (arg2) arg0.bg[arg1] = *arg2; + } + //gtk_rc_style_set_bg_pixmap_name(arg0, arg1, arg2) (arg0)->bg_pixmap_name[arg1] = (char *)arg2 + static void gtk_rc_style_set_bg_pixmap_name( GtkRcStyle* arg0, int arg1, char* arg2 ) { + arg0.bg_pixmap_name[arg1] = arg2; + } - +/ + //gtk_rc_style_set_color_flags(arg0, arg1, arg2) (arg0)->color_flags[arg1] = arg2 + static void gtk_rc_style_set_color_flags( GtkRcStyle* arg0, int arg1, int arg2 ) { + arg0.color_flags[arg1] = arg2; + } + + //gtk_rc_style_set_fg(arg0, arg1, arg2) if (arg2) (arg0)->fg[arg1] = *arg2 + static void gtk_rc_style_set_fg( GtkRcStyle* arg0, int arg1, GdkColor* arg2 ) { + if (arg2) arg0.fg[arg1] = *arg2; + } + //gtk_rc_style_set_text(arg0, arg1, arg2) if (arg2) (arg0)->text[arg1] = *arg2 + static void gtk_rc_style_set_text( GtkRcStyle* arg0, int arg1, GdkColor* arg2 ) { + if (arg2) arg0.text[arg1] = *arg2; + } + //gtk_style_get_font_desc(arg0) (arg0)->font_desc static PangoFontDescription* gtk_style_get_font_desc( GtkStyle* arg0 ) { return arg0.font_desc; diff -r ffa3c27c4328 -r 10acbb123580 dwt/internal/gtk/c/cairotypes.d --- a/dwt/internal/gtk/c/cairotypes.d Wed Jan 09 01:08:22 2008 +0100 +++ b/dwt/internal/gtk/c/cairotypes.d Wed Jan 09 02:59:32 2008 +0100 @@ -28,7 +28,7 @@ private alias void* HDC; -struct Display{}; // to support XLib surfaces +//struct Display{}; // to support XLib surfaces struct Visual; // to support XLib surfaces //struct Screen; // to support XLib surfaces diff -r ffa3c27c4328 -r 10acbb123580 dwt/internal/gtk/c/gdktypes.d --- a/dwt/internal/gtk/c/gdktypes.d Wed Jan 09 01:08:22 2008 +0100 +++ b/dwt/internal/gtk/c/gdktypes.d Wed Jan 09 02:59:32 2008 +0100 @@ -2251,8 +2251,8 @@ uint state; uint keyval; int length; - char *string; - ushort hardwareKeycode; + char *str; // d builtin alias "string" + ushort hardware_keycode; byte group; uint bitfield; //uint isModifier : 1; diff -r ffa3c27c4328 -r 10acbb123580 dwt/widgets/Display.d --- a/dwt/widgets/Display.d Wed Jan 09 01:08:22 2008 +0100 +++ b/dwt/widgets/Display.d Wed Jan 09 02:59:32 2008 +0100 @@ -634,8 +634,8 @@ popups [index] = menu; } -void addWidget (int/**/ handle, Widget widget) { - if (handle is 0) return; +void addWidget (GtkWidget* handle, Widget widget) { + if (handle is null) return; if (freeSlot is -1) { int len = (freeSlot = indexTable.length) + GROW_SIZE; int[] newIndexTable = new int[len]; @@ -858,7 +858,7 @@ if (!OS.gtk_init_check (&cnt, null)) { SWT.error (SWT.ERROR_NO_HANDLES, null, " [gtk_init_check() failed]"); } - if (OS.GDK_WINDOWING_X11 ()) xDisplay = cast(dwt.internal.gtk.c.cairotypes.Display*) OS.GDK_DISPLAY (); + if (OS.GDK_WINDOWING_X11 ()) xDisplay = cast(void*) OS.GDK_DISPLAY (); char* ptr = OS.gtk_check_version (MAJOR, MINOR, MICRO); if (ptr !is null) { char [] buffer = fromUtf8z(ptr); @@ -3350,7 +3350,7 @@ auto handle = (cast(LONG) data [0]).value; Widget widget = cast(Widget) data [1]; if (widget !is null) { - addWidget (handle, widget); + addWidget (cast(GtkWidget*)handle, widget); } else { removeWidget (cast(GtkWidget*)handle); } diff -r ffa3c27c4328 -r 10acbb123580 dwt/widgets/EventTable.d --- a/dwt/widgets/EventTable.d Wed Jan 09 01:08:22 2008 +0100 +++ b/dwt/widgets/EventTable.d Wed Jan 09 02:59:32 2008 +0100 @@ -12,12 +12,14 @@ import dwt.widgets.Listener; import dwt.widgets.Event; +import dwt.internal.SWTEventListener; class EventTable{ public void hook (int eventType, Listener listener) {} public void sendEvent (Event event) ; public bool hooks (int eventType) ; public void unhook (int eventType, Listener listener) ; + public void unhook (int eventType, SWTEventListener listener) ; public int size () ; } diff -r ffa3c27c4328 -r 10acbb123580 dwt/widgets/TypedListener.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwt/widgets/TypedListener.d Wed Jan 09 02:59:32 2008 +0100 @@ -0,0 +1,298 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwt.widgets.TypedListener; + + +import dwt.internal.SWTEventListener; +import dwt.SWT; +import dwt.widgets.Listener; +import dwt.widgets.Event; +import dwt.events.ArmEvent; +import dwt.events.ArmListener; +import dwt.events.ControlEvent; +import dwt.events.ControlListener; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.DragDetectEvent; +import dwt.events.DragDetectListener; +import dwt.events.ExpandEvent; +import dwt.events.ExpandListener; +import dwt.events.FocusEvent; +import dwt.events.FocusListener; +import dwt.events.HelpEvent; +import dwt.events.HelpListener; +import dwt.events.KeyEvent; +import dwt.events.KeyListener; +import dwt.events.MenuEvent; +import dwt.events.MenuListener; +import dwt.events.MenuDetectEvent; +import dwt.events.MenuDetectListener; +import dwt.events.ModifyEvent; +import dwt.events.ModifyListener; +import dwt.events.MouseEvent; +import dwt.events.MouseListener; +import dwt.events.MouseMoveListener; +import dwt.events.MouseTrackListener; +import dwt.events.MouseWheelListener; +import dwt.events.PaintEvent; +import dwt.events.PaintListener; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.events.ShellEvent; +import dwt.events.ShellListener; +import dwt.events.TraverseEvent; +import dwt.events.TraverseListener; +import dwt.events.TreeEvent; +import dwt.events.TreeListener; +import dwt.events.VerifyEvent; +import dwt.events.VerifyListener; +import dwt.graphics.GC; + + +/** + * Instances of this class are internal SWT implementation + * objects which provide a mapping between the typed and untyped + * listener mechanisms that SWT supports. + *

+ * IMPORTANT: This class is not part of the SWT + * public API. It is marked public only so that it can be shared + * within the packages provided by SWT. It should never be + * referenced from application code. + *

+ * + * @see Listener + */ +public class TypedListener : Listener { + + /** + * The receiver's event listener + */ + protected SWTEventListener eventListener; + +/** + * Constructs a new instance of this class for the given event listener. + *

+ * IMPORTANT: This method is not part of the SWT + * public API. It is marked public only so that it can be shared + * within the packages provided by SWT. It should never be + * referenced from application code. + *

+ * + * @param listener the event listener to store in the receiver + */ +public this (SWTEventListener listener) { + eventListener = listener; +} + +/** + * Returns the receiver's event listener. + *

+ * IMPORTANT: This method is not part of the SWT + * public API. It is marked public only so that it can be shared + * within the packages provided by SWT. It should never be + * referenced from application code. + *

+ * + * @return the receiver's event listener + */ +public SWTEventListener getEventListener () { + return eventListener; +} + +/** + * Handles the given event. + *

+ * IMPORTANT: This method is not part of the SWT + * public API. It is marked public only so that it can be shared + * within the packages provided by SWT. It should never be + * referenced from application code. + *

+ * @param e the event to handle + */ +public void handleEvent (Event e) { + switch (e.type) { + case SWT.Activate: { + (cast(ShellListener) eventListener).shellActivated(new ShellEvent(e)); + break; + } + case SWT.Arm: { + (cast(ArmListener) eventListener).widgetArmed (new ArmEvent (e)); + break; + } + case SWT.Close: { + /* Fields set by Decorations */ + ShellEvent event = new ShellEvent (e); + (cast(ShellListener) eventListener).shellClosed(event); + e.doit = event.doit; + break; + } + case SWT.Collapse: { + if ( auto l = cast(TreeListener)eventListener ) { + l.treeCollapsed(new TreeEvent(e)); + } else { + (cast(ExpandListener) eventListener).itemCollapsed(new ExpandEvent(e)); + } + break; + } + case SWT.Deactivate: { + (cast(ShellListener) eventListener).shellDeactivated(new ShellEvent(e)); + break; + } + case SWT.Deiconify: { + (cast(ShellListener) eventListener).shellDeiconified(new ShellEvent(e)); + break; + } + case SWT.DefaultSelection: { + (cast(SelectionListener)eventListener).widgetDefaultSelected(new SelectionEvent(e)); + break; + } + case SWT.Dispose: { + (cast(DisposeListener) eventListener).widgetDisposed(new DisposeEvent(e)); + break; + } + case SWT.DragDetect: { + (cast(DragDetectListener) eventListener).dragDetected(new DragDetectEvent(e)); + break; + } + case SWT.Expand: { + if (auto l = cast(TreeListener)eventListener ) { + l.treeExpanded(new TreeEvent(e)); + } else { + (cast(ExpandListener) eventListener).itemExpanded(new ExpandEvent(e)); + } + break; + } + case SWT.FocusIn: { + (cast(FocusListener) eventListener).focusGained(new FocusEvent(e)); + break; + } + case SWT.FocusOut: { + (cast(FocusListener) eventListener).focusLost(new FocusEvent(e)); + break; + } + case SWT.Help: { + (cast(HelpListener) eventListener).helpRequested (new HelpEvent (e)); + break; + } + case SWT.Hide: { + (cast(MenuListener) eventListener).menuHidden(new MenuEvent(e)); + break; + } + case SWT.Iconify: { + (cast(ShellListener) eventListener).shellIconified(new ShellEvent(e)); + break; + } + case SWT.KeyDown: { + /* Fields set by Control */ + KeyEvent event = new KeyEvent(e); + (cast(KeyListener) eventListener).keyPressed(event); + e.doit = event.doit; + break; + } + case SWT.KeyUp: { + /* Fields set by Control */ + KeyEvent event = new KeyEvent(e); + (cast(KeyListener) eventListener).keyReleased(event); + e.doit = event.doit; + break; + } + case SWT.Modify: { + (cast(ModifyListener) eventListener).modifyText(new ModifyEvent(e)); + break; + } + case SWT.MenuDetect: { + MenuDetectEvent event = new MenuDetectEvent(e); + (cast(MenuDetectListener) eventListener).menuDetected(event); + e.x = event.x; + e.y = event.y; + e.doit = event.doit; + break; + } + case SWT.MouseDown: { + (cast(MouseListener) eventListener).mouseDown(new MouseEvent(e)); + break; + } + case SWT.MouseDoubleClick: { + (cast(MouseListener) eventListener).mouseDoubleClick(new MouseEvent(e)); + break; + } + case SWT.MouseEnter: { + (cast(MouseTrackListener) eventListener).mouseEnter (new MouseEvent (e)); + break; + } + case SWT.MouseExit: { + (cast(MouseTrackListener) eventListener).mouseExit (new MouseEvent (e)); + break; + } + case SWT.MouseHover: { + (cast(MouseTrackListener) eventListener).mouseHover (new MouseEvent (e)); + break; + } + case SWT.MouseMove: { + (cast(MouseMoveListener) eventListener).mouseMove(new MouseEvent(e)); + return; + } + case SWT.MouseWheel: { + (cast(MouseWheelListener) eventListener).mouseScrolled(new MouseEvent(e)); + return; + } + case SWT.MouseUp: { + (cast(MouseListener) eventListener).mouseUp(new MouseEvent(e)); + break; + } + case SWT.Move: { + (cast(ControlListener) eventListener).controlMoved(new ControlEvent(e)); + break; + } + case SWT.Paint: { + /* Fields set by Control */ + PaintEvent event = new PaintEvent (e); + (cast(PaintListener) eventListener).paintControl (event); + e.gc = event.gc; + break; + } + case SWT.Resize: { + (cast(ControlListener) eventListener).controlResized(new ControlEvent(e)); + break; + } + case SWT.Selection: { + /* Fields set by Sash */ + SelectionEvent event = new SelectionEvent (e); + (cast(SelectionListener) eventListener).widgetSelected (event); + e.x = event.x; + e.y = event.y; + e.doit = event.doit; + break; + } + case SWT.Show: { + (cast(MenuListener) eventListener).menuShown(new MenuEvent(e)); + break; + } + case SWT.Traverse: { + /* Fields set by Control */ + TraverseEvent event = new TraverseEvent (e); + (cast(TraverseListener) eventListener).keyTraversed (event); + e.detail = event.detail; + e.doit = event.doit; + break; + } + case SWT.Verify: { + /* Fields set by Text, RichText */ + VerifyEvent event = new VerifyEvent (e); + (cast(VerifyListener) eventListener).verifyText (event); + e.text = event.text; + e.doit = event.doit; + break; + } + } +} + +} diff -r ffa3c27c4328 -r 10acbb123580 dwt/widgets/Widget.d --- a/dwt/widgets/Widget.d Wed Jan 09 01:08:22 2008 +0100 +++ b/dwt/widgets/Widget.d Wed Jan 09 02:59:32 2008 +0100 @@ -10,10 +10,25 @@ *******************************************************************************/ module dwt.widgets.Widget; +import dwt.SWT; +import dwt.dwthelper.utils; import dwt.internal.gtk.c.gtktypes; import dwt.internal.gtk.c.gdktypes; + +import dwt.events.DisposeListener; +import dwt.internal.Converter; +import dwt.internal.SWTEventListener; +import dwt.internal.gtk.OS; +import dwt.widgets.Display; import dwt.widgets.Event; +import dwt.widgets.EventTable; +import dwt.widgets.Listener; +import dwt.widgets.TypedListener; +import tango.stdc.stringz; +import tango.stdc.string; + +/+ class Widget{ int /*long*/ windowProc (GtkWidget* handle, int /*long*/ user_data) ; int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ user_data) ; @@ -133,11 +148,7 @@ static const int LAST_SIGNAL = 62; } -/++ -import dwt.SWT; -import dwt.internal.*; -import dwt.internal.gtk.*; -import dwt.events.*; ++/ /** * This class is the abstract superclass of all user interface objects. @@ -176,7 +187,7 @@ * platforms and should never be accessed from application code. *

*/ - public int /*long*/ handle; + public GtkWidget* handle; int style, state; Display display; EventTable eventTable; @@ -287,7 +298,7 @@ /** * Prevents uninitialized instances from being created outside the package. */ -Widget () {} +this () {} /** * Constructs a new instance of this class given its parent @@ -318,7 +329,7 @@ * @see #checkSubclass * @see #getStyle */ -public Widget (Widget parent, int style) { +public this (Widget parent, int style) { checkSubclass (); checkParent (parent); this.style = style; @@ -326,7 +337,7 @@ } void _addListener (int eventType, Listener listener) { - if (eventTable == null) eventTable = new EventTable (); + if (eventTable is null) eventTable = new EventTable (); eventTable.hook (eventType, listener); } @@ -355,7 +366,7 @@ */ public void addListener (int eventType, Listener listener) { checkWidget (); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); + if (listener is null) error (SWT.ERROR_NULL_ARGUMENT); _addListener (eventType, listener); } @@ -380,28 +391,28 @@ */ public void addDisposeListener (DisposeListener listener) { checkWidget (); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); + if (listener is null) error (SWT.ERROR_NULL_ARGUMENT); TypedListener typedListener = new TypedListener (listener); addListener (SWT.Dispose, typedListener); } -int /*long*/ paintWindow () { - return 0; +GdkWindow* paintWindow () { + return null; } static int checkBits (int style, int int0, int int1, int int2, int int3, int int4, int int5) { int mask = int0 | int1 | int2 | int3 | int4 | int5; - if ((style & mask) == 0) style |= int0; - if ((style & int0) != 0) style = (style & ~mask) | int0; - if ((style & int1) != 0) style = (style & ~mask) | int1; - if ((style & int2) != 0) style = (style & ~mask) | int2; - if ((style & int3) != 0) style = (style & ~mask) | int3; - if ((style & int4) != 0) style = (style & ~mask) | int4; - if ((style & int5) != 0) style = (style & ~mask) | int5; + if ((style & mask) is 0) style |= int0; + if ((style & int0) !is 0) style = (style & ~mask) | int0; + if ((style & int1) !is 0) style = (style & ~mask) | int1; + if ((style & int2) !is 0) style = (style & ~mask) | int2; + if ((style & int3) !is 0) style = (style & ~mask) | int3; + if ((style & int4) !is 0) style = (style & ~mask) | int4; + if ((style & int5) !is 0) style = (style & ~mask) | int5; return style; } -int /*long*/ cellDataProc (int /*long*/ tree_column, int /*long*/ cell, int /*long*/ tree_model, int /*long*/ iter, int /*long*/ data) { +int /*long*/ cellDataProc (int /*long*/ tree_column, int /*long*/ cell, int /*long*/ tree_model, int /*long*/ iter, GtkWidget* data) { return 0; } @@ -411,10 +422,10 @@ void checkOrientation (Widget parent) { style &= ~SWT.MIRRORED; - if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) == 0) { - if (parent != null) { - if ((parent.style & SWT.LEFT_TO_RIGHT) != 0) style |= SWT.LEFT_TO_RIGHT; - if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) style |= SWT.RIGHT_TO_LEFT; + if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) is 0) { + if (parent !is null) { + if ((parent.style & SWT.LEFT_TO_RIGHT) !is 0) style |= SWT.LEFT_TO_RIGHT; + if ((parent.style & SWT.RIGHT_TO_LEFT) !is 0) style |= SWT.RIGHT_TO_LEFT; } } style = checkBits (style, SWT.LEFT_TO_RIGHT, SWT.RIGHT_TO_LEFT, 0, 0, 0, 0); @@ -433,7 +444,7 @@ * */ void checkParent (Widget parent) { - if (parent == null) error (SWT.ERROR_NULL_ARGUMENT); + if (parent is null) error (SWT.ERROR_NULL_ARGUMENT); if (parent.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT); parent.checkWidget (); parent.checkOpen (); @@ -496,9 +507,9 @@ */ protected void checkWidget () { Display display = this.display; - if (display == null) error (SWT.ERROR_WIDGET_DISPOSED); - if (display.thread != Thread.currentThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS); - if ((state & DISPOSED) != 0) error (SWT.ERROR_WIDGET_DISPOSED); + if (display is null) error (SWT.ERROR_WIDGET_DISPOSED); + if (display.thread !is Thread.getThis ()) error (SWT.ERROR_THREAD_INVALID_ACCESS); + if ((state & DISPOSED) !is 0) error (SWT.ERROR_WIDGET_DISPOSED); } void createHandle (int index) { @@ -512,15 +523,15 @@ } void deregister () { - if (handle == 0) return; - if ((state & HANDLE) != 0) display.removeWidget (handle); + if (handle is null) return; + if ((state & HANDLE) !is 0) display.removeWidget (handle); } void destroyWidget () { - int /*long*/ topHandle = topHandle (); + GtkWidget* h = topHandle (); releaseHandle (); - if (topHandle != 0 && (state & HANDLE) != 0) { - OS.gtk_widget_destroy (topHandle); + if (h !is null && (state & HANDLE) !is 0) { + OS.gtk_widget_destroy (h); } } @@ -585,7 +596,7 @@ */ public Object getData () { checkWidget(); - return (state & KEYED_DATA) != 0 ? ((Object []) data) [0] : data; + return (state & KEYED_DATA) !is 0 ? (cast(ArrayWrapperObject)data).array[0] : data; } /** * Returns the application defined property of the receiver @@ -611,13 +622,13 @@ * * @see #setData(String, Object) */ -public Object getData (String key) { +public Object getData (char[] key) { checkWidget(); - if (key == null) error (SWT.ERROR_NULL_ARGUMENT); - if ((state & KEYED_DATA) != 0) { - Object [] table = (Object []) data; + if (key is null) error (SWT.ERROR_NULL_ARGUMENT); + if ((state & KEYED_DATA) !is 0) { + char[][] table = (cast(ArrayWrapperString2) data).array; for (int i=1; i 0) && (string.charAt (index) != '.')) {} - return string.substring (index + 1, string.length ()); +char[] getName () { +// char[] str = getClass ().getName (); +// int index = str.lastIndexOf ('.'); +// if (index is -1) return str; + char[] str = this.classinfo.name; + int index = str.length; + while ((--index > 0) && (str[index] !is '.')) {} + return str[index + 1 .. $ ]; } -String getNameText () { +char[] getNameText () { return ""; } @@ -684,27 +695,27 @@ } -int /*long*/ gtk_activate (int /*long*/ widget) { +int /*long*/ gtk_activate (GtkWidget* widget) { return 0; } -int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_button_press_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_button_release_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_button_release_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_changed (int /*long*/ widget) { +int /*long*/ gtk_changed (GtkWidget* widget) { return 0; } -int /*long*/ gtk_change_value (int /*long*/ widget, int /*long*/ scroll, int /*long*/ value1, int /*long*/ value2) { +int /*long*/ gtk_change_value (GtkWidget* widget, int /*long*/ scroll, int /*long*/ value1, int /*long*/ value2) { return 0; } -int /*long*/ gtk_clicked (int /*long*/ widget) { +int /*long*/ gtk_clicked (GtkWidget* widget) { return 0; } @@ -712,127 +723,123 @@ return 0; } -int /*long*/ gtk_configure_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_configure_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_day_selected (int /*long*/ widget) { - return 0; -} - -int /*long*/ gtk_delete_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_day_selected (GtkWidget* widget) { return 0; } -int /*long*/ gtk_delete_range (int /*long*/ widget, int /*long*/ iter1, int /*long*/ iter2) { +int /*long*/ gtk_delete_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_delete_text (int /*long*/ widget, int /*long*/ start_pos, int /*long*/ end_pos) { +int /*long*/ gtk_delete_range (GtkWidget* widget, int /*long*/ iter1, int /*long*/ iter2) { return 0; } -int /*long*/ gtk_enter_notify_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_delete_text (GtkWidget* widget, int /*long*/ start_pos, int /*long*/ end_pos) { return 0; } -int /*long*/ gtk_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_enter_notify_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_expand_collapse_cursor_row (int /*long*/ widget, int /*long*/ logical, int /*long*/ expand, int /*long*/ open_all) { +int /*long*/ gtk_event_after (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_expose_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_expand_collapse_cursor_row (GtkWidget* widget, int /*long*/ logical, int /*long*/ expand, int /*long*/ open_all) { return 0; } -int /*long*/ gtk_focus (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_expose_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_focus_in_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_focus (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_focus_out_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_focus_in_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_grab_focus (int /*long*/ widget) { +int /*long*/ gtk_focus_out_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_hide (int /*long*/ widget) { +int /*long*/ gtk_grab_focus (GtkWidget* widget) { return 0; } -int /*long*/ gtk_input (int /*long*/ widget, int /*long*/ arg1) { +int /*long*/ gtk_hide (GtkWidget* widget) { return 0; } -int /*long*/ gtk_insert_text (int /*long*/ widget, int /*long*/ new_text, int /*long*/ new_text_length, int /*long*/ position) { +int /*long*/ gtk_input (GtkWidget* widget, int /*long*/ arg1) { + return 0; +} + +int /*long*/ gtk_insert_text (GtkWidget* widget, int /*long*/ new_text, int /*long*/ new_text_length, int /*long*/ position) { return 0; } -int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ event) { - GdkEventKey gdkEvent = new GdkEventKey (); - OS.memmove (gdkEvent, event, GdkEventKey.sizeof); - return sendKeyEvent (SWT.KeyDown, gdkEvent) ? 0 : 1; +int /*long*/ gtk_key_press_event (GtkWidget* widget, GdkEventKey* event) { + return sendKeyEvent (SWT.KeyDown, event) ? 0 : 1; } -int /*long*/ gtk_key_release_event (int /*long*/ widget, int /*long*/ event) { - GdkEventKey gdkEvent = new GdkEventKey (); - OS.memmove (gdkEvent, event, GdkEventKey.sizeof); - return sendKeyEvent (SWT.KeyUp, gdkEvent) ? 0 : 1; +int /*long*/ gtk_key_release_event (GtkWidget* widget, GdkEventKey* event) { + return sendKeyEvent (SWT.KeyUp, event) ? 0 : 1; } -int /*long*/ gtk_leave_notify_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_leave_notify_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_map (int /*long*/ widget) { +int /*long*/ gtk_map (GtkWidget* widget) { return 0; } -int /*long*/ gtk_map_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_map_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_mnemonic_activate (int /*long*/ widget, int /*long*/ arg1) { +int /*long*/ gtk_mnemonic_activate (GtkWidget* widget, int /*long*/ arg1) { return 0; } -int /*long*/ gtk_month_changed (int /*long*/ widget) { +int /*long*/ gtk_month_changed (GtkWidget* widget) { return 0; } -int /*long*/ gtk_motion_notify_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_motion_notify_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_move_focus (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_move_focus (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_output (int /*long*/ widget) { +int /*long*/ gtk_output (GtkWidget* widget) { return 0; } -int /*long*/ gtk_popup_menu (int /*long*/ widget) { +int /*long*/ gtk_popup_menu (GtkWidget* widget) { return 0; } -int /*long*/ gtk_preedit_changed (int /*long*/ imcontext) { +int /*long*/ gtk_preedit_changed (GtkWidget* imcontext) { return 0; } -int /*long*/ gtk_realize (int /*long*/ widget) { +int /*long*/ gtk_realize (GtkWidget* widget) { return 0; } @@ -840,11 +847,11 @@ return 0; } -int /*long*/ gtk_scroll_child (int /*long*/ widget, int /*long*/ scrollType, int /*long*/ horizontal) { +int /*long*/ gtk_scroll_child (GtkWidget* widget, int /*long*/ scrollType, int /*long*/ horizontal) { return 0; } -int /*long*/ gtk_scroll_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_scroll_event (GtkWidget* widget, int /*long*/ event) { return 0; } @@ -852,23 +859,23 @@ return 0; } -int /*long*/ gtk_show (int /*long*/ widget) { +int /*long*/ gtk_show (GtkWidget* widget) { return 0; } -int /*long*/ gtk_show_help (int /*long*/ widget, int /*long*/ helpType) { +int /*long*/ gtk_show_help (GtkWidget* widget, int /*long*/ helpType) { return 0; } -int /*long*/ gtk_size_allocate (int /*long*/ widget, int /*long*/ allocation) { +int /*long*/ gtk_size_allocate (GtkWidget* widget, int /*long*/ allocation) { return 0; } -int /*long*/ gtk_style_set (int /*long*/ widget, int /*long*/ previousStyle) { +int /*long*/ gtk_style_set (GtkWidget* widget, int /*long*/ previousStyle) { return 0; } -int /*long*/ gtk_switch_page (int /*long*/ widget, int /*long*/ page, int /*long*/ page_num) { +int /*long*/ gtk_switch_page (GtkWidget* widget, int /*long*/ page, int /*long*/ page_num) { return 0; } @@ -880,7 +887,7 @@ return 0; } -int /*long*/ gtk_text_buffer_insert_text (int /*long*/ widget, int /*long*/ iter, int /*long*/ text, int /*long*/ length) { +int /*long*/ gtk_text_buffer_insert_text (GtkWidget* widget, int /*long*/ iter, int /*long*/ text, int /*long*/ length) { return 0; } @@ -892,15 +899,15 @@ return 0; } -int /*long*/ gtk_unmap (int /*long*/ widget) { +int /*long*/ gtk_unmap (GtkWidget* widget) { return 0; } -int /*long*/ gtk_unmap_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_unmap_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_unrealize (int /*long*/ widget) { +int /*long*/ gtk_unrealize (GtkWidget* widget) { return 0; } @@ -908,46 +915,46 @@ return 0; } -int /*long*/ gtk_visibility_notify_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_visibility_notify_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int /*long*/ gtk_window_state_event (int /*long*/ widget, int /*long*/ event) { +int /*long*/ gtk_window_state_event (GtkWidget* widget, int /*long*/ event) { return 0; } -int fontHeight (int /*long*/ font, int /*long*/ widgetHandle) { - int /*long*/ context = OS.gtk_widget_get_pango_context (widgetHandle); - int /*long*/ lang = OS.pango_context_get_language (context); - int /*long*/ metrics = OS.pango_context_get_metrics (context, font, lang); +int fontHeight ( PangoFontDescription* font, GtkWidget* widgetHandle ) { + auto context = OS.gtk_widget_get_pango_context (widgetHandle); + auto lang = OS.pango_context_get_language (context); + auto metrics = OS.pango_context_get_metrics (context, font, lang); int ascent = OS.pango_font_metrics_get_ascent (metrics); int descent = OS.pango_font_metrics_get_descent (metrics); OS.pango_font_metrics_unref (metrics); return OS.PANGO_PIXELS (ascent + descent); } -int /*long*/ filterProc(int /*long*/ xEvent, int /*long*/ gdkEvent, int /*long*/ data2) { - return 0; +GdkFilterReturn filterProc (GdkXEvent* xEvent, GdkEvent* gdkEvent, void* data) { + return cast(GdkFilterReturn)0; } -boolean filters (int eventType) { +bool filters (int eventType) { return display.filters (eventType); } -int /*long*/ fixedMapProc (int /*long*/ widget) { +int /*long*/ fixedMapProc (GtkWidget* widget) { return 0; } -char [] fixMnemonic (String string) { - int length = string.length (); - char [] text = new char [length]; - string.getChars (0, length, text, 0); +char [] fixMnemonic (char[] str) { + int len = str.length; + char [] text = new char [len]; + text = str[0 .. len]; int i = 0, j = 0; - char [] result = new char [length * 2]; - while (i < length) { + char [] result = new char [len * 2]; + while (i < len) { switch (text [i]) { case '&': - if (i + 1 < length && text [i + 1] == '&') { + if (i + 1 < len && text [i + 1] is '&') { i++; } else { text [i] = '_'; @@ -973,8 +980,8 @@ * * @return true when the widget is disposed and false otherwise */ -public boolean isDisposed () { - return (state & DISPOSED) != 0; +public bool isDisposed () { + return (state & DISPOSED) !is 0; } /** @@ -993,17 +1000,17 @@ * * @see SWT */ -public boolean isListening (int eventType) { +public bool isListening (int eventType) { checkWidget (); return hooks (eventType); } -boolean isValidThread () { +bool isValidThread () { return getDisplay ().isValidThread (); } -boolean isValidSubclass() { - return Display.isValidClass(getClass()); +bool isValidSubclass() { + return true;//Display.isValidClass(getClass()); } void hookEvents () { @@ -1022,31 +1029,31 @@ * * @see #isListening */ -boolean hooks (int eventType) { - if (eventTable == null) return false; +bool hooks (int eventType) { + if (eventTable is null) return false; return eventTable.hooks (eventType); } -int /*long*/ hoverProc (int /*long*/ widget) { +int /*long*/ hoverProc (GtkWidget* widget) { return 0; } -int /*long*/ menuPositionProc (int /*long*/ menu, int /*long*/ x, int /*long*/ y, int /*long*/ push_in, int /*long*/ user_data) { +int /*long*/ menuPositionProc (GtkWidget * menu, int /*long*/ x, int /*long*/ y, int /*long*/ push_in, int /*long*/ user_data) { return 0; } -boolean mnemonicHit (int /*long*/ mnemonicHandle, char key) { +bool mnemonicHit (int /*long*/ mnemonicHandle, char key) { if (!mnemonicMatch (mnemonicHandle, key)) return false; - OS.g_signal_handlers_block_matched (mnemonicHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, MNEMONIC_ACTIVATE); - boolean result = OS.gtk_widget_mnemonic_activate (mnemonicHandle, false); - OS.g_signal_handlers_unblock_matched (mnemonicHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, MNEMONIC_ACTIVATE); + OS.g_signal_handlers_block_matched ( cast(void*)mnemonicHandle, cast(GSignalMatchType)OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)MNEMONIC_ACTIVATE); + bool result = cast(bool)OS.gtk_widget_mnemonic_activate (cast(GtkWidget*)mnemonicHandle, false); + OS.g_signal_handlers_unblock_matched (cast(void*)mnemonicHandle, cast(GSignalMatchType)OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)MNEMONIC_ACTIVATE); return result; } -boolean mnemonicMatch (int /*long*/ mnemonicHandle, char key) { +bool mnemonicMatch (int /*long*/ mnemonicHandle, char key) { int keyval1 = OS.gdk_keyval_to_lower (OS.gdk_unicode_to_keyval (key)); - int keyval2 = OS.gdk_keyval_to_lower (OS.gtk_label_get_mnemonic_keyval (mnemonicHandle)); - return keyval1 == keyval2; + int keyval2 = OS.gdk_keyval_to_lower (OS.gtk_label_get_mnemonic_keyval (cast(GtkLabel*)mnemonicHandle)); + return keyval1 is keyval2; } /** @@ -1070,7 +1077,7 @@ */ public void notifyListeners (int eventType, Event event) { checkWidget(); - if (event == null) event = new Event (); + if (event is null) event = new Event (); sendEvent (eventType, event); } @@ -1083,19 +1090,19 @@ } void register () { - if (handle == 0) return; - if ((state & HANDLE) != 0) display.addWidget (handle, this); + if (handle is null) return; + if ((state & HANDLE) !is 0) display.addWidget (handle, this); } -void release (boolean destroy) { - if ((state & DISPOSE_SENT) == 0) { +void release (bool destroy) { + if ((state & DISPOSE_SENT) is 0) { state |= DISPOSE_SENT; sendEvent (SWT.Dispose); } - if ((state & DISPOSED) == 0) { + if ((state & DISPOSED) is 0) { releaseChildren (destroy); } - if ((state & RELEASED) == 0) { + if ((state & RELEASED) is 0) { state |= RELEASED; if (destroy) { releaseParent (); @@ -1108,11 +1115,11 @@ } } -void releaseChildren (boolean destroy) { +void releaseChildren (bool destroy) { } void releaseHandle () { - handle = 0; + handle = null; state |= DISPOSED; display = null; } @@ -1150,8 +1157,8 @@ */ public void removeListener (int eventType, Listener handler) { checkWidget (); - if (handler == null) error (SWT.ERROR_NULL_ARGUMENT); - if (eventTable == null) return; + if (handler is null) error (SWT.ERROR_NULL_ARGUMENT); + if (eventTable is null) return; eventTable.unhook (eventType, handler); } @@ -1181,16 +1188,16 @@ */ protected void removeListener (int eventType, SWTEventListener handler) { checkWidget (); - if (handler == null) error (SWT.ERROR_NULL_ARGUMENT); - if (eventTable == null) return; + if (handler is null) error (SWT.ERROR_NULL_ARGUMENT); + if (eventTable is null) return; eventTable.unhook (eventType, handler); } -int /*long*/ rendererGetSizeProc (int /*long*/ cell, int /*long*/ handle, int /*long*/ cell_area, int /*long*/ x_offset, int /*long*/ y_offset, int /*long*/ width, int /*long*/ height) { +void rendererGetSizeProc(GtkCellRenderer *cell, GtkWidget *handle, GdkRectangle *cell_area, int *x_offset, int *y_offset, int *width, int *height) { return 0; } -int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*long*/ handle, int /*long*/ background_area, int /*long*/ cell_area, int /*long*/ expose_area, int /*long*/ flags) { +void rendererRenderProc (GtkCellRenderer * cell, GdkDrawable * window, GtkWidget * handle, GdkRectangle *background_area, GdkRectangle *cell_area, GdkRectangle *expose_area, int flags){ return 0; } @@ -1213,15 +1220,15 @@ */ public void removeDisposeListener (DisposeListener listener) { checkWidget (); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); - if (eventTable == null) return; + if (listener is null) error (SWT.ERROR_NULL_ARGUMENT); + if (eventTable is null) return; eventTable.unhook (SWT.Dispose, listener); } void sendEvent (Event event) { Display display = event.display; if (!display.filterEvent (event)) { - if (eventTable != null) eventTable.sendEvent (event); + if (eventTable !is null) eventTable.sendEvent (event); } } @@ -1233,15 +1240,15 @@ sendEvent (eventType, event, true); } -void sendEvent (int eventType, Event event, boolean send) { - if (eventTable == null && !display.filters (eventType)) { +void sendEvent (int eventType, Event event, bool send) { + if (eventTable is null && !display.filters (eventType)) { return; } - if (event == null) event = new Event (); + if (event is null) event = new Event (); event.type = eventType; event.display = display; event.widget = this; - if (event.time == 0) { + if (event.time is 0) { event.time = display.getLastEventTime (); } if (send) { @@ -1251,9 +1258,9 @@ } } -boolean sendKeyEvent (int type, GdkEventKey keyEvent) { - int length = keyEvent.length; - if (keyEvent.string == 0 || OS.g_utf8_strlen (keyEvent.string, length) <= 1) { +bool sendKeyEvent (int type, GdkEventKey* keyEvent) { + int len = keyEvent.length; + if (keyEvent.str is null || OS.g_utf8_strlen (keyEvent.str, len) <= 1) { Event event = new Event (); event.time = keyEvent.time; if (!setKeyState (event, keyEvent)) return true; @@ -1269,21 +1276,19 @@ if (isDisposed ()) return false; return event.doit; } - byte [] buffer = new byte [length]; - OS.memmove (buffer, keyEvent.string, length); - char [] chars = Converter.mbcsToWcs (null, buffer); - return sendIMKeyEvent (type, keyEvent, chars) != null; + char [] chars = fromUtf8z( keyEvent.str ); + return sendIMKeyEvent (type, keyEvent, chars) !is null; } -char [] sendIMKeyEvent (int type, GdkEventKey keyEvent, char [] chars) { +char [] sendIMKeyEvent (int type, GdkEventKey* keyEvent, char [] chars) { int index = 0, count = 0, state = 0; - int /*long*/ ptr = 0; - if (keyEvent == null) { + GdkEvent* ptr = null; + if (keyEvent is null) { ptr = OS.gtk_get_current_event (); - if (ptr != 0) { + if (ptr !is null) { keyEvent = new GdkEventKey (); - OS.memmove (keyEvent, ptr, GdkEventKey.sizeof); - switch (keyEvent.type) { + memmove (keyEvent, ptr, GdkEventKey.sizeof); + switch (cast(int)keyEvent.type) { case OS.GDK_KEY_PRESS: case OS.GDK_KEY_RELEASE: state = keyEvent.state; @@ -1294,14 +1299,14 @@ } } } - if (keyEvent == null) { - int [] buffer = new int [1]; - OS.gtk_get_current_event_state (buffer); - state = buffer [0]; + if (keyEvent is null) { + GdkModifierType buffer; + OS.gtk_get_current_event_state (&buffer); + state = buffer; } while (index < chars.length) { Event event = new Event (); - if (keyEvent != null && chars.length <= 1) { + if (keyEvent !is null && chars.length <= 1) { setKeyState (event, keyEvent); } else { setInputState (event, state); @@ -1316,15 +1321,15 @@ * the key by returning null. */ if (isDisposed ()) { - if (ptr != 0) OS.gdk_event_free (ptr); + if (ptr !is null) OS.gdk_event_free (ptr); return null; } if (event.doit) chars [count++] = chars [index]; index++; } - if (ptr != 0) OS.gdk_event_free (ptr); - if (count == 0) return null; - if (index != count) { + if (ptr !is null) OS.gdk_event_free (ptr); + if (count is 0) return null; + if (index !is count) { char [] result = new char [count]; System.arraycopy (chars, 0, result, 0, count); return result; @@ -1356,8 +1361,8 @@ */ public void setData (Object data) { checkWidget(); - if ((state & KEYED_DATA) != 0) { - ((Object []) this.data) [0] = data; + if ((state & KEYED_DATA) !is 0) { + (cast(ArrayWrapperObject) this.data).array[0] = data; } else { this.data = data; } @@ -1387,94 +1392,100 @@ * * @see #getData(String) */ -public void setData (String key, Object value) { +public void setData (char[] key, Object value) { checkWidget(); - if (key == null) error (SWT.ERROR_NULL_ARGUMENT); + if (key is null) error (SWT.ERROR_NULL_ARGUMENT); int index = 1; Object [] table = null; - if ((state & KEYED_DATA) != 0) { - table = (Object []) data; - while (index < table.length) { - if (key.equals (table [index])) break; + if ((state & KEYED_DATA) !is 0) { + auto arr = (cast(ArrayWrapperString2) data).array; + ArrayWrapperString[] strtable; + foreach( str; arr ){ + strtable ~= new ArrayWrapperString( str ); + } + while (index < strtable.length) { + if (key ==/*eq*/ strtable [index].array ) break; index += 2; } + table = cast(Object[])strtable; } - if (value != null) { - if ((state & KEYED_DATA) != 0) { - if (index == table.length) { + if (value !is null) { + if ((state & KEYED_DATA) !is 0) { + if (index is table.length) { Object [] newTable = new Object [table.length + 2]; System.arraycopy (table, 0, newTable, 0, table.length); - data = table = newTable; + table = newTable; + data = new ArrayWrapperObject( table ); } } else { table = new Object [3]; table [0] = data; - data = table; + data = new ArrayWrapperObject( table ); state |= KEYED_DATA; } - table [index] = key; + table [index] = new ArrayWrapperString( key ); table [index + 1] = value; } else { - if ((state & KEYED_DATA) != 0) { - if (index != table.length) { - int length = table.length - 2; - if (length == 1) { + if ((state & KEYED_DATA) !is 0) { + if (index !is table.length) { + int len = table.length - 2; + if (len is 1) { data = table [0]; state &= ~KEYED_DATA; } else { - Object [] newTable = new Object [length]; + Object [] newTable = new Object [len]; System.arraycopy (table, 0, newTable, 0, index); - System.arraycopy (table, index + 2, newTable, index, length - index); - data = newTable; + System.arraycopy (table, index + 2, newTable, index, len - index); + data = new ArrayWrapperObject( newTable ); } } } } } -void setForegroundColor (int /*long*/ handle, GdkColor color) { - int /*long*/ style = OS.gtk_widget_get_modifier_style (handle); +void setForegroundColor (GtkWidget* handle, GdkColor* color) { + auto style = OS.gtk_widget_get_modifier_style (handle); OS.gtk_rc_style_set_fg (style, OS.GTK_STATE_NORMAL, color); OS.gtk_rc_style_set_fg (style, OS.GTK_STATE_ACTIVE, color); OS.gtk_rc_style_set_fg (style, OS.GTK_STATE_PRELIGHT, color); int flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_NORMAL); - flags = (color == null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG; + flags = (color is null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG; OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_NORMAL, flags); flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_ACTIVE); - flags = (color == null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG; + flags = (color is null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG; OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_ACTIVE, flags); flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_PRELIGHT); - flags = (color == null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG; + flags = (color is null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG; OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_PRELIGHT, flags); OS.gtk_rc_style_set_text (style, OS.GTK_STATE_NORMAL, color); OS.gtk_rc_style_set_text (style, OS.GTK_STATE_ACTIVE, color); OS.gtk_rc_style_set_text (style, OS.GTK_STATE_PRELIGHT, color); flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_NORMAL); - flags = (color == null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT; + flags = (color is null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT; OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_NORMAL, flags); flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_PRELIGHT); - flags = (color == null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT; + flags = (color is null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT; OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_PRELIGHT, flags); flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_ACTIVE); - flags = (color == null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT; + flags = (color is null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT; OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_ACTIVE, flags); OS.gtk_widget_modify_style (handle, style); } -boolean setInputState (Event event, int state) { - if ((state & OS.GDK_MOD1_MASK) != 0) event.stateMask |= SWT.ALT; - if ((state & OS.GDK_SHIFT_MASK) != 0) event.stateMask |= SWT.SHIFT; - if ((state & OS.GDK_CONTROL_MASK) != 0) event.stateMask |= SWT.CONTROL; - if ((state & OS.GDK_BUTTON1_MASK) != 0) event.stateMask |= SWT.BUTTON1; - if ((state & OS.GDK_BUTTON2_MASK) != 0) event.stateMask |= SWT.BUTTON2; - if ((state & OS.GDK_BUTTON3_MASK) != 0) event.stateMask |= SWT.BUTTON3; +bool setInputState (Event event, int state) { + if ((state & OS.GDK_MOD1_MASK) !is 0) event.stateMask |= SWT.ALT; + if ((state & OS.GDK_SHIFT_MASK) !is 0) event.stateMask |= SWT.SHIFT; + if ((state & OS.GDK_CONTROL_MASK) !is 0) event.stateMask |= SWT.CONTROL; + if ((state & OS.GDK_BUTTON1_MASK) !is 0) event.stateMask |= SWT.BUTTON1; + if ((state & OS.GDK_BUTTON2_MASK) !is 0) event.stateMask |= SWT.BUTTON2; + if ((state & OS.GDK_BUTTON3_MASK) !is 0) event.stateMask |= SWT.BUTTON3; return true; } -boolean setKeyState (Event event, GdkEventKey keyEvent) { - if (keyEvent.string != 0 && OS.g_utf8_strlen (keyEvent.string, keyEvent.length) > 1) return false; - boolean isNull = false; +bool setKeyState (Event event, GdkEventKey* keyEvent) { + if (keyEvent.str !is null && OS.g_utf8_strlen (keyEvent.str, keyEvent.length) > 1) return false; + bool isNull = false; event.keyCode = Display.translateKey (keyEvent.keyval); switch (keyEvent.keyval) { case OS.GDK_BackSpace: event.character = SWT.BS; break; @@ -1487,24 +1498,26 @@ case OS.GDK_Tab: case OS.GDK_ISO_Left_Tab: event.character = SWT.TAB; break; default: { - if (event.keyCode == 0) { - int [] keyval = new int [1], effective_group= new int [1], level = new int [1], consumed_modifiers = new int [1]; - if (OS.gdk_keymap_translate_keyboard_state(OS.gdk_keymap_get_default (), keyEvent.hardware_keycode, 0, keyEvent.group, keyval, effective_group, level, consumed_modifiers)) { - event.keyCode = OS.gdk_keyval_to_unicode (keyval [0]); + if (event.keyCode is 0) { + uint keyval; + int effective_group, level; + GdkModifierType consumed_modifiers; + if (OS.gdk_keymap_translate_keyboard_state(OS.gdk_keymap_get_default (), keyEvent.hardware_keycode, cast(GdkModifierType)0, keyEvent.group, &keyval, &effective_group, &level, &consumed_modifiers)) { + event.keyCode = OS.gdk_keyval_to_unicode (keyval ); } } int key = keyEvent.keyval; - if ((keyEvent.state & OS.GDK_CONTROL_MASK) != 0 && (0 <= key && key <= 0x7F)) { + if ((keyEvent.state & OS.GDK_CONTROL_MASK) !is 0 && (0 <= key && key <= 0x7F)) { if ('a' <= key && key <= 'z') key -= 'a' - 'A'; if (64 <= key && key <= 95) key -= 64; - event.character = (char) key; - isNull = keyEvent.keyval == '@' && key == 0; + event.character = cast(char) key; + isNull = keyEvent.keyval is '@' && key is 0; } else { - event.character = (char) OS.gdk_keyval_to_unicode (key); + event.character = cast(char) OS.gdk_keyval_to_unicode (key); } } } - if (event.keyCode == 0 && event.character == 0) { + if (event.keyCode is 0 && event.character is 0) { if (!isNull) return false; } return setInputState (event, keyEvent.state); @@ -1531,20 +1544,20 @@ * * @return a string representation of the receiver */ -public String toString () { - String string = "*Disposed*"; +public char[] toString () { + char[] str = "*Disposed*"; if (!isDisposed ()) { - string = "*Wrong Thread*"; - if (isValidThread ()) string = getNameText (); + str = "*Wrong Thread*"; + if (isValidThread ()) str = getNameText (); } - return getName () + " {" + string + "}"; + return getName () ~ " {" ~ str ~ "}"; } -int /*long*/ topHandle () { +GtkWidget* topHandle () { return handle; } -int /*long*/ timerProc (int /*long*/ widget) { +int /*long*/ timerProc (GtkWidget* widget) { return 0; } @@ -1552,12 +1565,12 @@ return 0; } -boolean translateTraversal (int event) { +bool translateTraversal (int event) { return false; } -int /*long*/ windowProc (int /*long*/ handle, int /*long*/ user_data) { - switch ((int)/*64*/user_data) { +int /*long*/ windowProc (GtkWidget* handle, int /*long*/ user_data) { + switch (cast(int)/*64*/user_data) { case ACTIVATE: return gtk_activate (handle); case CHANGED: return gtk_changed (handle); case CLICKED: return gtk_clicked (handle); @@ -1570,24 +1583,24 @@ case POPUP_MENU: return gtk_popup_menu (handle); case PREEDIT_CHANGED: return gtk_preedit_changed (handle); case REALIZE: return gtk_realize (handle); - case SELECT: return gtk_select (handle); + case SELECT: return gtk_select (cast(int)handle); case SHOW: return gtk_show (handle); - case VALUE_CHANGED: return gtk_value_changed (handle); + case VALUE_CHANGED: return gtk_value_changed (cast(int)handle); case UNMAP: return gtk_unmap (handle); case UNREALIZE: return gtk_unrealize (handle); default: return 0; } } -int /*long*/ windowProc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ user_data) { - switch ((int)/*64*/user_data) { +int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ user_data) { + switch (cast(int)/*64*/user_data) { case EXPOSE_EVENT_INVERSE: { - GdkEventExpose gdkEvent = new GdkEventExpose (); - OS.memmove (gdkEvent, arg0, GdkEventExpose.sizeof); - int /*long*/ paintWindow = paintWindow(); - int /*long*/ window = gdkEvent.window; - if (window != paintWindow) return 0; - return (state & OBSCURED) != 0 ? 1 : 0; + GdkEventExpose* gdkEvent = new GdkEventExpose (); + memmove (gdkEvent, cast(void*)arg0, GdkEventExpose.sizeof); + auto paintWindow = paintWindow(); + auto window = gdkEvent.window; + if (window !is paintWindow) return 0; + return (state & OBSCURED) !is 0 ? 1 : 0; } case BUTTON_PRESS_EVENT_INVERSE: case BUTTON_RELEASE_EVENT_INVERSE: @@ -1596,7 +1609,7 @@ } case BUTTON_PRESS_EVENT: return gtk_button_press_event (handle, arg0); case BUTTON_RELEASE_EVENT: return gtk_button_release_event (handle, arg0); - case COMMIT: return gtk_commit (handle, arg0); + case COMMIT: return gtk_commit (cast(int)handle, arg0); case CONFIGURE_EVENT: return gtk_configure_event (handle, arg0); case DELETE_EVENT: return gtk_delete_event (handle, arg0); case ENTER_NOTIFY_EVENT: return gtk_enter_notify_event (handle, arg0); @@ -1606,8 +1619,8 @@ case FOCUS: return gtk_focus (handle, arg0); case FOCUS_IN_EVENT: return gtk_focus_in_event (handle, arg0); case FOCUS_OUT_EVENT: return gtk_focus_out_event (handle, arg0); - case KEY_PRESS_EVENT: return gtk_key_press_event (handle, arg0); - case KEY_RELEASE_EVENT: return gtk_key_release_event (handle, arg0); + case KEY_PRESS_EVENT: return gtk_key_press_event (handle, cast(GdkEventKey*)arg0); + case KEY_RELEASE_EVENT: return gtk_key_release_event (handle, cast(GdkEventKey*)arg0); case INPUT: return gtk_input (handle, arg0); case LEAVE_NOTIFY_EVENT: return gtk_leave_notify_event (handle, arg0); case MAP_EVENT: return gtk_map_event (handle, arg0); @@ -1618,7 +1631,7 @@ case SHOW_HELP: return gtk_show_help (handle, arg0); case SIZE_ALLOCATE: return gtk_size_allocate (handle, arg0); case STYLE_SET: return gtk_style_set (handle, arg0); - case TOGGLED: return gtk_toggled (handle, arg0); + case TOGGLED: return gtk_toggled (cast(int)handle, arg0); case UNMAP_EVENT: return gtk_unmap_event (handle, arg0); case VISIBILITY_NOTIFY_EVENT: return gtk_visibility_notify_event (handle, arg0); case WINDOW_STATE_EVENT: return gtk_window_state_event (handle, arg0); @@ -1626,21 +1639,21 @@ } } -int /*long*/ windowProc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ user_data) { - switch ((int)/*64*/user_data) { +int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ user_data) { + switch (cast(int)/*64*/user_data) { case DELETE_RANGE: return gtk_delete_range (handle, arg0, arg1); case DELETE_TEXT: return gtk_delete_text (handle, arg0, arg1); - case ROW_ACTIVATED: return gtk_row_activated (handle, arg0, arg1); + case ROW_ACTIVATED: return gtk_row_activated (cast(int)handle, arg0, arg1); case SCROLL_CHILD: return gtk_scroll_child (handle, arg0, arg1); case SWITCH_PAGE: return gtk_switch_page (handle, arg0, arg1); - case TEST_COLLAPSE_ROW: return gtk_test_collapse_row (handle, arg0, arg1); - case TEST_EXPAND_ROW: return gtk_test_expand_row(handle, arg0, arg1); + case TEST_COLLAPSE_ROW: return gtk_test_collapse_row (cast(int)handle, arg0, arg1); + case TEST_EXPAND_ROW: return gtk_test_expand_row(cast(int)handle, arg0, arg1); default: return 0; } } -int /*long*/ windowProc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ user_data) { - switch ((int)/*64*/user_data) { +int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ user_data) { + switch (cast(int)/*64*/user_data) { case CHANGE_VALUE: return gtk_change_value (handle, arg0, arg1, arg2); case EXPAND_COLLAPSE_CURSOR_ROW: return gtk_expand_collapse_cursor_row (handle, arg0, arg1, arg2); case INSERT_TEXT: return gtk_insert_text (handle, arg0, arg1, arg2); @@ -1650,4 +1663,3 @@ } } -++/ \ No newline at end of file diff -r ffa3c27c4328 -r 10acbb123580 todo.txt --- a/todo.txt Wed Jan 09 01:08:22 2008 +0100 +++ b/todo.txt Wed Jan 09 02:59:32 2008 +0100 @@ -113,8 +113,8 @@ widgets/Tree widgets/TreeColumn widgets/TreeItem -widgets/TypedListener -widgets/Widget +widgets/TypedListener // OK +widgets/Widget // OK layout/FormLayout layout/FormAttachment