changeset 45:2618d7245bce

Scrollbar
author Frank Benoit <benoit@tionex.de>
date Fri, 11 Jan 2008 06:46:36 +0100
parents dfcb4aee42d4
children 8015c460f713
files dwt/widgets/ScrollBar.d
diffstat 1 files changed, 91 insertions(+), 126 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/widgets/ScrollBar.d	Fri Jan 11 06:21:10 2008 +0100
+++ b/dwt/widgets/ScrollBar.d	Fri Jan 11 06:46:36 2008 +0100
@@ -12,18 +12,17 @@
 
 import dwt.widgets.Control;
 import dwt.widgets.Scrollable;
-import dwt.internal.c.gtk;
+import dwt.SWT;
+import dwt.graphics.Point;
+import dwt.internal.gtk.OS;
+import dwt.events.SelectionListener;
+import dwt.events.SelectionEvent;
+import dwt.widgets.Scrollable;
+import dwt.widgets.Widget;
+import dwt.widgets.Event;
+import dwt.widgets.TypedListener;
 
-class ScrollBar : Control {
-    GtkAdjustment* adjustmentHandle;
-    Scrollable parent;
-}
-
-/+
-import dwt.SWT;
-import dwt.internal.gtk.*;
-import dwt.graphics.*;
-import dwt.events.*;
+import Math = tango.math.Math;
 
 /**
  * Instances of this class are selectable user interface
@@ -88,19 +87,19 @@
  * @see Scrollable#getHorizontalBar
  * @see Scrollable#getVerticalBar
  */
