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-widgets/gtk-infoprint.h>
43 #include "hildon-composite-widget.h"
50 #define _(String) dgettext(PACKAGE, String)
52 /*Pixel spec defines*/
53 #define SPACE_BORDER 6
54 #define NUMBER_EDITOR_HEIGHT 30
56 #define BUTTON_HEIGHT 30
57 #define BUTTON_WIDTH 30
59 #define HILDON_NUMBER_EDITOR_GET_PRIVATE(obj) \
60 (G_TYPE_INSTANCE_GET_PRIVATE ((obj), HILDON_TYPE_NUMBER_EDITOR, \
61 HildonNumberEditorPrivate));
71 typedef struct _HildonNumberEditorPrivate HildonNumberEditorPrivate;
74 hildon_number_editor_class_init (HildonNumberEditorClass *editor_class);
77 hildon_number_editor_init (HildonNumberEditor *editor);
80 hildon_number_editor_entry_focusout (GtkWidget *widget, GdkEventFocus *event,
84 hildon_number_editor_entry_changed (GtkWidget *widget, gpointer data);
87 hildon_number_editor_size_request (GtkWidget *widget,
88 GtkRequisition *requisition);
91 set_widget_allocation (GtkWidget *widget, GtkAllocation *alloc,
92 GtkAllocation *allocation);
95 hildon_number_editor_get_font_width (GtkWidget *widget);
98 hildon_number_editor_size_allocate (GtkWidget *widget,
99 GtkAllocation *allocation);
102 hildon_number_editor_entry_keypress (GtkWidget *widget, GdkEventKey *event,
106 hildon_number_editor_button_pressed (GtkWidget *widget, GdkEventButton *event,
110 hildon_number_editor_entry_button_released (GtkWidget *widget,
111 GdkEventButton *event,
114 hildon_number_editor_button_released (GtkWidget *widget,
116 HildonNumberEditor *editor);
118 construct_error_message (HildonNumberEditor *editor, gint type);
121 do_mouse_timeout (HildonNumberEditor *editor);
124 change_numbers (HildonNumberEditor *editor, gint type, gint cursor_pos);
127 integer_to_string (gint value);
130 hildon_number_editor_forall (GtkContainer *container, gboolean include_internals,
131 GtkCallback callback, gpointer callback_data);
134 hildon_number_editor_destroy (GtkObject *self);
137 hildon_number_editor_start_timer (HildonNumberEditor *editor);
140 hildon_number_editor_finalize (GObject *self);
143 hildon_number_editor_mnemonic_activate( GtkWidget *widget,
144 gboolean group_cycle );
146 static GtkContainerClass *parent_class;
149 struct _HildonNumberEditorPrivate
151 GtkWidget *num_entry;
159 gint button_event_id;
163 gboolean rem_sign_space;
168 GType hildon_number_editor_get_type(void)
170 static GType editor_type = 0;
174 static const GTypeInfo editor_info =
176 sizeof(HildonNumberEditorClass),
177 NULL, /* base_init */
178 NULL, /* base_finalize */
179 (GClassInitFunc) hildon_number_editor_class_init,
180 NULL, /* class_finalize */
181 NULL, /* class_data */
182 sizeof(HildonNumberEditor),
184 (GInstanceInitFunc) hildon_number_editor_init,
186 editor_type = g_type_register_static(GTK_TYPE_CONTAINER,
187 "HildonNumberEditor",
194 hildon_number_editor_class_init(HildonNumberEditorClass * editor_class)
196 GtkContainerClass *container_class = GTK_CONTAINER_CLASS(editor_class);
197 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(editor_class);
199 g_type_class_add_private(editor_class,
200 sizeof(HildonNumberEditorPrivate));
202 parent_class = g_type_class_peek_parent(editor_class);
204 widget_class->size_request = hildon_number_editor_size_request;
205 widget_class->size_allocate = hildon_number_editor_size_allocate;
206 widget_class->mnemonic_activate = hildon_number_editor_mnemonic_activate;
207 widget_class->focus = hildon_composite_widget_focus;
209 /* Because we derived our widget from GtkContainer, we should override
211 container_class->forall = hildon_number_editor_forall;
212 GTK_OBJECT_CLASS(editor_class)->destroy = hildon_number_editor_destroy;
213 G_OBJECT_CLASS(editor_class)->finalize = hildon_number_editor_finalize;
217 hildon_number_editor_forall(GtkContainer *container, gboolean include_internals,
218 GtkCallback callback, gpointer callback_data)
220 HildonNumberEditorPrivate *priv =
221 HILDON_NUMBER_EDITOR_GET_PRIVATE(container);
223 g_return_if_fail(callback != NULL);
225 if (!include_internals)
228 (*callback) (priv->minus, callback_data);
229 (*callback) (priv->num_entry, callback_data);
230 (*callback) (priv->plus, callback_data);
234 hildon_number_editor_destroy(GtkObject *self)
236 HildonNumberEditorPrivate *priv;
238 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(self);
242 gtk_widget_unparent(priv->minus);
247 gtk_widget_unparent(priv->num_entry);
248 priv->num_entry = NULL;
252 gtk_widget_unparent(priv->plus);
256 if (GTK_OBJECT_CLASS(parent_class)->destroy)
257 GTK_OBJECT_CLASS(parent_class)->destroy(self);
261 hildon_number_editor_finalize (GObject *self)
263 HildonNumberEditorPrivate *priv;
265 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(self);
268 if (priv->button_event_id)
269 g_source_remove (priv->button_event_id);
271 /* Call parent class finalize, if have one */
272 if (G_OBJECT_CLASS (parent_class)->finalize)
273 G_OBJECT_CLASS (parent_class)->finalize(self);
277 hildon_number_editor_init (HildonNumberEditor *editor)
279 HildonNumberEditorPrivate *priv;
281 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
282 GTK_WIDGET_SET_FLAGS(GTK_WIDGET(editor), GTK_NO_WINDOW);
284 priv->num_entry = gtk_entry_new();
285 priv->minus = gtk_button_new();
286 priv->plus = gtk_button_new();
288 gtk_widget_set_name( priv->minus, "minus-button" );
289 gtk_widget_set_name( priv->plus, "plus-button" );
290 gtk_widget_set_size_request( priv->minus, BUTTON_WIDTH, BUTTON_HEIGHT );
291 gtk_widget_set_size_request( priv->plus, BUTTON_WIDTH, BUTTON_HEIGHT );
292 gtk_entry_set_alignment (GTK_ENTRY(priv->num_entry), 1);
294 GTK_WIDGET_UNSET_FLAGS( priv->minus, GTK_CAN_FOCUS );
295 GTK_WIDGET_UNSET_FLAGS( priv->plus, GTK_CAN_FOCUS );
297 priv->entry_width = 0;
298 priv->button_event_id = -1;
299 priv->rem_sign_space = TRUE;
301 gtk_widget_set_parent(priv->minus, GTK_WIDGET(editor));
302 gtk_widget_set_parent(priv->num_entry, GTK_WIDGET(editor));
303 gtk_widget_set_parent(priv->plus, GTK_WIDGET(editor));
305 g_signal_connect(GTK_OBJECT(priv->num_entry), "changed",
306 G_CALLBACK(hildon_number_editor_entry_changed),
309 g_signal_connect(GTK_OBJECT(priv->num_entry), "focus-out-event",
310 G_CALLBACK(hildon_number_editor_entry_focusout),
313 g_signal_connect(GTK_OBJECT(priv->num_entry), "key-press-event",
314 G_CALLBACK(hildon_number_editor_entry_keypress),
317 g_signal_connect(GTK_OBJECT(priv->num_entry), "button-release-event",
318 G_CALLBACK(hildon_number_editor_entry_button_released),
321 g_signal_connect(GTK_OBJECT(priv->minus), "button-press-event",
322 G_CALLBACK(hildon_number_editor_button_pressed),
325 g_signal_connect(GTK_OBJECT(priv->plus), "button-press-event",
326 G_CALLBACK(hildon_number_editor_button_pressed),
329 g_signal_connect(GTK_OBJECT(priv->minus), "button-release-event",
330 G_CALLBACK(hildon_number_editor_button_released),
333 g_signal_connect(GTK_OBJECT(priv->plus), "button-release-event",
334 G_CALLBACK(hildon_number_editor_button_released),
337 g_signal_connect(GTK_OBJECT(priv->minus), "leave-notify-event",
338 G_CALLBACK(hildon_number_editor_button_released),
341 g_signal_connect(GTK_OBJECT(priv->plus), "leave-notify-event",
342 G_CALLBACK(hildon_number_editor_button_released),
345 gtk_widget_show(priv->num_entry);
346 gtk_widget_show(priv->minus);
347 gtk_widget_show(priv->plus);
349 hildon_number_editor_set_range(editor, G_MININT, G_MAXINT);
353 hildon_number_editor_mnemonic_activate (GtkWidget *widget,
354 gboolean group_cycle)
356 HildonNumberEditorPrivate *priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(widget);
357 gtk_widget_grab_focus(priv->num_entry);
358 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
363 hildon_number_editor_entry_button_released (GtkWidget *widget,
364 GdkEventButton *event,
367 gtk_editable_select_region(GTK_EDITABLE(widget), 0, -1);
372 construct_error_message (HildonNumberEditor *editor, gint type)
375 gchar *err_msg = NULL;
376 HildonNumberEditorPrivate *priv;
378 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
382 /* Construct different error message */
385 case MAXIMUM_VALUE_EXCEED:
386 err_msg = g_strdup_printf(_("Ckct_ib_maximum_value"), max, max);
388 case MINIMUM_VALUE_EXCEED:
389 err_msg = g_strdup_printf(_("Ckct_ib_minimum_value"), min, min);
391 case ERRONEOUS_VALUE:
393 g_strdup_printf(_("Ckct_ib_set_a_value_within_range"), min, max);
399 gtk_infoprint(GTK_WINDOW(gtk_widget_get_ancestor(GTK_WIDGET(editor),
400 GTK_TYPE_WINDOW)), err_msg);
406 hildon_number_editor_button_released (GtkWidget *widget, GdkEvent *event,
407 HildonNumberEditor *editor)
409 HildonNumberEditorPrivate *priv =
410 HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
412 if (priv->button_event_id != -1)
414 g_source_remove(priv->button_event_id);
415 priv->button_event_id = -1;
421 hildon_number_editor_button_pressed (GtkWidget *widget, GdkEventButton *event,
424 /* Need to fetch current value from entry and increment or decrement
426 HildonNumberEditor *editor;
427 HildonNumberEditorPrivate *priv;
428 GtkSettings *settings;
431 editor = HILDON_NUMBER_EDITOR(data);
432 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
433 settings = gtk_settings_get_default();
434 g_object_get(settings, "gtk-initial-timeout", &timeout, NULL);
436 if (GTK_BUTTON(widget) == GTK_BUTTON(priv->plus))
437 priv->button_type = 1;
439 priv->button_type = -1;
441 if (priv->button_event_id == -1)
443 do_mouse_timeout(editor);
444 priv->button_event_id = g_timeout_add (timeout,
445 (GSourceFunc) hildon_number_editor_start_timer,
453 hildon_number_editor_start_timer (HildonNumberEditor *editor)
455 HildonNumberEditorPrivate *priv;
456 GtkSettings *settings;
459 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
460 settings = gtk_settings_get_default();
461 g_object_get(settings, "gtk-update-timeout", &timeout, NULL);
463 priv->button_event_id = g_timeout_add(timeout,
464 (GSourceFunc) do_mouse_timeout,
470 do_mouse_timeout (HildonNumberEditor *editor)
472 HildonNumberEditorPrivate *priv;
475 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
478 if (priv->button_type == 1)
480 if (change_numbers(editor, 1, -1) == FALSE)
484 else if (change_numbers(editor, 2, -1) == FALSE)
489 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
497 change_numbers (HildonNumberEditor *editor, gint type, gint cursor_pos)
501 HildonNumberEditorPrivate *priv =
502 HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
503 nvalue = atoi(GTK_ENTRY(priv->num_entry)->text);
507 if (nvalue < priv->end)
511 construct_error_message(editor, MAXIMUM_VALUE_EXCEED);
517 if (nvalue > priv->start)
522 construct_error_message(editor, MINIMUM_VALUE_EXCEED);
527 /* write value to num_entry */
528 snvalue = integer_to_string(nvalue);
529 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), snvalue);
531 if (cursor_pos != -1)
532 gtk_editable_set_position(GTK_EDITABLE(priv->num_entry),
542 integer_to_string (gint nvalue)
544 return g_strdup_printf("%d", nvalue);
548 hildon_number_editor_entry_changed (GtkWidget *widget, gpointer data)
550 HildonNumberEditor *editor;
551 HildonNumberEditorPrivate *priv;
556 editor = HILDON_NUMBER_EDITOR(data);
557 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
559 tmpstr = GTK_ENTRY(priv->num_entry)->text;
561 if (strlen(tmpstr) > 0)
564 value = strtol(GTK_ENTRY(priv->num_entry)->text, &tail, 10);
565 if (!strncmp(tail, "\0", 1) || !strncmp(tail, "-", 1))
567 if (atoi(GTK_ENTRY(priv->num_entry)->text) > priv->end)
569 construct_error_message(editor, MAXIMUM_VALUE_EXCEED);
570 tmpstr = integer_to_string(priv->end);
571 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), tmpstr);
575 else if (atoi(GTK_ENTRY(priv->num_entry)->text) < priv->start) {
576 construct_error_message(editor, MINIMUM_VALUE_EXCEED);
577 tmpstr = integer_to_string(priv->start);
578 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), tmpstr);
585 construct_error_message(editor, ERRONEOUS_VALUE);
586 tmpstr = integer_to_string(priv->start);
587 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), tmpstr);
595 hildon_number_editor_size_request (GtkWidget *widget,
596 GtkRequisition *requisition)
598 HildonNumberEditor *editor;
599 HildonNumberEditorPrivate *priv;
602 editor = HILDON_NUMBER_EDITOR(widget);
603 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
605 /* FIXME -- If it's needed to fix button sizes.. priv->minus and priv->plus
606 * requisitions are right places to do that.
609 gtk_widget_size_request(priv->minus, &req);
612 gtk_widget_size_request(priv->num_entry, &req);
613 requisition->width += req.width;
615 if (!priv->entry_width)
617 gint font_w = hildon_number_editor_get_font_width(priv->num_entry);
619 priv->entry_width = (priv->entry_len + 1) * font_w +
620 widget->style->xthickness * 2 -
621 (font_w / 2 * priv->rem_sign_space);
622 gtk_widget_set_size_request(priv->num_entry, priv->entry_width,
626 gtk_widget_size_request(priv->plus, &req);
627 requisition->width += priv->entry_len;
629 requisition->width += SPACE_BORDER * 2;
630 requisition->height = NUMBER_EDITOR_HEIGHT;
634 set_widget_allocation (GtkWidget *widget, GtkAllocation *alloc,
635 GtkAllocation *allocation)
637 GtkRequisition child_requisition;
639 gtk_widget_get_child_requisition(widget, &child_requisition);
641 if (allocation->width + allocation->x >
642 alloc->x + child_requisition.width)
643 alloc->width = child_requisition.width;
646 alloc->width = allocation->width - (alloc->x - allocation->x);
647 if (alloc->width < 0)
651 gtk_widget_size_allocate(widget, alloc);
652 alloc->x += alloc->width;
656 hildon_number_editor_get_font_width (GtkWidget *widget)
658 PangoContext *context;
659 PangoFontMetrics *metrics;
662 context = gtk_widget_get_pango_context(widget);
663 metrics = pango_context_get_metrics(context,
664 widget->style->font_desc,
665 pango_context_get_language
668 digit_width = pango_font_metrics_get_approximate_digit_width(metrics);
669 digit_width = PANGO_PIXELS(digit_width);
671 pango_font_metrics_unref(metrics);
677 hildon_number_editor_size_allocate (GtkWidget *widget,
678 GtkAllocation *allocation)
680 HildonNumberEditor *editor;
681 HildonNumberEditorPrivate *priv;
684 editor = HILDON_NUMBER_EDITOR(widget);
685 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
687 widget->allocation = *allocation;
689 /*Init start values*/
690 alloc.y = widget->allocation.y + widget->style->ythickness;
692 if (widget->allocation.height > NUMBER_EDITOR_HEIGHT)
694 alloc.height = NUMBER_EDITOR_HEIGHT - widget->style->ythickness * 2;
695 alloc.y += (widget->allocation.height - NUMBER_EDITOR_HEIGHT) / 2;
698 alloc.height = widget->allocation.height - widget->style->ythickness * 2;
702 if (alloc.height < 0)
705 alloc.x = allocation->x + widget->style->xthickness;
707 set_widget_allocation(priv->minus, &alloc, &widget->allocation);
708 alloc.x += SPACE_BORDER;
710 set_widget_allocation(priv->num_entry, &alloc, &widget->allocation);
711 alloc.x += SPACE_BORDER;
713 set_widget_allocation(priv->plus, &alloc, &widget->allocation);
717 hildon_number_editor_entry_focusout (GtkWidget *widget, GdkEventFocus *event,
720 HildonNumberEditor *editor;
721 HildonNumberEditorPrivate *priv;
724 editor = HILDON_NUMBER_EDITOR(data);
725 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
727 /* empty entry, must infoprint error message */
728 if (!strlen(GTK_ENTRY(priv->num_entry)->text))
730 construct_error_message(editor, ERRONEOUS_VALUE);
731 /* Changing to default value */
732 str = integer_to_string(priv->default_val);
733 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), str);
734 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
742 hildon_number_editor_entry_keypress (GtkWidget *widget, GdkEventKey *event,
745 HildonNumberEditorPrivate *priv;
748 gboolean ret_val = FALSE;
750 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(data);
751 tmp_pos = gtk_editable_get_position( GTK_EDITABLE(priv->num_entry) );
753 if( (event->keyval == GDK_Left) || (event->keyval == GDK_Right) )
755 if( ((event->keyval == GDK_Left) && tmp_pos == 0 ) ||
756 (event->keyval == GDK_Left && gtk_editable_get_selection_bounds
757 (GTK_EDITABLE (priv->num_entry),
760 if (change_numbers(HILDON_NUMBER_EDITOR(data), 2, -1) == FALSE)
762 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
766 else if ( (event->keyval == GDK_Right) )
768 gchar *str = gtk_editable_get_chars( GTK_EDITABLE(priv->num_entry),
770 if( strlen(str) == tmp_pos )
772 if (change_numbers(HILDON_NUMBER_EDITOR(data), 1, tmp_pos) == FALSE)
774 gtk_editable_select_region(GTK_EDITABLE(priv->num_entry), 0, -1);
784 scnd_chr = gtk_editable_get_chars( GTK_EDITABLE(priv->num_entry),
786 if (event->keyval == GDK_minus || event->keyval == GDK_KP_Subtract)
790 if (!strncmp (scnd_chr, "-", 1))
793 else if ((event->keyval == GDK_Up) || (event->keyval == GDK_Down)
794 || (event->keyval == GDK_KP_Up) || (event->keyval == GDK_KP_Down))
796 else if (((event->keyval >= GDK_0) && (event->keyval <= GDK_9)) ||
797 ((event->keyval >= GDK_KP_0) && (event->keyval <= GDK_KP_9))
798 || (event->keyval == GDK_BackSpace)
799 || (event->keyval == GDK_Delete)
800 || (event->keyval == GDK_Return)
801 || (((event->keyval == GDK_minus)
802 || (event->keyval == GDK_KP_Subtract))))
813 * hildon_number_editor_new:
814 * @min: Minimum accepted value
815 * @max: Maximum accepted value
817 * This function creates new number editor
819 * Return value: a new #HildonNumberEditor widget.
822 hildon_number_editor_new (gint min, gint max)
824 HildonNumberEditor *editor =
825 g_object_new(HILDON_TYPE_NUMBER_EDITOR, NULL);
827 /* Set user inputted range to editor */
828 hildon_number_editor_set_range(editor, min, max);
830 return GTK_WIDGET(editor);
834 * hildon_number_editor_set_range:
835 * @editor: a #HildonNumberEditor widget
836 * @min: Minimum accepted value
837 * @max: Maximum accepted value
839 * This function set accepted number range for editor
842 hildon_number_editor_set_range (HildonNumberEditor *editor, gint min, gint max)
844 HildonNumberEditorPrivate *priv;
848 g_return_if_fail(HILDON_IS_NUMBER_EDITOR(editor));
858 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
860 /* we need to store user inputted values */
863 priv->default_val = min;
865 priv->negative = min < 0 ? TRUE : FALSE;
867 str = integer_to_string(max);
868 str2 = integer_to_string(min);
875 priv->rem_sign_space = FALSE;
880 priv->rem_sign_space = TRUE;
883 /* reserving space for the minus sign */
887 /* priv->entry_len = a >= b ? a : b;*/
889 priv->entry_width = 0;
891 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), str);
892 gtk_widget_queue_resize(GTK_WIDGET(editor));
901 * hildon_number_editor_get_value:
902 * @editor: pointer to #HildonNumberEditor
904 * This function returns current value of number editor
906 * Return value: Current NumberEditor value
909 hildon_number_editor_get_value (HildonNumberEditor *editor)
911 HildonNumberEditorPrivate *priv;
914 g_return_val_if_fail(HILDON_IS_NUMBER_EDITOR(editor), 0);
916 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
918 value = atoi(GTK_ENTRY(priv->num_entry)->text);
924 * hildon_number_editor_set_value:
925 * @editor: pointer to #HildonNumberEditor
926 * @value: numeric value for number editor
928 * This function sets numeric value to number editor
931 hildon_number_editor_set_value (HildonNumberEditor *editor, gint value)
933 HildonNumberEditorPrivate *priv;
936 g_return_if_fail(HILDON_IS_NUMBER_EDITOR(editor));
938 priv = HILDON_NUMBER_EDITOR_GET_PRIVATE(editor);
940 g_return_if_fail(value <= priv->end);
941 g_return_if_fail(value >= priv->start);
943 priv->default_val = value;
945 str = integer_to_string(value);
946 gtk_entry_set_text(GTK_ENTRY(priv->num_entry), str);