1 /* GTK - The GIMP Toolkit 2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald 3 * 4 * GtkSpinButton widget for GTK+ 5 * Copyright (C) 1998 Lars Hamann and Stefan Jeske 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 /* 22 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS 23 * file for a list of people on the GTK+ Team. See the ChangeLog 24 * files for a list of changes. These files are distributed with 25 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 26 */ 27 28 #ifndef __GTK_SPIN_BUTTON_H__ 29 #define __GTK_SPIN_BUTTON_H__ 30 31 32 #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) 33 #error "Only <gtk/gtk.h> can be included directly." 34 #endif 35 36 #include <gtk/gtkentry.h> 37 38 39 G_BEGIN_DECLS 40 41 #define GTK_TYPE_SPIN_BUTTON (gtk_spin_button_get_type ()) 42 #define GTK_SPIN_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SPIN_BUTTON, GtkSpinButton)) 43 #define GTK_SPIN_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SPIN_BUTTON, GtkSpinButtonClass)) 44 #define GTK_IS_SPIN_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SPIN_BUTTON)) 45 #define GTK_IS_SPIN_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SPIN_BUTTON)) 46 #define GTK_SPIN_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SPIN_BUTTON, GtkSpinButtonClass)) 47 48 /** 49 * GTK_INPUT_ERROR: 50 * 51 * Constant to return from a signal handler for the #GtkSpinButton::input 52 * signal in case of conversion failure. 53 */ 54 #define GTK_INPUT_ERROR -1 55 56 /** 57 * GtkSpinButtonUpdatePolicy: 58 * @GTK_UPDATE_ALWAYS: When refreshing your #GtkSpinButton, the value is 59 * always displayed 60 * @GTK_UPDATE_IF_VALID: When refreshing your #GtkSpinButton, the value is 61 * only displayed if it is valid within the bounds of the spin button's 62 * adjustment 63 * 64 * The spin button update policy determines whether the spin button displays 65 * values even if they are outside the bounds of its adjustment. 66 * See gtk_spin_button_set_update_policy(). 67 */ 68 typedef enum 69 { 70 GTK_UPDATE_ALWAYS, 71 GTK_UPDATE_IF_VALID 72 } GtkSpinButtonUpdatePolicy; 73 74 /** 75 * GtkSpinType: 76 * @GTK_SPIN_STEP_FORWARD: Increment by the adjustments step increment. 77 * @GTK_SPIN_STEP_BACKWARD: Decrement by the adjustments step increment. 78 * @GTK_SPIN_PAGE_FORWARD: Increment by the adjustments page increment. 79 * @GTK_SPIN_PAGE_BACKWARD: Decrement by the adjustments page increment. 80 * @GTK_SPIN_HOME: Go to the adjustments lower bound. 81 * @GTK_SPIN_END: Go to the adjustments upper bound. 82 * @GTK_SPIN_USER_DEFINED: Change by a specified amount. 83 * 84 * The values of the GtkSpinType enumeration are used to specify the 85 * change to make in gtk_spin_button_spin(). 86 */ 87 typedef enum 88 { 89 GTK_SPIN_STEP_FORWARD, 90 GTK_SPIN_STEP_BACKWARD, 91 GTK_SPIN_PAGE_FORWARD, 92 GTK_SPIN_PAGE_BACKWARD, 93 GTK_SPIN_HOME, 94 GTK_SPIN_END, 95 GTK_SPIN_USER_DEFINED 96 } GtkSpinType; 97 98 99 typedef struct _GtkSpinButton GtkSpinButton; 100 typedef struct _GtkSpinButtonPrivate GtkSpinButtonPrivate; 101 typedef struct _GtkSpinButtonClass GtkSpinButtonClass; 102 103 /** 104 * GtkSpinButton: 105 * 106 * The #GtkSpinButton-struct contains only private data and should 107 * not be directly modified. 108 */ 109 struct _GtkSpinButton 110 { 111 GtkEntry entry; 112 113 /*< private >*/ 114 GtkSpinButtonPrivate *priv; 115 }; 116 117 struct _GtkSpinButtonClass 118 { 119 GtkEntryClass parent_class; 120 121 gint (*input) (GtkSpinButton *spin_button, 122 gdouble *new_value); 123 gint (*output) (GtkSpinButton *spin_button); 124 void (*value_changed) (GtkSpinButton *spin_button); 125 126 /* Action signals for keybindings, do not connect to these */ 127 void (*change_value) (GtkSpinButton *spin_button, 128 GtkScrollType scroll); 129 130 void (*wrapped) (GtkSpinButton *spin_button); 131 132 /* Padding for future expansion */ 133 void (*_gtk_reserved1) (void); 134 void (*_gtk_reserved2) (void); 135 void (*_gtk_reserved3) (void); 136 void (*_gtk_reserved4) (void); 137 }; 138 139 140 GDK_AVAILABLE_IN_ALL 141 GType gtk_spin_button_get_type (void) G_GNUC_CONST; 142 143 GDK_AVAILABLE_IN_ALL 144 void gtk_spin_button_configure (GtkSpinButton *spin_button, 145 GtkAdjustment *adjustment, 146 gdouble climb_rate, 147 guint digits); 148 149 GDK_AVAILABLE_IN_ALL 150 GtkWidget* gtk_spin_button_new (GtkAdjustment *adjustment, 151 gdouble climb_rate, 152 guint digits); 153 154 GDK_AVAILABLE_IN_ALL 155 GtkWidget* gtk_spin_button_new_with_range (gdouble min, 156 gdouble max, 157 gdouble step); 158 159 GDK_AVAILABLE_IN_ALL 160 void gtk_spin_button_set_adjustment (GtkSpinButton *spin_button, 161 GtkAdjustment *adjustment); 162 163 GDK_AVAILABLE_IN_ALL 164 GtkAdjustment* gtk_spin_button_get_adjustment (GtkSpinButton *spin_button); 165 166 GDK_AVAILABLE_IN_ALL 167 void gtk_spin_button_set_digits (GtkSpinButton *spin_button, 168 guint digits); 169 GDK_AVAILABLE_IN_ALL 170 guint gtk_spin_button_get_digits (GtkSpinButton *spin_button); 171 172 GDK_AVAILABLE_IN_ALL 173 void gtk_spin_button_set_increments (GtkSpinButton *spin_button, 174 gdouble step, 175 gdouble page); 176 GDK_AVAILABLE_IN_ALL 177 void gtk_spin_button_get_increments (GtkSpinButton *spin_button, 178 gdouble *step, 179 gdouble *page); 180 181 GDK_AVAILABLE_IN_ALL 182 void gtk_spin_button_set_range (GtkSpinButton *spin_button, 183 gdouble min, 184 gdouble max); 185 GDK_AVAILABLE_IN_ALL 186 void gtk_spin_button_get_range (GtkSpinButton *spin_button, 187 gdouble *min, 188 gdouble *max); 189 190 GDK_AVAILABLE_IN_ALL 191 gdouble gtk_spin_button_get_value (GtkSpinButton *spin_button); 192 193 GDK_AVAILABLE_IN_ALL 194 gint gtk_spin_button_get_value_as_int (GtkSpinButton *spin_button); 195 196 GDK_AVAILABLE_IN_ALL 197 void gtk_spin_button_set_value (GtkSpinButton *spin_button, 198 gdouble value); 199 200 GDK_AVAILABLE_IN_ALL 201 void gtk_spin_button_set_update_policy (GtkSpinButton *spin_button, 202 GtkSpinButtonUpdatePolicy policy); 203 GDK_AVAILABLE_IN_ALL 204 GtkSpinButtonUpdatePolicy gtk_spin_button_get_update_policy (GtkSpinButton *spin_button); 205 206 GDK_AVAILABLE_IN_ALL 207 void gtk_spin_button_set_numeric (GtkSpinButton *spin_button, 208 gboolean numeric); 209 GDK_AVAILABLE_IN_ALL 210 gboolean gtk_spin_button_get_numeric (GtkSpinButton *spin_button); 211 212 GDK_AVAILABLE_IN_ALL 213 void gtk_spin_button_spin (GtkSpinButton *spin_button, 214 GtkSpinType direction, 215 gdouble increment); 216 217 GDK_AVAILABLE_IN_ALL 218 void gtk_spin_button_set_wrap (GtkSpinButton *spin_button, 219 gboolean wrap); 220 GDK_AVAILABLE_IN_ALL 221 gboolean gtk_spin_button_get_wrap (GtkSpinButton *spin_button); 222 223 GDK_AVAILABLE_IN_ALL 224 void gtk_spin_button_set_snap_to_ticks (GtkSpinButton *spin_button, 225 gboolean snap_to_ticks); 226 GDK_AVAILABLE_IN_ALL 227 gboolean gtk_spin_button_get_snap_to_ticks (GtkSpinButton *spin_button); 228 GDK_AVAILABLE_IN_ALL 229 void gtk_spin_button_update (GtkSpinButton *spin_button); 230 231 /* private */ 232 void _gtk_spin_button_get_panels (GtkSpinButton *spin_button, 233 GdkWindow **down_panel, 234 GdkWindow **up_panel); 235 236 G_END_DECLS 237 238 #endif /* __GTK_SPIN_BUTTON_H__ */ 239