-public class ScrollBar extends Widget {
+public class ScrollBar : Widget {
 	Scrollable parent;
-	int /*long*/ adjustmentHandle;
+	GtkAdjustment* adjustmentHandle;
 	int detail;
-	boolean dragSent;
+	bool dragSent;
 
-ScrollBar () {
+this () {
 }
 
 /**
 * Creates a new instance of the widget.
 */
-ScrollBar (Scrollable parent, int style) {
+this (Scrollable parent, int style) {
 	super (parent, checkStyle (style));
 	this.parent = parent;
 	createWidget (0);
@@ -140,7 +139,7 @@
  */
 public void addSelectionListener (SelectionListener 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.Selection,typedListener);
 	addListener (SWT.DefaultSelection,typedListener);
@@ -152,7 +151,7 @@
 
 void deregister () {
 	super.deregister ();
-	if (adjustmentHandle != 0) display.removeWidget (adjustmentHandle);
+	if (adjustmentHandle !is null) display.removeWidget (cast(GtkWidget*)adjustmentHandle);
 }
 
 /**
@@ -170,9 +169,9 @@
  *
  * @see #isEnabled
  */
-public boolean getEnabled () {
+public bool getEnabled () {
 	checkWidget ();
-	if (handle != 0) return OS.GTK_WIDGET_SENSITIVE (handle);
+	if (handle !is null) return OS.GTK_WIDGET_SENSITIVE (handle);
 	return true;
 }
 
@@ -190,9 +189,7 @@
  */
 public int getIncrement () {
 	checkWidget ();
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	return (int) adjustment.step_increment;
+	return cast(int)adjustmentHandle.step_increment;
 }
 
 /**
@@ -207,9 +204,7 @@
  */
 public int getMaximum () {
 	checkWidget ();
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	return (int) adjustment.upper;
+	return cast(int)adjustmentHandle.upper;
 }
 
 /**
@@ -224,9 +219,7 @@
  */
 public int getMinimum () {
 	checkWidget ();
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	return (int) adjustment.lower;
+	return cast(int)adjustmentHandle.lower;
 }
 
 /**
@@ -243,9 +236,7 @@
  */
 public int getPageIncrement () {
 	checkWidget ();
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	return (int) adjustment.page_increment;
+	return cast(int)adjustmentHandle.page_increment;
 }
 
 /**
@@ -275,9 +266,7 @@
  */
 public int getSelection () {
 	checkWidget ();
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	return (int) adjustment.value;
+	return cast(int)adjustmentHandle.value;
 }
 
 /**
@@ -295,8 +284,8 @@
  */
 public Point getSize () {
 	checkWidget ();
-	if (handle == 0) return new Point (0,0);
-	GtkRequisition requisition = new GtkRequisition ();
+	if (handle is null) return new Point (0,0);
+	GtkRequisition* requisition = new GtkRequisition ();
 	OS.gtk_widget_size_request (handle, requisition);
 	return new Point (requisition.width, requisition.height);
 }
@@ -316,9 +305,7 @@
  */
 public int getThumb () {
 	checkWidget ();
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	return (int) adjustment.page_size;
+	return cast(int)adjustmentHandle.page_size;
 }
 
 /**
@@ -338,34 +325,34 @@
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
  * </ul>
  */
-public boolean getVisible () {
+public bool getVisible () {
 	checkWidget ();
-	int /*long*/ scrolledHandle = parent.scrolledHandle;
-	int [] hsp = new int [1], vsp = new int [1];
-	OS.gtk_scrolled_window_get_policy (scrolledHandle, hsp, vsp);
-	if ((style & SWT.HORIZONTAL) != 0) {
-		return hsp [0] != OS.GTK_POLICY_NEVER;
+	auto scrolledHandle = parent.scrolledHandle;
+	int hsp, vsp;
+	OS.gtk_scrolled_window_get_policy (cast(GtkScrolledWindow*)scrolledHandle, &hsp, &vsp);
+	if ((style & SWT.HORIZONTAL) !is 0) {
+		return hsp !is OS.GTK_POLICY_NEVER;
 	} else {
-		return vsp [0] != OS.GTK_POLICY_NEVER;
+		return vsp !is OS.GTK_POLICY_NEVER;
 	}
 }
 
-int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ eventPtr) {
-	int /*long*/ result = super.gtk_button_press_event (widget, eventPtr);
-	if (result != 0) return result;
+override int /*long*/ gtk_button_press_event (GtkWidget* widget, GdkEventButton* eventPtr) {
+	auto result = super.gtk_button_press_event (widget, eventPtr);
+	if (result !is 0) return result;
 	detail = OS.GTK_SCROLL_NONE;
 	dragSent = false;
 	return result;
 }
 
-int /*long*/ gtk_change_value (int /*long*/ widget, int /*long*/ scroll, int /*long*/ value1, int /*long*/ value2) {
-	detail = (int)/*64*/scroll;
+override int /*long*/ gtk_change_value (GtkWidget* widget, int /*long*/ scroll, int /*long*/ value1, int /*long*/ value2) {
+	detail = scroll;
 	return 0;
 }
 
-int /*long*/ gtk_value_changed (int /*long*/ adjustment) {
+override int /*long*/ gtk_value_changed (int /*long*/ adjustment) {
 	Event event = new Event ();
-	dragSent = detail == OS.GTK_SCROLL_JUMP;
+	dragSent = detail is OS.GTK_SCROLL_JUMP;
 	switch (detail) {
 		case OS.GTK_SCROLL_NONE:			event.detail = SWT.NONE; break;
 		case OS.GTK_SCROLL_JUMP:			event.detail = SWT.DRAG; break;
@@ -391,14 +378,11 @@
 	return 0;
 }
 
-int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ gdkEvent) {
-	GdkEvent gtkEvent = new GdkEvent ();
-	OS.memmove (gtkEvent, gdkEvent, GdkEvent.sizeof);
-	switch (gtkEvent.type) {
+override int /*long*/ gtk_event_after (GtkWidget* widget, GdkEvent* gdkEvent) {
+	switch (gdkEvent.type) {
 		case OS.GDK_BUTTON_RELEASE: {
-			GdkEventButton gdkEventButton = new GdkEventButton ();
-			OS.memmove (gdkEventButton, gdkEvent, GdkEventButton.sizeof);
-			if (gdkEventButton.button == 1 && detail == SWT.DRAG) {
+			GdkEventButton* gdkEventButton = cast(GdkEventButton*)gdkEvent;
+			if (gdkEventButton.button is 1 && detail is SWT.DRAG) {
 				if (!dragSent) {
 					Event event = new Event ();
 					event.detail = SWT.DRAG;
@@ -416,10 +400,10 @@
 
 void hookEvents () {
 	super.hookEvents ();
-	if (OS.GTK_VERSION >= OS.VERSION (2, 6, 0)) {
-		OS.g_signal_connect_closure (handle, OS.change_value, display.closures [CHANGE_VALUE], false);
+	if (OS.GTK_VERSION >= OS.buildVERSION (2, 6, 0)) {
+		OS.g_signal_connect_closure (handle, OS.change_value.ptr, display.closures [CHANGE_VALUE], false);
 	}
-	OS.g_signal_connect_closure (adjustmentHandle, OS.value_changed, display.closures [VALUE_CHANGED], false);
+	OS.g_signal_connect_closure (adjustmentHandle, OS.value_changed.ptr, display.closures [VALUE_CHANGED], false);
 	OS.g_signal_connect_closure_by_id (handle, display.signalIds [EVENT_AFTER], 0, display.closures [EVENT_AFTER], false);
 	OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false);
 }
@@ -439,7 +423,7 @@
  *
  * @see #getEnabled
  */
-public boolean isEnabled () {
+public bool isEnabled () {
 	checkWidget ();
 	return getEnabled () && getParent ().getEnabled ();
 }
@@ -458,20 +442,20 @@
  *
  * @see #getVisible
  */
-public boolean isVisible () {
+public bool isVisible () {
 	checkWidget ();
 	return getVisible () && getParent ().isVisible ();
 }
 
 void register () {
 	super.register ();
-	if (adjustmentHandle != 0) display.addWidget (adjustmentHandle, this);
+	if (adjustmentHandle !is null) display.addWidget (cast(GtkWidget*)adjustmentHandle, this);
 }
 
 void releaseParent () {
 	super.releaseParent ();
-	if (parent.horizontalBar == this) parent.horizontalBar = null;
-	if (parent.verticalBar == this) parent.verticalBar = null;
+	if (parent.horizontalBar is this) parent.horizontalBar = null;
+	if (parent.verticalBar is this) parent.verticalBar = null;
 }
 
 void releaseWidget () {
@@ -498,8 +482,8 @@
  */
 public void removeSelectionListener (SelectionListener 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.Selection, listener);
 	eventTable.unhook (SWT.DefaultSelection,listener);
 }
@@ -517,9 +501,9 @@
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
  * </ul>
  */
-public void setEnabled (boolean enabled) {
+public void setEnabled (bool enabled) {
 	checkWidget ();
-	if (handle != 0) OS.gtk_widget_set_sensitive (handle, enabled);
+	if (handle !is null) OS.gtk_widget_set_sensitive (handle, enabled);
 }
 
 /**
@@ -538,13 +522,10 @@
 public void setIncrement (int value) {
 	checkWidget ();
 	if (value < 1) return;
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	adjustment.step_increment = (float) value;
-	OS.memmove (adjustmentHandle, adjustment);
-	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	adjustmentHandle.step_increment = cast(float) value;
+	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 	OS.gtk_adjustment_changed (adjustmentHandle);
-	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 }
 
 /**
@@ -562,17 +543,14 @@
  */
 public void setMaximum (int value) {
 	checkWidget ();
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	int minimum = (int) adjustment.lower;
+	int minimum = cast(int)adjustmentHandle.lower;
 	if (value <= minimum) return;
-	adjustment.upper = value;
-	adjustment.page_size = Math.min ((int)adjustment.page_size, value - minimum);
-	adjustment.value = Math.min ((int)adjustment.value, (int)(value - adjustment.page_size));
-	OS.memmove (adjustmentHandle, adjustment);
-	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	adjustmentHandle.upper = value;
+	adjustmentHandle.page_size = Math.min (adjustmentHandle.page_size, value - minimum);
+	adjustmentHandle.value = Math.min (adjustmentHandle.value, (value - adjustmentHandle.page_size));
+	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 	OS.gtk_adjustment_changed (adjustmentHandle);
-	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 }
 
 /**
@@ -591,17 +569,14 @@
 public void setMinimum (int value) {
 	checkWidget ();
 	if (value < 0) return;
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	int maximum = (int) adjustment.upper;
+	int maximum = cast(int)adjustmentHandle.upper;
 	if (value >= maximum) return;
-	adjustment.lower = value;
-	adjustment.page_size = Math.min ((int)adjustment.page_size, maximum - value);
-	adjustment.value = Math.max ((int)adjustment.value, value);
-	OS.memmove (adjustmentHandle, adjustment);
-	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	adjustmentHandle.lower = value;
+	adjustmentHandle.page_size = Math.min (adjustmentHandle.page_size, maximum - value);
+	adjustmentHandle.value = Math.max (adjustmentHandle.value, value);
+	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 	OS.gtk_adjustment_changed (adjustmentHandle);
-	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 }
 
 /**
@@ -620,13 +595,10 @@
 public void setPageIncrement (int value) {
 	checkWidget ();
 	if (value < 1) return;
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	adjustment.page_increment = (float) value;
-	OS.memmove (adjustmentHandle, adjustment);
-	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	adjustmentHandle.page_increment = cast(float) value;
+	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 	OS.gtk_adjustment_changed (adjustmentHandle);
-	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 }
 
 /**
@@ -644,9 +616,9 @@
 public void setSelection (int value) {
 	checkWidget ();
 	value = Math.min (value, getMaximum() - getThumb());
-	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 	OS.gtk_adjustment_set_value (adjustmentHandle, value);
-	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 }
 
 /**
@@ -666,15 +638,12 @@
 public void setThumb (int value) {
 	checkWidget ();
 	if (value < 1) return;
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	value = (int) Math.min (value, (int)(adjustment.upper - adjustment.lower));
-	adjustment.page_size = (double) value;
-	adjustment.value = Math.min ((int)adjustment.value, (int)(adjustment.upper - value));
-	OS.memmove (adjustmentHandle, adjustment);
-	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	value = Math.min (value, cast(int)(adjustmentHandle.upper - adjustmentHandle.lower));
+	adjustmentHandle.page_size = cast(double) value;
+	adjustmentHandle.value = Math.min (adjustmentHandle.value, (adjustmentHandle.upper - value));
+	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 	OS.gtk_adjustment_changed (adjustmentHandle);
-	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 }
 
 /**
@@ -706,19 +675,16 @@
 	if (increment < 1) return;
 	if (pageIncrement < 1) return;
 	thumb = Math.min (thumb, maximum - minimum);
-	GtkAdjustment adjustment = new GtkAdjustment ();
-	OS.memmove (adjustment, adjustmentHandle);
-	adjustment.lower = minimum;
-	adjustment.upper = maximum;
-	adjustment.step_increment = increment;
-	adjustment.page_increment = pageIncrement;
-	adjustment.page_size = thumb;
-	adjustment.value = Math.min (Math.max (selection, minimum), maximum - thumb);
-	OS.memmove (adjustmentHandle, adjustment);
-	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	adjustmentHandle.lower = minimum;
+	adjustmentHandle.upper = maximum;
+	adjustmentHandle.step_increment = increment;
+	adjustmentHandle.page_increment = pageIncrement;
+	adjustmentHandle.page_size = thumb;
+	adjustmentHandle.value = Math.min (Math.max (selection, minimum), maximum - thumb);
+	OS.g_signal_handlers_block_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 	OS.gtk_adjustment_changed (adjustmentHandle);
 	OS.gtk_adjustment_value_changed (adjustmentHandle);
-	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
+	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)VALUE_CHANGED);
 }
 
 /**
@@ -737,10 +703,9 @@
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
  * </ul>
  */
-public void setVisible (boolean visible) {
+public void setVisible (bool visible) {
 	checkWidget ();
 	parent.setScrollBarVisible (this, visible);
 }
 
 }
-+/
\ No newline at end of file