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-time-picker.c
28 * This file implements the HildonTimePicker widget. This widget
29 * is used with HildonTimeEditor widget to set time.
34 * @shortdesc: TimePicker is a widget for setting a time.
35 * @longdesc: The TimePicker contains two fields for setting the
36 * time. Arrow buttons can be used to increment and decrement time. If
37 * specified in systems locale setting AM/PM button is displayed.
39 * @seealso: #HildonTimeEditor
42 #include "hildon-time-picker.h"
43 #include <hildon-widgets/hildon-defines.h>
44 #include <hildon-widgets/gtk-infoprint.h>
46 #include <gdk/gdkkeysyms.h>
59 #define _(String) dgettext(PACKAGE, String)
61 #define HILDON_TIME_PICKER_GET_PRIVATE(obj) \
62 (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
63 HILDON_TYPE_TIME_PICKER, HildonTimePickerPrivate))
65 #define DEFAULT_HOURS 1
66 #define DEFAULT_MINUTES 1
67 #define DEFAULT_ARROW_WIDTH 26
68 #define DEFAULT_ARROW_HEIGHT 26
100 static GtkDialogClass *parent_class;
102 /*< private > m == minutes and h == hours
103 m == more significant and l == less significant
104 mm == minutes more significant (==tens of minutes) etc.*/
105 struct _HildonTimePickerPrivate
107 GtkWidget *child[WIDGET_COUNT];
117 guint c12h : 1; /* 12 hour clock, show AM/PM */
118 guint ampm_pos : 1; /* FALSE = AM/PM at left, TRUE = at right */
119 guint button_press : 1;
120 guint start_key_repeat : 1;
131 hildon_time_picker_class_init( HildonTimePickerClass *klass );
134 hildon_time_picker_init( HildonTimePicker *picker );
137 hildon_time_picker_timeout( gpointer data );
140 hildon_time_picker_change_time( HildonTimePicker *picker, guint minutes );
143 hildon_time_picker_ampm_release( GtkWidget *widget, GdkEvent *event,
144 HildonTimePicker *picker );
147 hildon_time_picker_arrow_press( GtkWidget *widget, GdkEvent *event,
148 HildonTimePicker *picker );
150 hildon_time_picker_arrow_release( GtkWidget *widget, GdkEvent *event,
151 HildonTimePicker *picker );
154 hildon_time_picker_get_property( GObject *object, guint param_id,
155 GValue *value, GParamSpec *pspec );
158 hildon_time_picker_set_property( GObject *object, guint param_id,
159 const GValue *value, GParamSpec *pspec );
162 hildon_time_picker_event_box_focus_in( GtkWidget *widget, GdkEvent *event,
166 hildon_time_picker_event_box_focus_out( GtkWidget *widget, GdkEvent *event,
170 hildon_time_picker_event_box_key_press( GtkWidget *widget, GdkEventKey *event,
171 HildonTimePicker *picker );
174 hildon_time_picker_event_box_key_release( GtkWidget *widget, GdkEventKey *event,
175 HildonTimePicker *picker );
178 hildon_time_picker_event_box_press( GtkWidget *widget, GdkEventKey *event,
182 hildon_time_picker_map( GtkWidget *widget );
185 GType hildon_time_picker_get_type( void )
187 static GType picker_type = 0;
191 static const GTypeInfo picker_info =
193 sizeof(HildonTimePickerClass),
194 NULL, /* base_init */
195 NULL, /* base_finalize */
196 (GClassInitFunc)hildon_time_picker_class_init,
197 NULL, /* class_finalize */
198 NULL, /* class_data */
199 sizeof(HildonTimePicker),
201 (GInstanceInitFunc)hildon_time_picker_init,
203 picker_type = g_type_register_static( GTK_TYPE_DIALOG, "HildonTimePicker",
211 hildon_time_picker_class_init( HildonTimePickerClass *klass )
213 GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
214 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
215 parent_class = g_type_class_peek_parent( klass );
217 gobject_class->get_property = hildon_time_picker_get_property;
218 gobject_class->set_property = hildon_time_picker_set_property;
219 widget_class->map = hildon_time_picker_map;
222 * HildonTimePicker:minutes:
224 * Currently selected minutes.
226 g_object_class_install_property( gobject_class, PROP_MINUTES,
227 g_param_spec_uint("minutes",
229 "The selected minutes",
231 G_PARAM_READABLE | G_PARAM_WRITABLE) );
233 gtk_widget_class_install_style_property( widget_class,
234 g_param_spec_uint("arrow-width",
236 _("Increase/decrease arrows width."),
241 gtk_widget_class_install_style_property( widget_class,
242 g_param_spec_uint("arrow-height",
244 _("Increase/decrease arrows height."),
246 DEFAULT_ARROW_HEIGHT,
249 g_type_class_add_private( klass, sizeof(HildonTimePickerPrivate) );
252 static void hildon_time_picker_init( HildonTimePicker *picker )
254 HildonTimePickerPrivate *priv = HILDON_TIME_PICKER_GET_PRIVATE(picker);
255 GtkSettings *settings = NULL;
256 GtkDialog *dialog = GTK_DIALOG(picker);
257 GtkTable *table = NULL;
258 GtkWidget *maintocenter;
259 struct tm *local = NULL;
262 GtkSizeGroup *size_group;
266 gtk_widget_push_composite_child();
268 priv->child[TABLE] = gtk_table_new( 3, 6, FALSE );
269 table = GTK_TABLE(priv->child[TABLE]);
271 maintocenter = gtk_alignment_new( 0.5, 0, 0, 0 );
273 for( i = FRAME_HOURS; i <= FRAME_LMINUTES; i++ )
275 priv->child[i] = gtk_frame_new( NULL );
276 gtk_container_set_border_width( GTK_CONTAINER( priv->child[i] ), 0 );
279 for( i = BUTTON_HOURS_UP; i <= BUTTON_LMINUTES_DOWN; i++ )
280 priv->child[i] = gtk_button_new();
282 for( i = EBOX_HOURS; i <= EBOX_LMINUTES; i++ )
283 priv->child[i] = gtk_event_box_new();
285 for( i = LABEL_HOURS; i <= LABEL_LMINUTES; i++ )
287 priv->child[i] = gtk_label_new( "00" );
288 gtk_misc_set_padding( GTK_MISC( priv->child[i] ), 0, 1 );
289 gtk_widget_set_name( priv->child[i], "osso-LargeFont" );
292 priv->child[LABEL_COLON] = gtk_label_new(_("Ecdg_ti_time_picker_separator"));
293 gtk_widget_set_name( priv->child[LABEL_COLON], "osso-LargeFont" );
297 priv->key_repeat = 0;
298 priv->start_key_repeat = FALSE;
300 priv->button_press = FALSE;
303 priv->am_symbol = nl_langinfo(AM_STR);
304 priv->pm_symbol = nl_langinfo(PM_STR);
306 priv->c12h = priv->am_symbol[0] == '\0' ? FALSE : TRUE;
308 stamp = time( NULL );
309 local = localtime( &stamp );
311 gtk_table_attach( table, priv->child[BUTTON_HOURS_UP], 1, 2, 0, 1,
312 GTK_SHRINK, GTK_SHRINK, 0, 0 );
313 gtk_table_attach( table, priv->child[FRAME_HOURS], 1, 2, 1, 2,
314 GTK_SHRINK, GTK_SHRINK, 0, 0 );
315 gtk_table_attach( table, priv->child[BUTTON_HOURS_DOWN], 1, 2, 2, 3,
316 GTK_SHRINK, GTK_SHRINK, 0, 0 );
317 gtk_table_attach( table, priv->child[LABEL_COLON], 2, 3, 1, 2,
318 GTK_SHRINK, GTK_SHRINK, 6, 0 );
319 gtk_table_attach( table, priv->child[BUTTON_MMINUTES_UP], 3, 4, 0, 1,
320 GTK_SHRINK, GTK_SHRINK, 0, 0 );
321 gtk_table_attach( table, priv->child[FRAME_MMINUTES], 3, 4, 1, 2,
322 GTK_FILL, GTK_SHRINK, 0, 0 );
323 gtk_table_attach( table, priv->child[BUTTON_MMINUTES_DOWN], 3, 4, 2, 3,
324 GTK_SHRINK, GTK_SHRINK, 0, 0 );
326 gtk_table_attach( table, priv->child[BUTTON_LMINUTES_UP], 4, 5, 0, 1,
327 GTK_SHRINK, GTK_SHRINK, 0, 0 );
328 gtk_table_attach( table, priv->child[FRAME_LMINUTES], 4, 5, 1, 2,
329 GTK_FILL, GTK_SHRINK, 0, 0 );
330 gtk_table_attach( table, priv->child[BUTTON_LMINUTES_DOWN], 4, 5, 2, 3,
331 GTK_SHRINK, GTK_SHRINK, 0, 0 );
333 gtk_table_set_row_spacing( table, 0, 6 );
334 gtk_table_set_row_spacing( table, 1, 6 );
336 size_group = gtk_size_group_new( GTK_SIZE_GROUP_HORIZONTAL );
337 gtk_size_group_add_widget( size_group, priv->child[BUTTON_MMINUTES_UP] );
338 gtk_size_group_add_widget( size_group, priv->child[FRAME_MMINUTES] );
339 gtk_size_group_add_widget( size_group, priv->child[BUTTON_MMINUTES_DOWN] );
340 gtk_size_group_add_widget( size_group, priv->child[BUTTON_LMINUTES_UP] );
341 gtk_size_group_add_widget( size_group, priv->child[FRAME_LMINUTES] );
342 gtk_size_group_add_widget( size_group, priv->child[BUTTON_LMINUTES_DOWN] );
343 g_object_unref( size_group ); /* Added widgets hold references */
347 GtkWidget *ampmtotop = NULL;
349 priv->ampm_pos = strncmp(nl_langinfo(T_FMT_AMPM), "%p", 2) ? TRUE : FALSE;
350 ampmtotop = gtk_alignment_new( 0, 0.5, 0, 0 );
351 priv->child[FRAME_AMPM] = gtk_frame_new( NULL );
352 priv->child[EBOX_AMPM] = gtk_event_box_new();
353 priv->child[LABEL_AMPM] = gtk_label_new( priv->pm_symbol );
355 placement = priv->ampm_pos * 5;
357 gtk_container_add( GTK_CONTAINER(ampmtotop), priv->child[FRAME_AMPM] );
358 gtk_container_add( GTK_CONTAINER(priv->child[FRAME_AMPM]),
359 priv->child[EBOX_AMPM] );
360 gtk_container_add( GTK_CONTAINER(priv->child[EBOX_AMPM]),
361 priv->child[LABEL_AMPM] );
362 gtk_table_attach( table, ampmtotop, placement, placement + 1, 1, 2,
363 GTK_SHRINK, GTK_SHRINK, 0, 0 );
364 gtk_table_set_col_spacing( table, placement - 1, 6 );
366 g_signal_connect( G_OBJECT(priv->child[EBOX_AMPM]), "button-release-event",
367 (GCallback)hildon_time_picker_ampm_release, picker );
368 g_signal_connect( G_OBJECT(priv->child[EBOX_AMPM]), "focus-out-event",
369 (GCallback)hildon_time_picker_event_box_focus_out,
371 g_signal_connect( G_OBJECT(priv->child[EBOX_AMPM]), "focus-in-event",
372 (GCallback)hildon_time_picker_event_box_focus_in, picker );
373 g_signal_connect( G_OBJECT(priv->child[EBOX_AMPM]), "key-release-event",
374 (GCallback)hildon_time_picker_event_box_key_release,
376 g_signal_connect( G_OBJECT(priv->child[EBOX_AMPM]), "key-press-event",
377 (GCallback)hildon_time_picker_event_box_key_press,
380 g_object_set( G_OBJECT(priv->child[EBOX_AMPM]), "can-focus", TRUE, NULL );
381 gtk_widget_set_events( priv->child[EBOX_AMPM],
382 GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_PRESS_MASK );
385 priv->child[FRAME_AMPM] = priv->child[LABEL_AMPM] =
386 priv->child[EBOX_AMPM] = NULL;
388 gtk_widget_pop_composite_child();
390 hildon_time_picker_set_time( picker, local->tm_hour, local->tm_min );
392 settings = gtk_settings_get_default();
393 g_object_get( settings, "gtk-update-timeout", &priv->key_repeat, NULL );
395 for( i = 0; i < 3; i++ )
397 gtk_container_add( GTK_CONTAINER(priv->child[FRAME_HOURS + i]),
398 priv->child[EBOX_HOURS + i] );
399 gtk_container_add( GTK_CONTAINER(priv->child[EBOX_HOURS + i]),
400 priv->child[LABEL_HOURS + i] );
402 /* Connect signals */
403 g_signal_connect( G_OBJECT(priv->child[EBOX_HOURS + i]), "key-release-event",
404 (GCallback)hildon_time_picker_event_box_key_release,
406 g_signal_connect( G_OBJECT(priv->child[EBOX_HOURS + i]), "key-press-event",
407 (GCallback)hildon_time_picker_event_box_key_press,
409 g_signal_connect( G_OBJECT(priv->child[EBOX_HOURS + i]), "focus-in-event",
410 (GCallback)hildon_time_picker_event_box_focus_in, picker );
411 g_signal_connect( G_OBJECT(priv->child[EBOX_HOURS + i]), "focus-out-event",
412 (GCallback)hildon_time_picker_event_box_focus_out,
414 g_signal_connect( G_OBJECT(priv->child[EBOX_HOURS + i]),
415 "button-press-event",
416 (GCallback)hildon_time_picker_event_box_press, NULL );
418 /* Name the buttons */
419 gtk_widget_set_name( priv->child[BUTTON_HOURS_UP + i*2],
420 "hildon-time-picker-up" );
421 gtk_widget_set_name( priv->child[BUTTON_HOURS_DOWN + i*2],
422 "hildon-time-picker-down" );
425 for( i = BUTTON_HOURS_UP; i <= BUTTON_LMINUTES_DOWN; i++ )
427 g_object_set( G_OBJECT(priv->child[i]), "can-focus", FALSE, NULL );
429 /* Connect signals */
430 g_signal_connect( G_OBJECT(priv->child[i]), "button-press-event",
431 (GCallback)hildon_time_picker_arrow_press, picker );
432 g_signal_connect( G_OBJECT(priv->child[i]), "button-release-event",
433 (GCallback)hildon_time_picker_arrow_release, picker );
436 for( i = EBOX_HOURS; i <= EBOX_LMINUTES; i++ )
438 g_object_set( G_OBJECT(priv->child[i]), "can-focus", TRUE, NULL );
441 gtk_widget_set_events( priv->child[i],
442 GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_PRESS_MASK );
445 gtk_window_set_modal( GTK_WINDOW(dialog), FALSE );
446 gtk_dialog_set_has_separator( dialog, FALSE );
447 gtk_dialog_add_button( dialog, _("ecdg_bd_time_picker_close"),
450 gtk_container_add( GTK_CONTAINER(maintocenter), priv->child[TABLE] );
451 gtk_box_pack_start( GTK_BOX(dialog->vbox), maintocenter, TRUE, FALSE, 0 );
452 gtk_widget_show_all( maintocenter );
456 hildon_time_picker_set_property( GObject *object, guint param_id,
457 const GValue *value, GParamSpec *pspec )
459 HildonTimePicker *picker = HILDON_TIME_PICKER(object);
464 hildon_time_picker_change_time( picker, g_value_get_uint(value) );
468 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);
474 hildon_time_picker_get_property( GObject *object, guint param_id,
475 GValue *value, GParamSpec *pspec )
477 HildonTimePickerPrivate *priv = HILDON_TIME_PICKER(object)->priv;
482 g_value_set_uint( value, priv->minutes );
486 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);
492 hildon_time_picker_map( GtkWidget *widget )
496 HildonTimePickerPrivate *priv = HILDON_TIME_PICKER(widget)->priv;
498 gdk_window_set_decorations( widget->window, GDK_DECOR_BORDER );
500 gtk_widget_style_get( widget,
501 "arrow-width", &width,
502 "arrow-height", &height, NULL );
503 for( i=BUTTON_HOURS_UP; i <= BUTTON_LMINUTES_DOWN; i++)
504 gtk_widget_set_size_request( priv->child[i], width, height );
506 GTK_WIDGET_CLASS(parent_class)->map( widget );
511 hildon_time_picker_event_box_press( GtkWidget *widget, GdkEventKey *event,
514 gtk_widget_grab_focus( widget );
519 hildon_time_picker_ampm_release( GtkWidget *widget, GdkEvent *event,
520 HildonTimePicker *picker )
522 gtk_widget_grab_focus( widget );
523 hildon_time_picker_change_time( picker, picker->priv->minutes > 720 ?
524 picker->priv->minutes - 720 :
525 picker->priv->minutes + 720 );
530 hildon_time_picker_arrow_press( GtkWidget *widget, GdkEvent *event,
531 HildonTimePicker *picker )
533 HildonTimePickerPrivate *priv = picker->priv;
536 if( priv->button_press )
539 priv->start_key_repeat = priv->button_press = TRUE;
541 if( widget == priv->child[BUTTON_HOURS_UP] )
544 gtk_widget_grab_focus( priv->child[EBOX_HOURS] );
546 else if( widget == priv->child[BUTTON_MMINUTES_UP] )
549 gtk_widget_grab_focus( priv->child[EBOX_MMINUTES] );
551 else if( widget == priv->child[BUTTON_LMINUTES_UP] )
554 gtk_widget_grab_focus( priv->child[EBOX_LMINUTES] );
556 else if( widget == priv->child[BUTTON_HOURS_DOWN] )
559 gtk_widget_grab_focus( priv->child[EBOX_HOURS] );
561 else if( widget == priv->child[BUTTON_MMINUTES_DOWN] )
564 gtk_widget_grab_focus( priv->child[EBOX_MMINUTES] );
569 gtk_widget_grab_focus( priv->child[EBOX_LMINUTES] );
572 newval = priv->minutes + priv->mul;
576 hildon_time_picker_change_time( picker, newval );
577 priv->timer_id = g_timeout_add( priv->key_repeat * 3, hildon_time_picker_timeout, picker );
582 hildon_time_picker_arrow_release( GtkWidget *widget, GdkEvent *event,
583 HildonTimePicker *picker )
585 HildonTimePickerPrivate *priv = picker->priv;
588 g_source_remove( priv->timer_id );
591 priv->button_press = FALSE;
596 hildon_time_picker_event_box_focus_in( GtkWidget *widget, GdkEvent *event,
599 gtk_widget_set_state( widget, GTK_STATE_SELECTED );
604 hildon_time_picker_event_box_focus_out( GtkWidget *widget, GdkEvent *event,
607 gtk_widget_set_state( widget, GTK_STATE_NORMAL );
612 hildon_time_picker_event_box_key_press( GtkWidget *widget, GdkEventKey *event,
613 HildonTimePicker *picker )
615 HildonTimePickerPrivate *priv = picker->priv;
620 switch( event->keyval )
623 if( widget == priv->child[EBOX_HOURS] )
625 hildon_time_picker_arrow_press( priv->child[BUTTON_HOURS_UP], NULL,
627 gtk_widget_set_state( priv->child[BUTTON_HOURS_UP], GTK_STATE_SELECTED );
629 else if( widget == priv->child[EBOX_MMINUTES] )
631 hildon_time_picker_arrow_press( priv->child[BUTTON_MMINUTES_UP], NULL,
633 gtk_widget_set_state( priv->child[BUTTON_MMINUTES_UP],
634 GTK_STATE_SELECTED );
636 else if( widget == priv->child[EBOX_LMINUTES] )
638 hildon_time_picker_arrow_press( priv->child[BUTTON_LMINUTES_UP], NULL,
640 gtk_widget_set_state( priv->child[BUTTON_LMINUTES_UP],
641 GTK_STATE_SELECTED );
644 hildon_time_picker_ampm_release( priv->child[EBOX_AMPM], NULL, picker );
648 if( widget == priv->child[EBOX_HOURS] )
650 hildon_time_picker_arrow_press( priv->child[BUTTON_HOURS_DOWN], NULL,
652 gtk_widget_set_state( priv->child[BUTTON_HOURS_DOWN],
653 GTK_STATE_SELECTED );
655 else if( widget == priv->child[EBOX_MMINUTES] )
657 hildon_time_picker_arrow_press( priv->child[BUTTON_MMINUTES_DOWN], NULL,
659 gtk_widget_set_state( priv->child[BUTTON_MMINUTES_DOWN],
660 GTK_STATE_SELECTED );
662 else if( widget == priv->child[EBOX_LMINUTES] )
664 hildon_time_picker_arrow_press( priv->child[BUTTON_LMINUTES_DOWN], NULL,
666 gtk_widget_set_state( priv->child[BUTTON_LMINUTES_DOWN],
667 GTK_STATE_SELECTED );
670 hildon_time_picker_ampm_release( priv->child[EBOX_AMPM], NULL, picker );
676 if( !priv->ampm_pos )
678 if( widget == priv->child[EBOX_AMPM] )
681 else if( widget == priv->child[EBOX_HOURS] )
684 else if( widget == priv->child[EBOX_HOURS] )
694 if( widget == priv->child[EBOX_AMPM] )
697 else if( widget == priv->child[EBOX_LMINUTES] )
700 else if( widget == priv->child[EBOX_LMINUTES] )
705 gtk_dialog_response (GTK_DIALOG (picker), GTK_RESPONSE_CANCEL);
709 gtk_dialog_response (GTK_DIALOG (picker), GTK_RESPONSE_OK);
717 hildon_time_picker_event_box_key_release( GtkWidget *widget, GdkEventKey *event,
718 HildonTimePicker *picker )
722 switch( event->keyval )
725 for( i = BUTTON_HOURS_UP; i <= BUTTON_LMINUTES_UP; i += 2 )
726 gtk_widget_set_state( picker->priv->child[i], GTK_STATE_NORMAL );
727 hildon_time_picker_arrow_release( widget, NULL, picker );
731 for( i = BUTTON_HOURS_DOWN; i <= BUTTON_LMINUTES_DOWN; i += 2 )
732 gtk_widget_set_state( picker->priv->child[i], GTK_STATE_NORMAL );
733 hildon_time_picker_arrow_release( widget, NULL, picker );
740 hildon_time_picker_timeout( gpointer data )
742 HildonTimePicker *picker = NULL;
743 HildonTimePickerPrivate *priv = NULL;
749 picker = HILDON_TIME_PICKER(data);
752 if( !picker->priv->timer_id )
755 newval = priv->minutes + priv->mul;
759 hildon_time_picker_change_time( picker, newval );
761 if( priv->start_key_repeat )
763 priv->timer_id = g_timeout_add( priv->key_repeat, hildon_time_picker_timeout, picker );
764 priv->start_key_repeat = FALSE;
774 hildon_time_picker_change_time( HildonTimePicker *picker, guint minutes )
776 HildonTimePickerPrivate *priv = picker->priv;
779 gboolean ampm = TRUE;
783 if( priv->minutes == minutes )
786 priv->minutes = minutes;
790 ampm = !((guint)(minutes / 720));
795 gtk_label_set_text( GTK_LABEL(priv->child[LABEL_AMPM]),
796 ampm ? priv->am_symbol : priv->pm_symbol );
799 hours = minutes / 60;
802 sprintf( str, "%02d", hours );
803 gtk_label_set_text( GTK_LABEL(priv->child[LABEL_HOURS]), str );
805 sprintf( str, "%02d", minutes );
806 gtk_label_set_text( GTK_LABEL(priv->child[LABEL_LMINUTES]), &str[1] );
809 gtk_label_set_text( GTK_LABEL(priv->child[LABEL_MMINUTES]), &str[0] );
811 g_object_notify( G_OBJECT(picker), "minutes" );
815 * hildon_time_picker_new:
816 * @parent: parent window.
818 * Hildon Time Picker shows time picker dialog. Close button is placed
819 * in dialog's action area and time picker is placed in dialogs vbox.
820 * Actual time picker consists two #GtkLabel fields one for hour and
821 * one for minutes, arrow buttons and an AM/PM button. A : is placed
822 * between hour and minute fields.
824 * Return value: pointer to a new #HildonTimePicker widget.
826 GtkWidget *hildon_time_picker_new( GtkWindow *parent )
828 GtkWidget *widget = g_object_new( HILDON_TYPE_TIME_PICKER, NULL );
831 gtk_window_set_transient_for( GTK_WINDOW(widget), parent );
833 return GTK_WIDGET(widget);
837 * hildon_time_picker_set_time:
838 * @picker: the #HildonTimePicker widget.
842 * Sets the time of the #HildonTimePicker widget.
844 void hildon_time_picker_set_time( HildonTimePicker *picker,
845 guint hours, guint minutes )
847 g_return_if_fail( HILDON_IS_TIME_PICKER(picker) );
848 hildon_time_picker_change_time( picker, hours * 60 + minutes );
852 * hildon_time_picker_get_time:
853 * @picker: the #HildonTimePicker widget.
857 * Gets the time of the #HildonTimePicker widget.
859 void hildon_time_picker_get_time( HildonTimePicker *picker,
860 guint *hours, guint *minutes )
863 g_return_if_fail( HILDON_IS_TIME_PICKER(picker) );
865 current = picker->priv->minutes;
866 *hours = current / 60;
867 *minutes = current % 60;