TOTAL_TIME_COLUMNS
};
+enum
+{
+ PROP_0,
+ PROP_MINUTES_STEP
+};
+
struct _HildonTimeSelectorPrivate
{
GtkTreeModel *hours_model;
GtkTreeModel *minutes_model;
GtkTreeModel *ampm_model;
+ guint minutes_step;
gboolean ampm_format; /* if using am/pm format or 24 h one */
gboolean pm; /* if we are on pm (only useful if ampm_format == TRUE) */
static GObject* hildon_time_selector_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_params);
+static void hildon_time_selector_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void hildon_time_selector_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
/* private functions */
static GtkTreeModel *_create_hours_model (HildonTimeSelector * selector);
-static GtkTreeModel *_create_minutes_model (HildonTimeSelector * selector);
+static GtkTreeModel *_create_minutes_model (guint minutes_step);
static GtkTreeModel *_create_ampm_model (HildonTimeSelector * selector);
static void _get_real_time (gint * hours, gint * minutes);
static void _check_ampm_format (HildonTimeSelector * selector);
static void _set_pm (HildonTimeSelector * selector, gboolean pm);
-static gchar *_custom_print_func (HildonTouchSelector * selector);
+static gchar *_custom_print_func (HildonTouchSelector * selector,
+ gpointer user_data);
static void
hildon_time_selector_class_init (HildonTimeSelectorClass * class)
container_class = (GtkContainerClass *) class;
/* GObject */
+ gobject_class->get_property = hildon_time_selector_get_property;
+ gobject_class->set_property = hildon_time_selector_set_property;
gobject_class->constructor = hildon_time_selector_constructor;
gobject_class->finalize = hildon_time_selector_finalize;
+ g_object_class_install_property (gobject_class,
+ PROP_MINUTES_STEP,
+ g_param_spec_uint ("minutes-step",
+ "Step between minutes in the model",
+ "Step between the minutes in the list of"
+ " options of the widget ",
+ 1, 30, 1,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+
/* GtkWidget */
/* GtkContainer */
selector = HILDON_TIME_SELECTOR (object);
+ selector->priv->hours_model = _create_hours_model (selector);
+
+ column = hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector),
+ selector->priv->hours_model, TRUE);
+ g_object_set (column, "text-column", 0, NULL);
+
+
/* we need initialization parameters in order to create minute models*/
- selector->priv->minutes_model = _create_minutes_model (selector);
+ selector->priv->minutes_step = selector->priv->minutes_step ? selector->priv->minutes_step : 1;
+
+ selector->priv->minutes_model = _create_minutes_model (selector->priv->minutes_step);
column = hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector),
selector->priv->minutes_model, TRUE);
g_object_set (column, "text-column", 0, NULL);
+ if (selector->priv->ampm_format) {
+ selector->priv->ampm_model = _create_ampm_model (selector);
+
+ hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector),
+ selector->priv->ampm_model, TRUE);
+
+ g_signal_connect (G_OBJECT (selector),
+ "changed", G_CALLBACK (_manage_ampm_selection_cb),
+ NULL);
+ }
+
+
/* By default we should select the current day */
hildon_time_selector_set_time (selector,
selector->priv->creation_hours,
static void
hildon_time_selector_init (HildonTimeSelector * selector)
{
- HildonTouchSelectorColumn *column = NULL;
-
selector->priv = HILDON_TIME_SELECTOR_GET_PRIVATE (selector);
GTK_WIDGET_SET_FLAGS (GTK_WIDGET (selector), GTK_NO_WINDOW);
_check_ampm_format (selector);
- selector->priv->hours_model = _create_hours_model (selector);
+}
- column = hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector),
- selector->priv->hours_model, TRUE);
- g_object_set (column, "text-column", 0, NULL);
+static void
+hildon_time_selector_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ HildonTimeSelectorPrivate *priv = HILDON_TIME_SELECTOR_GET_PRIVATE (object);
+ switch (param_id)
+ {
+ case PROP_MINUTES_STEP:
+ g_value_set_uint (value, priv->minutes_step);
+ break;
- if (selector->priv->ampm_format) {
- selector->priv->ampm_model = _create_ampm_model (selector);
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
- hildon_touch_selector_append_text_column (HILDON_TOUCH_SELECTOR (selector),
- selector->priv->ampm_model, TRUE);
+static void
+hildon_time_selector_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ HildonTimeSelectorPrivate *priv = HILDON_TIME_SELECTOR_GET_PRIVATE (object);
- g_signal_connect (G_OBJECT (selector),
- "changed", G_CALLBACK (_manage_ampm_selection_cb),
- NULL);
- }
+ switch (param_id)
+ {
+ case PROP_MINUTES_STEP:
+ priv->minutes_step = g_value_get_uint (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
}
static void
hildon_time_selector_finalize (GObject * object)
{
- HildonTimeSelector *selector = NULL;
-
- selector = HILDON_TIME_SELECTOR (object);
-
/* FIXME: FILL ME !! */
(*G_OBJECT_CLASS (hildon_time_selector_parent_class)->finalize) (object);
/* ------------------------------ PRIVATE METHODS ---------------------------- */
static gchar *
-_custom_print_func (HildonTouchSelector * touch_selector)
+_custom_print_func (HildonTouchSelector * touch_selector,
+ gpointer user_data)
{
gchar *result = NULL;
struct tm tm = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
}
static GtkTreeModel *
-_create_minutes_model (HildonTimeSelector * selector)
+_create_minutes_model (guint minutes_step)
{
GtkListStore *store_minutes = NULL;
gint i = 0;
GtkTreeIter iter;
store_minutes = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
- for (i = 0; i <= 59; i++) {
+ for (i = 0; i <= 59; i=i+minutes_step) {
tm.tm_min = i;
strftime (label, 255, _("wdgt_va_minutes"), &tm);
g_return_if_fail (HILDON_IS_TIME_SELECTOR (touch_selector));
selector = HILDON_TIME_SELECTOR (touch_selector);
- if (num_column == COLUMN_AMPM) {
- hildon_touch_selector_get_selected (HILDON_TOUCH_SELECTOR (selector),
- COLUMN_AMPM, &iter);
- gtk_tree_model_get (selector->priv->ampm_model, &iter, COLUMN_INT, &pm, -1);
+ if (num_column == COLUMN_AMPM &&
+ hildon_touch_selector_get_selected (HILDON_TOUCH_SELECTOR (selector),
+ COLUMN_AMPM, &iter)) {
+ gtk_tree_model_get (selector->priv->ampm_model, &iter, COLUMN_INT, &pm, -1);
selector->priv->pm = pm;
}
return g_object_new (HILDON_TYPE_TIME_SELECTOR, NULL);
}
+
+/**
+ * hildon_time_selector_new_step:
+ *
+ * Creates a new #HildonTimeSelector
+ * @minutes_step: step between the minutes we are going to show in the
+ * selector
+ *
+ * Returns: a new #HildonTimeSelector
+ *
+ * Since: 2.2
+ **/
+GtkWidget *
+hildon_time_selector_new_step (guint minutes_step)
+{
+ return g_object_new (HILDON_TYPE_TIME_SELECTOR, "minutes-step",
+ minutes_step, NULL);
+}
+
/**
* hildon_time_selector_set_time
* @selector: the #HildonTimeSelector
GtkTreeIter iter;
gint hours_item = 0;
- g_return_val_if_fail (hours >= 0 && hours <= 23, FALSE);
- g_return_val_if_fail (minutes >= 0 && minutes <= 59, FALSE);
+ g_return_val_if_fail (hours <= 23, FALSE);
+ g_return_val_if_fail (minutes <= 59, FALSE);
if (selector->priv->ampm_format) {
_set_pm (selector, hours >= 12);
hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector),
COLUMN_HOURS, &iter, FALSE);
+ g_assert (selector->priv->minutes_step>0);
+ minutes = minutes/selector->priv->minutes_step;
gtk_tree_model_iter_nth_child (selector->priv->minutes_model, &iter, NULL,
minutes);
hildon_touch_selector_select_iter (HILDON_TOUCH_SELECTOR (selector),