From 2be9c125dd31471710f018931ab7bd2865f3c07e Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 18 Dec 2014 15:24:44 -0200 Subject: [PATCH] date-selector: load popover with date selector --- data/ui/date-selector.ui | 41 ++++++++++++++++--------- src/gcal-date-selector.c | 66 ++++++++++++++++++++++++++++++++++------ 2 files changed, 82 insertions(+), 25 deletions(-) diff --git a/data/ui/date-selector.ui b/data/ui/date-selector.ui index 997de6e5..8b887846 100644 --- a/data/ui/date-selector.ui +++ b/data/ui/date-selector.ui @@ -8,13 +8,32 @@ 12 6 - + + True + True + 2014 + 11 + 18 + True + + + 0 + 1 + + + + True False + True + True True True + 4 + 0.5 + number False @@ -26,6 +45,9 @@ True True + 4 + 0.5 + number @@ -40,6 +62,9 @@ True True + 4 + 0.5 + number False @@ -56,19 +81,5 @@ 0 - - - True - True - 2014 - 11 - 18 - True - - - 0 - 1 - - diff --git a/src/gcal-date-selector.c b/src/gcal-date-selector.c index 1fdd459c..d034d360 100644 --- a/src/gcal-date-selector.c +++ b/src/gcal-date-selector.c @@ -23,19 +23,31 @@ #include #include +enum +{ + DAY, + MONTH, + YEAR, + NUM_ENTRIES +}; + struct _GcalDateSelectorPrivate { - gboolean internal_skip; + GtkWidget *date_label; + GtkWidget *popover; + GtkWidget *entries[NUM_ENTRIES]; - gint day; - gint month; - gint year; + gint day; + gint month; + gint year; - gchar *mask; - guint day_pos; - guint month_pos; - guint year_pos; - gboolean have_long_year; + gchar *mask; + guint day_pos; + guint month_pos; + guint year_pos; + gboolean have_long_year; + + gboolean format_24h; }; enum @@ -76,13 +88,13 @@ gcal_date_selector_init (GcalDateSelector *self) priv = gcal_date_selector_get_instance_private (GCAL_DATE_SELECTOR (self));; - priv->internal_skip = FALSE; priv->day = 1; priv->month = 1; priv->year = 1970; setlocale (LC_ALL,""); priv->mask = nl_langinfo (D_FMT); + g_debug ("Mask: %s", priv->mask); priv->day_pos = - (priv->mask - g_strstr_len (priv->mask, -1, "%d")); priv->month_pos = - (priv->mask - g_strstr_len (priv->mask, -1, "%m")); @@ -106,11 +118,45 @@ static void gcal_date_selector_constructed (GObject *object) { GcalDateSelectorPrivate *priv; + GtkWidget *grid; + GtkBuilder *builder; + + GSettings *settings; + gchar *clock_format; priv = gcal_date_selector_get_instance_private (GCAL_DATE_SELECTOR (object)); /* chaining up */ G_OBJECT_CLASS (gcal_date_selector_parent_class)->constructed (object); + + /* 24h setting */ + settings = g_settings_new ("org.gnome.desktop.interface"); + clock_format = g_settings_get_string (settings, "clock-format"); + priv->format_24h = (g_strcmp0 (clock_format, "24h") == 0); + + g_free (clock_format); + g_object_unref (settings); + + /* date label */ + priv->date_label = gtk_label_new (NULL); + gtk_widget_show (priv->date_label); + + gtk_container_add (GTK_CONTAINER (object), priv->date_label); + + /* retrieve components from UI definition */ + builder = gtk_builder_new (); + gtk_builder_add_from_resource (builder, "/org/gnome/calendar/date-selector.ui", NULL); + + /* popover */ + priv->popover = gtk_popover_new (GTK_WIDGET (object)); + gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_BOTTOM); + + /* main grid */ + grid = (GtkWidget*) gtk_builder_get_object (builder, "grid"); + g_object_ref (grid); + + gtk_container_add (GTK_CONTAINER (priv->popover), grid); + g_object_bind_property (priv->popover, "visible", object, "active", G_BINDING_BIDIRECTIONAL); } /* Public API */