2 * This file is part of hildon-libs
4 * Copyright (C) 2005 Nokia Corporation.
6 * Contact: Luc Pionchon <luc.pionchon@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; either version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26 * @file hildon-number-editor.c
28 * This file contains the implementation of Hildon Number Editor
32 #include <gdk/gdkkeysyms.h>
35 #include <pango/pango.h>
41 #include "hildon-number-editor.h"
42 #include "hildon-marshalers.h"
43 #include <hildon-widgets/gtk-infoprint.h>
44 #include "hildon-composite-widget.h"
45 #include <hildon-widgets/hildon-input-mode-hint.h>
52 #define _(String) dgettext(PACKAGE, String)
54 /*Pixel spec defines*/
55 #define SPACE_BORDER 6
56 #define NUMBER_EDITOR_HEIGHT 30
58 #define BUTTON_HEIGHT 30
59 #define BUTTON_WIDTH 30
61 #define HILDON_NUMBER_EDITOR_GET_PRIVATE(obj) \
62 (G_TYPE_INSTANCE_GET_PRIVATE ((obj), HILDON_TYPE_NUMBER_EDITOR, \
63 HildonNumberEditorPrivate));
65 typedef struct _HildonNumberEditorPrivate HildonNumberEditorPrivate;
68 hildon_number_editor_class_init (HildonNumberEditorClass *editor_class);
71 hildon_number_editor_init (HildonNumberEditor *editor);
74 hildon_number_editor_entry_focusout (GtkWidget *widget, GdkEventFocus *event,
78 hildon_number_editor_entry_changed (GtkWidget *widget, gpointer data);
81 hildon_number_editor_size_request (GtkWidget *widget,
82 GtkRequisition *requisition);
85 set_widget_allocation (GtkWidget *widget, GtkAllocation *alloc,
86 GtkAllocation *allocation);
89 hildon_number_editor_size_allocate (GtkWidget *widget,
90 GtkAllocation *allocation);
93 hildon_number_editor_entry_keypress (GtkWidget *widget, GdkEventKey *event,
97 hildon_number_editor_button_pressed (GtkWidget *widget, GdkEventButton *event,
101 hildon_number_editor_entry_button_released (GtkWidget *widget,
102 GdkEventButton *event,
105 hildon_number_editor_button_released (GtkWidget *widget,
107 HildonNumberEditor *editor);
109 do_mouse_timeout (HildonNumberEditor *editor);
112 change_numbers (HildonNumberEditor *editor, gint type, gint cursor_pos);
115 integer_to_string (gint value);
118 hildon_number_editor_forall (GtkContainer *container, gboolean include_internals,
119 GtkCallback callback, gpointer callback_data);
122 hildon_number_editor_destroy (GtkObject *self);
125 hildon_number_editor_start_timer (HildonNumberEditor *editor);
128 hildon_number_editor_finalize (GObject *self);
131 hildon_number_editor_mnemonic_activate( GtkWidget *widget,
132 gboolean group_cycle );
134 hildon_number_editor_error_handler(HildonNumberEditor *editor,
135 HildonNumberEditorErrorType type);
144 static GtkContainerClass *parent_class;
146 static guint HildonNumberEditor_signal[LAST_SIGNAL] = {0};
148 struct _HildonNumberEditorPrivate
150 GtkWidget *num_entry;
158 gint button_event_id;
164 GType hildon_number_editor_get_type(void)
166 static GType editor_type = 0;
170 static const GTypeInfo editor_info =
172 sizeof(HildonNumberEditorClass),
173 NULL, /* base_init */
174 NULL, /* base_finalize */
175 (GClassInitFunc) hildon_number_editor_class_init,
176 NULL, /* class_finalize */
177 NULL, /* class_data */
178 sizeof(HildonNumberEditor),
180 (GInstanceInitFunc) hildon_number_editor_init,
182 editor_type = g_type_register_static(GTK_TYPE_CONTAINER,
183 "HildonNumberEditor",
190 hildon_number_editor_class_init(HildonNumberEditorClass * editor_class)
192 GtkContainerClass *container_class = GTK_CONTAINER_CLASS(editor_class);
193 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(editor_class);
195 g_type_class_add_private(editor_class,
196 sizeof(HildonNumberEditorPrivate));
198 parent_class = g_type_class_peek_parent(editor_class);
200 widget_class->size_request = hildon_number_editor_size_request;
201 widget_class->size_allocate = hildon_number_editor_size_allocate;
202 widget_class->mnemonic_activate = hildon_number_editor_mnemonic_activate;
203 widget_class->focus = hildon_composite_widget_focus;
205 editor_class->error_handler = hildon_number_editor_error_handler;
207 /* Because we derived our widget from GtkContainer, we should override
209 container_class->forall = hildon_number_editor_forall;
210 GTK_OBJECT_CLASS(editor_class)->destroy = hildon_number_editor_destroy;
211 G_OBJECT_CLASS(editor_class)->finalize = hildon_number_editor_finalize;
213 HildonNumberEditor_signal[RANGE_ERROR] =
214 g_signal_new("range_error", HILDON_TYPE_NUMBER_EDITOR,
215 G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET
216 (HildonNumberEditorClass, error_handler),
217 g_signal_accumulator_true_handled, NULL,
218 _hildon_marshal_BOOLEAN__INT,
219 G_TYPE_BOOLEAN, 1, G_TYPE_INT);
223 hildon_number_editor_forall(GtkContainer *container, gboolean include_internals,
224 GtkCallback callback, gpointer callback_data)
226 HildonNumberEditorPrivate *priv =
227 HILDON_NUMBER_EDITOR_GET_PRIVATE(container);
229 g_return_if_fail(callback != NULL);
231 if (!include_internals)
234 (*callback) (priv->minus, callback_data);
235 (*callback) (priv->num_entry, callback_data);
236 (*callback) (priv->plus, callback_data);
240 hildon_number_editor_destroy(GtkObject *self)
242 HildonNumberEditorPrivate *priv;
244 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(self);
248 gtk_widget_unparent(priv->minus);
253 gtk_widget_unparent(priv->num_entry);
254 priv->num_entry = NULL;
258 gtk_widget_unparent(priv->plus);
262 if (GTK_OBJECT_CLASS(parent_class)->destroy)
263 GTK_OBJECT_CLASS(parent_class)->destroy(self);
267 hildon_number_editor_finalize (GObject *self)
269 HildonNumberEditorPrivate *priv;
271 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(self);
274 if (priv->button_event_id)
275 g_source_remove (priv->button_event_id);
277 /* Call parent class finalize, if have one */
278 if (G_OBJECT_CLASS (parent_class)->finalize)
279 G_OBJECT_CLASS (parent_class)->finalize(self);
283 hildon_number_editor_init (HildonNumberEditor *editor)
285 HildonNumberEditorPrivate *priv;
287 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
288 GTK_WIDGET_SET_FLAGS(GTK_WIDGET(editor), GTK_NO_WINDOW);
290 priv->num_entry = gtk_entry_new();
291 priv->minus = gtk_button_new();
292 priv->plus = gtk_button_new();
294 gtk_widget_set_name( priv->minus, "minus-button" );
295 gtk_widget_set_name( priv->plus, "plus-button" );
296 gtk_widget_set_size_request( priv->minus, BUTTON_WIDTH, BUTTON_HEIGHT );
297 gtk_widget_set_size_request( priv->plus, BUTTON_WIDTH, BUTTON_HEIGHT );
298 gtk_entry_set_alignment (GTK_ENTRY(priv->num_entry), 1);
300 GTK_WIDGET_UNSET_FLAGS( priv->minus, GTK_CAN_FOCUS );
301 GTK_WIDGET_UNSET_FLAGS( priv->plus, GTK_CAN_FOCUS );
303 priv->button_event_id = -1;
305 gtk_widget_set_parent(priv->minus, GTK_WIDGET(editor));
306 gtk_widget_set_parent(priv->num_entry, GTK_WIDGET(editor));
307 gtk_widget_set_parent(priv->plus, GTK_WIDGET(editor));
309 g_signal_connect(GTK_OBJECT(priv->num_entry), "changed",
310 G_CALLBACK(hildon_number_editor_entry_changed),
313 g_signal_connect(GTK_OBJECT(priv->num_entry), "focus-out-event",
314 G_CALLBACK(hildon_number_editor_entry_focusout),
317 g_signal_connect(GTK_OBJECT(priv->num_entry), "key-press-event",
318 G_CALLBACK(hildon_number_editor_entry_keypress),
321 g_signal_connect(GTK_OBJECT(priv->num_entry), "button-release-event",
322 G_CALLBACK(hildon_number_editor_entry_button_released),
325 g_signal_connect(GTK_OBJECT(priv->minus), "button-press-event",
326 G_CALLBACK(hildon_number_editor_button_pressed),
329 g_signal_connect(GTK_OBJECT(priv->plus), "button-press-event",
330 G_CALLBACK(hildon_number_editor_button_pressed),
333 g_signal_connect(GTK_OBJECT(priv->minus), "button-release-event",
334 G_CALLBACK(hildon_number_editor_button_released),
337 g_signal_connect(GTK_OBJECT(priv->plus), "button-release-event",
338 G_CALLBACK(hildon_number_editor_button_released),
341 g_signal_connect(GTK_OBJECT(priv->minus), "leave-notify-event",
342 G_CALLBACK(hildon_number_editor_button_released),
345 g_signal_connect(GTK_OBJECT(priv->plus), "leave-notify-event",
346 G_CALLBACK(hildon_number_editor_button_released),
349 g_object_set( G_OBJECT(priv->num_entry),
350 "input-mode", HILDON_INPUT_MODE_HINT_NUMERIC, NULL );
352 gtk_widget_show(priv->num_entry);
353 gtk_widget_show(priv->minus);
354 gtk_widget_show(priv->plus);
356 hildon_number_editor_set_range(editor, G_MININT, G_MAXINT);
360 hildon_number_editor_mnemonic_activate (GtkWidget *widget,
361 gboolean group_cycle)
363 HildonNumberEditorPrivate *priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(widget);
364 gtk_widget_grab_focus(priv->num_entry);
365 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
370 hildon_number_editor_entry_button_released (GtkWidget *widget,
371 GdkEventButton *event,
374 gtk_editable_select_region(GTK_EDITABLE(widget), 0, -1);
379 hildon_number_editor_button_released (GtkWidget *widget, GdkEvent *event,
380 HildonNumberEditor *editor)
382 HildonNumberEditorPrivate *priv =
383 HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
385 if (priv->button_event_id != -1)
387 g_source_remove(priv->button_event_id);
388 priv->button_event_id = -1;
394 hildon_number_editor_button_pressed (GtkWidget *widget, GdkEventButton *event,
397 /* Need to fetch current value from entry and increment or decrement
399 HildonNumberEditor *editor;
400 HildonNumberEditorPrivate *priv;
401 GtkSettings *settings;
404 editor = HILDON_NUMBER_EDITOR(data);
405 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
406 settings = gtk_settings_get_default();
407 g_object_get(settings, "gtk-initial-timeout", &timeout, NULL);
409 if (GTK_BUTTON(widget) == GTK_BUTTON(priv->plus))
410 priv->button_type = 1;
412 priv->button_type = -1;
414 if (priv->button_event_id == -1)
416 do_mouse_timeout(editor);
417 priv->button_event_id = g_timeout_add (timeout,
418 (GSourceFunc) hildon_number_editor_start_timer,
426 hildon_number_editor_start_timer (HildonNumberEditor *editor)
428 HildonNumberEditorPrivate *priv;
429 GtkSettings *settings;
432 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
433 settings = gtk_settings_get_default();
434 g_object_get(settings, "gtk-update-timeout", &timeout, NULL);
436 priv->button_event_id = g_timeout_add(timeout,
437 (GSourceFunc) do_mouse_timeout,
443 do_mouse_timeout (HildonNumberEditor *editor)
445 HildonNumberEditorPrivate *priv;
448 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
451 if (priv->button_type == 1)
453 if (change_numbers(editor, 1, -1) == FALSE)
457 else if (change_numbers(editor, 2, -1) == FALSE)
462 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
470 change_numbers (HildonNumberEditor *editor, gint type, gint cursor_pos)
475 HildonNumberEditorPrivate *priv =
476 HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
477 nvalue = atoi(GTK_ENTRY(priv->num_entry)->text);
481 if (nvalue < priv->end)
485 g_signal_emit(editor, HildonNumberEditor_signal[RANGE_ERROR],
486 0, MAXIMUM_VALUE_EXCEED, &r);
492 if (nvalue > priv->start)
497 g_signal_emit(editor, HildonNumberEditor_signal[RANGE_ERROR],
498 0, MINIMUM_VALUE_EXCEED, &r);
503 /* write value to num_entry */
504 snvalue = integer_to_string(nvalue);
505 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), snvalue);
507 if (cursor_pos != -1)
508 gtk_editable_set_position(GTK_EDITABLE(priv->num_entry),
518 integer_to_string (gint nvalue)
520 return g_strdup_printf("%d", nvalue);
524 hildon_number_editor_entry_changed (GtkWidget *widget, gpointer data)
526 HildonNumberEditor *editor;
527 HildonNumberEditorPrivate *priv;
533 editor = HILDON_NUMBER_EDITOR(data);
534 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
536 tmpstr = GTK_ENTRY(priv->num_entry)->text;
538 if (strlen(tmpstr) > 0)
541 value = strtol(GTK_ENTRY(priv->num_entry)->text, &tail, 10);
542 if (!strncmp(tail, "\0", 1) || !strncmp(tail, "-", 1))
544 if (atoi(GTK_ENTRY(priv->num_entry)->text) > priv->end)
546 g_signal_emit(editor,HildonNumberEditor_signal[RANGE_ERROR],
547 0, MAXIMUM_VALUE_EXCEED, &r);
548 tmpstr = integer_to_string(priv->end);
549 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), tmpstr);
553 else if (atoi(GTK_ENTRY(priv->num_entry)->text) < priv->start) {
554 g_signal_emit(editor, HildonNumberEditor_signal[RANGE_ERROR],
555 0, MINIMUM_VALUE_EXCEED, &r);
556 tmpstr = integer_to_string(priv->start);
557 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), tmpstr);
564 g_signal_emit(editor, HildonNumberEditor_signal[RANGE_ERROR],
565 0, ERRONEOUS_VALUE, &r);
566 tmpstr = integer_to_string(priv->start);
567 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), tmpstr);
575 hildon_number_editor_size_request (GtkWidget *widget,
576 GtkRequisition *requisition)
578 HildonNumberEditor *editor;
579 HildonNumberEditorPrivate *priv;
582 editor = HILDON_NUMBER_EDITOR(widget);
583 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
585 gtk_widget_size_request(priv->minus, &req);
586 requisition->width = req.width;
588 gtk_widget_size_request(priv->num_entry, &req);
589 requisition->width += req.width;
591 gtk_widget_size_request(priv->plus, &req);
592 requisition->width += req.width;
594 requisition->width += SPACE_BORDER * 2;
595 requisition->height = NUMBER_EDITOR_HEIGHT;
599 set_widget_allocation (GtkWidget *widget, GtkAllocation *alloc,
600 GtkAllocation *allocation)
602 GtkRequisition child_requisition;
604 gtk_widget_get_child_requisition(widget, &child_requisition);
606 if (allocation->width + allocation->x >
607 alloc->x + child_requisition.width)
608 alloc->width = child_requisition.width;
611 alloc->width = allocation->width - (alloc->x - allocation->x);
612 if (alloc->width < 0)
616 gtk_widget_size_allocate(widget, alloc);
617 alloc->x += alloc->width;
621 hildon_number_editor_size_allocate (GtkWidget *widget,
622 GtkAllocation *allocation)
624 HildonNumberEditor *editor;
625 HildonNumberEditorPrivate *priv;
628 editor = HILDON_NUMBER_EDITOR(widget);
629 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
631 widget->allocation = *allocation;
633 /*Init start values*/
634 alloc.y = widget->allocation.y + widget->style->ythickness;
636 if (widget->allocation.height > NUMBER_EDITOR_HEIGHT)
638 alloc.height = NUMBER_EDITOR_HEIGHT - widget->style->ythickness * 2;
639 alloc.y += (widget->allocation.height - NUMBER_EDITOR_HEIGHT) / 2;
642 alloc.height = widget->allocation.height - widget->style->ythickness * 2;
646 if (alloc.height < 0)
649 alloc.x = allocation->x + widget->style->xthickness;
651 set_widget_allocation(priv->minus, &alloc, &widget->allocation);
652 alloc.x += SPACE_BORDER;
654 set_widget_allocation(priv->num_entry, &alloc, &widget->allocation);
655 alloc.x += SPACE_BORDER;
657 set_widget_allocation(priv->plus, &alloc, &widget->allocation);
661 hildon_number_editor_entry_focusout (GtkWidget *widget, GdkEventFocus *event,
664 HildonNumberEditor *editor;
665 HildonNumberEditorPrivate *priv;
669 editor = HILDON_NUMBER_EDITOR(data);
670 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
672 /* empty entry, must infoprint error message */
673 if (!strlen(GTK_ENTRY(priv->num_entry)->text))
675 g_signal_emit(editor, HildonNumberEditor_signal[RANGE_ERROR],
676 0, ERRONEOUS_VALUE, &r);
677 /* Changing to default value */
678 str = integer_to_string(priv->default_val);
679 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), str);
680 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
688 hildon_number_editor_entry_keypress (GtkWidget *widget, GdkEventKey *event,
691 HildonNumberEditorPrivate *priv;
694 gboolean ret_val = FALSE;
696 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(data);
697 tmp_pos = gtk_editable_get_position( GTK_EDITABLE(priv->num_entry) );
699 if( (event->keyval == GDK_Left) || (event->keyval == GDK_Right) )
701 if( ((event->keyval == GDK_Left) && tmp_pos == 0 ) ||
702 (event->keyval == GDK_Left && gtk_editable_get_selection_bounds
703 (GTK_EDITABLE (priv->num_entry),
706 if (change_numbers(HILDON_NUMBER_EDITOR(data), 2, -1) == FALSE)
708 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
712 else if ( (event->keyval == GDK_Right) )
714 gchar *str = gtk_editable_get_chars( GTK_EDITABLE(priv->num_entry),
716 if( strlen(str) == tmp_pos )
718 if (change_numbers(HILDON_NUMBER_EDITOR(data), 1, tmp_pos) == FALSE)
720 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
730 scnd_chr = gtk_editable_get_chars( GTK_EDITABLE(priv->num_entry),
732 if (event->keyval == GDK_minus || event->keyval == GDK_KP_Subtract)
736 if (!strncmp (scnd_chr, "-", 1))
739 else if ((event->keyval == GDK_Up) || (event->keyval == GDK_Down)
740 || (event->keyval == GDK_KP_Up) || (event->keyval == GDK_KP_Down))
742 else if (((event->keyval >= GDK_0) && (event->keyval <= GDK_9)) ||
743 ((event->keyval >= GDK_KP_0) && (event->keyval <= GDK_KP_9))
744 || (event->keyval == GDK_BackSpace)
745 || (event->keyval == GDK_Delete)
746 || (event->keyval == GDK_Return)
747 || (((event->keyval == GDK_minus)
748 || (event->keyval == GDK_KP_Subtract))))
758 hildon_number_editor_error_handler(HildonNumberEditor *editor,
759 HildonNumberEditorErrorType type)
763 gchar *err_msg = NULL;
764 HildonNumberEditorPrivate *priv;
766 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
770 /* Construct different error message */
773 case MAXIMUM_VALUE_EXCEED:
774 err_msg = g_strdup_printf(_("Ckct_ib_maximum_value"), max, max);
776 case MINIMUM_VALUE_EXCEED:
777 err_msg = g_strdup_printf(_("Ckct_ib_minimum_value"), min, min);
779 case ERRONEOUS_VALUE:
781 g_strdup_printf(_("Ckct_ib_set_a_value_within_range"), min, max);
787 gtk_infoprint(GTK_WINDOW(gtk_widget_get_ancestor(GTK_WIDGET(editor),
788 GTK_TYPE_WINDOW)), err_msg);
797 * hildon_number_editor_new:
798 * @min: Minimum accepted value
799 * @max: Maximum accepted value
801 * This function creates new number editor
803 * Return value: a new #HildonNumberEditor widget.
806 hildon_number_editor_new (gint min, gint max)
808 HildonNumberEditor *editor =
809 g_object_new(HILDON_TYPE_NUMBER_EDITOR, NULL);
811 /* Set user inputted range to editor */
812 hildon_number_editor_set_range(editor, min, max);
814 return GTK_WIDGET(editor);
818 * hildon_number_editor_set_range:
819 * @editor: a #HildonNumberEditor widget
820 * @min: Minimum accepted value
821 * @max: Maximum accepted value
823 * This function set accepted number range for editor
826 hildon_number_editor_set_range (HildonNumberEditor *editor, gint min, gint max)
828 HildonNumberEditorPrivate *priv;
830 gint a, b, entry_len;
832 g_return_if_fail(HILDON_IS_NUMBER_EDITOR(editor));
842 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
844 /* we need to store user inputted values */
847 priv->default_val = min;
849 priv->negative = min < 0 ? TRUE : FALSE;
851 str = integer_to_string(max);
852 str2 = integer_to_string(min);
862 gtk_entry_set_width_chars(GTK_ENTRY(priv->num_entry), entry_len);
864 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), str);
865 gtk_widget_queue_resize(GTK_WIDGET(editor));
874 * hildon_number_editor_get_value:
875 * @editor: pointer to #HildonNumberEditor
877 * This function returns current value of number editor
879 * Return value: Current NumberEditor value
882 hildon_number_editor_get_value (HildonNumberEditor *editor)
884 HildonNumberEditorPrivate *priv;
887 g_return_val_if_fail(HILDON_IS_NUMBER_EDITOR(editor), 0);
889 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
891 value = atoi(GTK_ENTRY(priv->num_entry)->text);
897 * hildon_number_editor_set_value:
898 * @editor: pointer to #HildonNumberEditor
899 * @value: numeric value for number editor
901 * This function sets numeric value to number editor
904 hildon_number_editor_set_value (HildonNumberEditor *editor, gint value)
906 HildonNumberEditorPrivate *priv;
909 g_return_if_fail(HILDON_IS_NUMBER_EDITOR(editor));
911 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
913 g_return_if_fail(value <= priv->end);
914 g_return_if_fail(value >= priv->start);
916 priv->default_val = value;
918 str = integer_to_string(value);
919 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), str);