diff options
author | Tim Janik <timj@gtk.org> | 1998-03-29 20:40:10 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 1998-03-29 20:40:10 +0000 |
commit | 2f5621e566bb02fb6e4f3592e95164cb9c50bc22 (patch) | |
tree | 9aa3807e48beb4688f0d726900f0f136cafbc026 /gtk | |
parent | 93e1585614b72c684b4fa302f6ae2e6d5605e02e (diff) | |
download | gdk-pixbuf-2f5621e566bb02fb6e4f3592e95164cb9c50bc22.tar.gz |
Added wrapping capabilities to GtkSpinButton. New function :
Sun Mar 29 22:29:00 1998 Tim Janik <timj@gtk.org>
* gtk/gtkspinbutton.[ch] gtk/testgtk.c (gtk_spin_button_set_wrap):
Added wrapping capabilities to GtkSpinButton. New function :
gtk_spin_button_set_wrap (Lars Hamann and Stefan Jeske).
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkspinbutton.c | 43 | ||||
-rw-r--r-- | gtk/gtkspinbutton.h | 78 | ||||
-rw-r--r-- | gtk/testgtk.c | 6 |
3 files changed, 84 insertions, 43 deletions
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c index 3f014e04b..f26fc22cc 100644 --- a/gtk/gtkspinbutton.c +++ b/gtk/gtkspinbutton.c @@ -162,6 +162,7 @@ gtk_spin_button_init (GtkSpinButton *spin_button) spin_button->timer_calls = 0; spin_button->digits = 0; spin_button->numeric = 0; + spin_button->wrap = 0; } void @@ -759,21 +760,41 @@ gtk_spin_button_spin (GtkSpinButton *spin_button, gfloat step) { gfloat new_value = 0.0; - + g_return_if_fail (spin_button != NULL); g_return_if_fail (GTK_IS_SPIN_BUTTON (spin_button)); if (direction == GTK_ARROW_UP) { - new_value = MIN (spin_button->adjustment->value + step, - spin_button->adjustment->upper); + new_value = spin_button->adjustment->value + step; + if (spin_button->wrap) + { + if (spin_button->adjustment->value == spin_button->adjustment->upper) + new_value = spin_button->adjustment->lower; + else if (new_value > spin_button->adjustment->upper) + new_value = spin_button->adjustment->upper; + } + else + { + new_value = MIN (new_value, spin_button->adjustment->upper); + } } else if (direction == GTK_ARROW_DOWN) { - new_value = MAX (spin_button->adjustment->value - step, - spin_button->adjustment->lower); + new_value = spin_button->adjustment->value - step; + if (spin_button->wrap) + { + if (spin_button->adjustment->value == spin_button->adjustment->lower) + new_value = spin_button->adjustment->upper; + else if (new_value < spin_button->adjustment->lower) + new_value = spin_button->adjustment->lower; + } + else + { + new_value = MAX (new_value, spin_button->adjustment->lower); + } } - + if (new_value != spin_button->adjustment->value) gtk_adjustment_set_value (spin_button->adjustment, new_value); } @@ -1100,3 +1121,13 @@ gtk_spin_button_insert_text (GtkEditable *editable, GTK_EDITABLE_CLASS (parent_class)->insert_text (editable, new_text, new_text_length, position); } + +void +gtk_spin_button_set_wrap (GtkSpinButton *spin_button, + gint wrap) +{ + g_return_if_fail (spin_button != NULL); + g_return_if_fail (GTK_IS_SPIN_BUTTON (spin_button)); + + spin_button->wrap = (wrap != 0); +} diff --git a/gtk/gtkspinbutton.h b/gtk/gtkspinbutton.h index d9be647db..a247adec8 100644 --- a/gtk/gtkspinbutton.h +++ b/gtk/gtkspinbutton.h @@ -11,7 +11,7 @@ * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public @@ -31,40 +31,40 @@ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - - -#define GTK_SPIN_BUTTON(obj) GTK_CHECK_CAST (obj, gtk_spin_button_get_type (), GtkSpinButton) + + +#define GTK_SPIN_BUTTON(obj) GTK_CHECK_CAST (obj, gtk_spin_button_get_type (), GtkSpinButton) #define GTK_SPIN_BUTTON_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_spin_button_get_type (), GtkSpinButtonClass) -#define GTK_IS_SPIN_BUTTON(obj) GTK_CHECK_TYPE (obj, gtk_spin_button_get_type ()) - - +#define GTK_IS_SPIN_BUTTON(obj) GTK_CHECK_TYPE (obj, gtk_spin_button_get_type ()) + + typedef enum { - GTK_UPDATE_ALWAYS = 1 << 0, - GTK_UPDATE_IF_VALID = 1 << 1, + GTK_UPDATE_ALWAYS = 1 << 0, + GTK_UPDATE_IF_VALID = 1 << 1, GTK_UPDATE_SNAP_TO_TICKS = 1 << 2 } GtkSpinButtonUpdatePolicy; - - -typedef struct _GtkSpinButton GtkSpinButton; + + +typedef struct _GtkSpinButton GtkSpinButton; typedef struct _GtkSpinButtonClass GtkSpinButtonClass; struct _GtkSpinButton { GtkEntry entry; - + GtkAdjustment *adjustment; - + GdkWindow *panel; - + guint32 timer; - + gfloat climb_rate; gfloat timer_step; - + guint8 update_policy; - + guint in_child : 2; guint click_child : 2; guint button : 2; @@ -72,6 +72,7 @@ struct _GtkSpinButton guint timer_calls : 3; guint digits : 3; guint numeric : 1; + guint wrap : 1; }; struct _GtkSpinButtonClass @@ -79,42 +80,47 @@ struct _GtkSpinButtonClass GtkEntryClass parent_class; }; -guint gtk_spin_button_get_type (void); +guint gtk_spin_button_get_type (void); -void gtk_spin_button_construct (GtkSpinButton *spin_button, +void gtk_spin_button_construct (GtkSpinButton *spin_button, GtkAdjustment *adjustment, - gfloat climb_rate, - gint digits); + gfloat climb_rate, + gint digits); -GtkWidget* gtk_spin_button_new (GtkAdjustment *adjustment, - gfloat climb_rate, - gint digits); +GtkWidget* gtk_spin_button_new (GtkAdjustment *adjustment, + gfloat climb_rate, + gint digits); -void gtk_spin_button_set_adjustment (GtkSpinButton *spin_button, +void gtk_spin_button_set_adjustment (GtkSpinButton *spin_button, GtkAdjustment *adjustment); -GtkAdjustment* gtk_spin_button_get_adjustment (GtkSpinButton *spin_button); +GtkAdjustment* gtk_spin_button_get_adjustment (GtkSpinButton *spin_button); -void gtk_spin_button_set_digits (GtkSpinButton *spin_button, - gint digits); +void gtk_spin_button_set_digits (GtkSpinButton *spin_button, + gint digits); gfloat gtk_spin_button_get_value_as_float (GtkSpinButton *spin_button); gint gtk_spin_button_get_value_as_int (GtkSpinButton *spin_button); -void gtk_spin_button_set_value (GtkSpinButton *spin_button, - gfloat value); +void gtk_spin_button_set_value (GtkSpinButton *spin_button, + gfloat value); void gtk_spin_button_set_update_policy (GtkSpinButton *spin_button, GtkSpinButtonUpdatePolicy policy); -void gtk_spin_button_set_numeric (GtkSpinButton *spin_button, - gint numeric); +void gtk_spin_button_set_numeric (GtkSpinButton *spin_button, + gint numeric); void gtk_spin_button_spin (GtkSpinButton *spin_button, - guint direction, - gfloat step); - + guint direction, + gfloat step); + +void gtk_spin_button_set_wrap (GtkSpinButton *spin_button, + gint wrap); + + + #ifdef __cplusplus } diff --git a/gtk/testgtk.c b/gtk/testgtk.c index af57b6514..e96016a9f 100644 --- a/gtk/testgtk.c +++ b/gtk/testgtk.c @@ -2346,6 +2346,7 @@ create_spins () adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0, 5.0, 0.0); spinner = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE); gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0); vbox2 = gtk_vbox_new (FALSE, 0); @@ -2358,6 +2359,7 @@ create_spins () adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0, 5.0, 0.0); spinner = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE); gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0); vbox2 = gtk_vbox_new (FALSE, 0); @@ -2370,6 +2372,7 @@ create_spins () adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0, 1.0, 100.0, 0.0); spinner = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE); gtk_widget_set_usize (spinner, 55, 0); gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0); @@ -2393,6 +2396,7 @@ create_spins () adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0, 0.5, 100.0, 0.0); spinner1 = gtk_spin_button_new (adj, 1.0, 2); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE); gtk_widget_set_usize (spinner1, 100, 0); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner1), GTK_UPDATE_ALWAYS); @@ -2407,6 +2411,7 @@ create_spins () adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0); spinner2 = gtk_spin_button_new (adj, 0.0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (change_digits), (gpointer) spinner2); @@ -2467,7 +2472,6 @@ create_spins () gtk_widget_destroy (window); } - /* * Cursors */ |