summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>1998-03-29 20:40:10 +0000
committerTim Janik <timj@src.gnome.org>1998-03-29 20:40:10 +0000
commit2f5621e566bb02fb6e4f3592e95164cb9c50bc22 (patch)
tree9aa3807e48beb4688f0d726900f0f136cafbc026 /gtk
parent93e1585614b72c684b4fa302f6ae2e6d5605e02e (diff)
downloadgdk-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.c43
-rw-r--r--gtk/gtkspinbutton.h78
-rw-r--r--gtk/testgtk.c6
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
*/