diff options
author | Anatoly Spektor <aspektor@redhat.com> | 2012-12-04 12:43:50 -0500 |
---|---|---|
committer | Anatoly Spektor <aspektor@redhat.com> | 2012-12-04 12:43:50 -0500 |
commit | 6d99e84d2b1da618b81bbdb39af11e5759decec6 (patch) | |
tree | 58be3efa72f725b8d8fdb0645ae7e65892b53d74 | |
parent | 59a46137c56ade530b663616c915c84de7040195 (diff) | |
download | eclipse.platform.swt-6d99e84d2b1da618b81bbdb39af11e5759decec6.tar.gz eclipse.platform.swt-6d99e84d2b1da618b81bbdb39af11e5759decec6.tar.xz eclipse.platform.swt-6d99e84d2b1da618b81bbdb39af11e5759decec6.zip |
SWT.ARROW_UP and SWT.ARROW_DOWN are recognized with SWT.TIME
In this iteration I have rewritten buttonClicked function, arrows work
fine with SWT.TIME, but does not work with SWT.DATE yet
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java | 66 |
1 files changed, 37 insertions, 29 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java index a835a67bea..b9536cdc83 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java @@ -768,7 +768,7 @@ void hookEvents () { OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT_INVERSE], true); OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_RELEASE_EVENT], 0, display.closures [BUTTON_RELEASE_EVENT_INVERSE], true); OS.g_signal_connect_closure_by_id (handle, display.signalIds [MOTION_NOTIFY_EVENT], 0, display.closures [MOTION_NOTIFY_EVENT_INVERSE], true); -// OS.g_signal_connect_closure (handle, OS.input, display.closures [INPUT], false); +// OS.g_signal_connect_closure (handle, OS.input, display.closures [INPUT], true); OS.g_signal_connect_closure (handle, OS.output, display.closures [OUTPUT], false); /* Connect the event_after signal for both key and mouse */ if (handle != focusHandle ()) { @@ -1690,32 +1690,43 @@ void register () { * This method compares two values and determines if Up or down arrow was called. */ long /*int*/ gtk_output (long /*int*/ widget) { - int change = buttonClick(widget); - switch (change) { + + int arrowType = getArrow(widget); + switch (arrowType) { case SWT.ARROW_UP: - // Call increment function -// commitCurrentSpinField(); -// incrementSpinField(+1); - System.out.println("+"); + commitCurrentSpinField(); + incrementSpinField(+1); break; case SWT.ARROW_DOWN: - // Call decrement function -// commitCurrentSpinField(); -// incrementSpinField(-1); - System.out.println("+"); + commitCurrentSpinField(); + incrementSpinField(-1); break; } return 1; } -int buttonClick (long /*int*/ widget) { - double new_value = OS.gtk_adjustment_get_value(OS.gtk_spin_button_get_adjustment(widget)); - int change = new_value > adj_value ? SWT.ARROW_UP : SWT.ARROW_DOWN; - if (adj_value != new_value) { - adj_value = OS.gtk_adjustment_get_value(OS.gtk_spin_button_get_adjustment(widget)); - return change; - } - return 0; +int getArrow (long /*int*/ widget) { + + int adj_value = (int) OS.gtk_adjustment_get_value(OS.gtk_spin_button_get_adjustment(handle)); + int new_value = 0; + if ((style & SWT.DATE) != 0) { + new_value = day; + } else if ((style & SWT.TIME) != 0) { + // as getHours() has 24h format but spinner 12h format, new_value needs to be converted to 12h format + if (getHours() > 12 ){ + new_value = getHours() - 12; + } else { + new_value = getHours(); + } + } + // as getHours() has 24h format but spinner 12h format, new_value needs to be converted to 12h format + if (new_value == 0){ + new_value = 12; + } + if ( adj_value == new_value) + return 0; + + return adj_value > new_value ? SWT.ARROW_UP : SWT.ARROW_DOWN; } /** @@ -1725,8 +1736,6 @@ void createSpinHandle () { long /*int*/ adjustment = 0; if ((style & SWT.TIME) != 0){ adjustment = OS.gtk_adjustment_new (10, 0, 60, 1, 10, 0); - } else { - adjustment = OS.gtk_adjustment_new (day, 1, 31, 1, 0, characterCount); } handle = OS.gtk_spin_button_new(adjustment, 1, 0); OS.gtk_spin_button_set_numeric (handle, false); @@ -1858,8 +1867,6 @@ Point getSelection () { start[0] = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, start[0]); end[0] = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, end[0]); selection = new Point (start [0], end [0]); -// selection.x = untranslateOffset (selection.x); -// selection.y = untranslateOffset (selection.y); return selection; } @@ -1977,22 +1984,23 @@ void setSpinTextField(int fieldName, int value, boolean commit, boolean adjust) long /*int*/ gtk_button_press_event (long /*int*/ widget, long /*int*/ event) { GdkEventButton gdkEvent = new GdkEventButton (); OS.memmove (gdkEvent, event, GdkEventButton.sizeof); - onSpinTextMouseClick(gdkEvent, widget); - return 1; + if (gdkEvent.type == OS.GDK_BUTTON_PRESS && gdkEvent.button == 1) { + onSpinTextMouseClick(gdkEvent); + return gtk_button_press_event(widget, event, false); + } + return super.gtk_button_press_event (widget, event); } -int onSpinTextMouseClick(GdkEventButton event, long /*int*/ widget) { - if (event.button != 1) return 0; +void onSpinTextMouseClick(GdkEventButton event) { + if (event.button != 1) return; Point sel = getSelection(); for (int i = 0; i < fieldCount; i++) { - System.out.println(sel.x); if (sel.x >= fieldIndices[i].x && sel.x <= fieldIndices[i].y) { currentField = i; break; } } selectSpinField(currentField); - return 1; } |