aboutsummaryrefslogtreecommitdiff
path: root/src/idoappointmentmenuitem.c
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2013-07-25 18:34:23 -0500
committerCharles Kerr <charles.kerr@canonical.com>2013-07-25 18:34:23 -0500
commitc823c870af34a67acf9ec718b96559afc9886afa (patch)
treecbc52ccf4eae2058795de43b555f670f166a8dcc /src/idoappointmentmenuitem.c
parent897843772fb6219f0cd723cd6ffddaaccd2365a5 (diff)
downloadayatana-ido-c823c870af34a67acf9ec718b96559afc9886afa.tar.gz
ayatana-ido-c823c870af34a67acf9ec718b96559afc9886afa.tar.bz2
ayatana-ido-c823c870af34a67acf9ec718b96559afc9886afa.zip
implement IdoAppointmentMenuItem as a specialization of IdoTimeStampMenuItem
Diffstat (limited to 'src/idoappointmentmenuitem.c')
-rw-r--r--src/idoappointmentmenuitem.c298
1 files changed, 16 insertions, 282 deletions
diff --git a/src/idoappointmentmenuitem.c b/src/idoappointmentmenuitem.c
index e5bea24..b383729 100644
--- a/src/idoappointmentmenuitem.c
+++ b/src/idoappointmentmenuitem.c
@@ -22,182 +22,12 @@
#include "config.h"
#endif
-#include <string.h> /* strstr() */
-
#include <gtk/gtk.h>
#include "idoactionhelper.h"
-#include "idoappointmentmenuitem.h"
-
-enum
-{
- PROP_0,
- PROP_COLOR,
- PROP_TIME,
- PROP_FORMAT,
- PROP_LAST
-};
-
-static GParamSpec *properties[PROP_LAST];
-
-struct _IdoAppointmentMenuItemPrivate
-{
- char * summary;
- char * format;
- char * color_string;
- GDateTime * date_time;
-};
-
-typedef IdoAppointmentMenuItemPrivate priv_t;
-
-G_DEFINE_TYPE (IdoAppointmentMenuItem,
- ido_appointment_menu_item,
- IDO_TYPE_BASIC_MENU_ITEM);
-
-/***
-**** GObject Virtual Functions
-***/
-
-static void
-my_get_property (GObject * o,
- guint property_id,
- GValue * v,
- GParamSpec * pspec)
-{
- IdoAppointmentMenuItem * self = IDO_APPOINTMENT_MENU_ITEM (o);
- priv_t * p = self->priv;
-
- switch (property_id)
- {
- case PROP_COLOR:
- g_value_set_string (v, p->color_string);
- break;
-
- case PROP_FORMAT:
- g_value_set_string (v, p->format);
- break;
-
- case PROP_TIME:
- g_value_set_uint64 (v, g_date_time_to_unix (p->date_time));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (o, property_id, pspec);
- break;
- }
-}
-
-static void
-my_set_property (GObject * o,
- guint property_id,
- const GValue * v,
- GParamSpec * pspec)
-{
- IdoAppointmentMenuItem * self = IDO_APPOINTMENT_MENU_ITEM (o);
-
- switch (property_id)
- {
- case PROP_COLOR:
- ido_appointment_menu_item_set_color (self, g_value_get_string (v));
- break;
-
- case PROP_FORMAT:
- ido_appointment_menu_item_set_format (self, g_value_get_string (v));
- break;
-
- case PROP_TIME:
- ido_appointment_menu_item_set_time (self, g_value_get_int64 (v));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (o, property_id, pspec);
- break;
- }
-}
-
-static void
-my_dispose (GObject * object)
-{
- IdoAppointmentMenuItem * self = IDO_APPOINTMENT_MENU_ITEM (object);
- priv_t * p = self->priv;
-
- g_clear_pointer (&p->date_time, g_date_time_unref);
-
- G_OBJECT_CLASS (ido_appointment_menu_item_parent_class)->dispose (object);
-}
-
-static void
-my_finalize (GObject * object)
-{
- IdoAppointmentMenuItem * self = IDO_APPOINTMENT_MENU_ITEM (object);
- priv_t * p = self->priv;
-
- g_free (p->color_string);
- g_free (p->summary);
- g_free (p->format);
-
- G_OBJECT_CLASS (ido_appointment_menu_item_parent_class)->finalize (object);
-}
-
-/***
-**** Instantiation
-***/
-
-static void
-ido_appointment_menu_item_class_init (IdoAppointmentMenuItemClass *klass)
-{
- GParamFlags prop_flags;
- GObjectClass * gobject_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (IdoAppointmentMenuItemPrivate));
-
- gobject_class->get_property = my_get_property;
- gobject_class->set_property = my_set_property;
- gobject_class->dispose = my_dispose;
- gobject_class->finalize = my_finalize;
-
- prop_flags = G_PARAM_CONSTRUCT
- | G_PARAM_READWRITE
- | G_PARAM_STATIC_STRINGS;
-
- properties[PROP_COLOR] = g_param_spec_string (
- "color",
- "Color",
- "Color coding for the appointment's type",
- "White",
- prop_flags);
-
- properties[PROP_TIME] = g_param_spec_int64 (
- "time",
- "Time",
- "unix time_t specifying when the appointment begins",
- 0, G_MAXINT64, 0,
- prop_flags);
-
- properties[PROP_FORMAT] = g_param_spec_string (
- "format",
- "strftime format",
- "strftime-style format string for the timestamp",
- "%F %T",
- prop_flags);
+#include "idotimestampmenuitem.h"
- g_object_class_install_properties (gobject_class, PROP_LAST, properties);
-}
-
-static void
-ido_appointment_menu_item_init (IdoAppointmentMenuItem *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- IDO_APPOINTMENT_MENU_ITEM_TYPE,
- IdoAppointmentMenuItemPrivate);
-
-}
-
-/***
-****
-***/
-
-/* creates a menu-sized pixbuf filled with specified color */
+/* create a menu-sized pixbuf filled with specified color */
static GdkPixbuf *
create_color_icon_pixbuf (const char * color_spec)
{
@@ -239,103 +69,6 @@ create_color_icon_pixbuf (const char * color_spec)
return pixbuf;
}
-static void
-update_timestamp_label (IdoAppointmentMenuItem * self)
-{
- char * str;
- priv_t * p = self->priv;
-
- if (p->date_time && p->format)
- str = g_date_time_format (p->date_time, p->format);
- else
- str = NULL;
-
- ido_basic_menu_item_set_secondary_text (IDO_BASIC_MENU_ITEM (self), str);
- g_free (str);
-}
-
-/***
-**** Public API
-***/
-
-/* create a new IdoAppointmentMenuItem */
-GtkWidget *
-ido_appointment_menu_item_new (void)
-{
- return GTK_WIDGET (g_object_new (IDO_APPOINTMENT_MENU_ITEM_TYPE, NULL));
-}
-
-/**
- * ido_appointment_menu_item_set_color:
- * @color: parseable color string
- *
- * When this is set, the menuitem will include an icon with this color.
- *
- * These colors can be set in the end user's calendar app as a quick visual cue
- * to show what kind of appointment this is.
- */
-void
-ido_appointment_menu_item_set_color (IdoAppointmentMenuItem * self,
- const char * color_string)
-{
- priv_t * p;
- GdkPixbuf * pixbuf;
-
- g_return_if_fail (IDO_IS_APPOINTMENT_MENU_ITEM (self));
- p = self->priv;
-
- g_free (p->color_string);
- p->color_string = g_strdup (color_string);
-
- pixbuf = create_color_icon_pixbuf (p->color_string);
- ido_basic_menu_item_set_icon (IDO_BASIC_MENU_ITEM(self), G_ICON(pixbuf));
- g_object_unref (G_OBJECT(pixbuf));
-}
-
-/**
- * ido_appointment_menu_item_set_time:
- * @time: the time to be rendered in the appointment's timestamp label.
- *
- * Set the time that will be displayed in the menuitem's
- * right-justified timestamp label
- */
-void
-ido_appointment_menu_item_set_time (IdoAppointmentMenuItem * self,
- time_t time)
-{
- priv_t * p;
-
- g_return_if_fail (IDO_IS_APPOINTMENT_MENU_ITEM (self));
- p = self->priv;
-
- g_clear_pointer (&p->date_time, g_date_time_unref);
- p->date_time = g_date_time_new_from_unix_local (time);
- update_timestamp_label (self);
-}
-
-/**
- * ido_appointment_menu_item_set_format:
- * @format: the format string used when showing the appointment's time
- *
- * Set the format string for rendering the appointment's time
- * in its right-justified secondary label.
- *
- * See strfrtime(3) for more information on the format string.
- */
-void
-ido_appointment_menu_item_set_format (IdoAppointmentMenuItem * self,
- const char * strftime_fmt)
-{
- priv_t * p;
-
- g_return_if_fail (IDO_IS_APPOINTMENT_MENU_ITEM (self));
- p = self->priv;
-
- g_free (p->format);
- p->format = g_strdup (strftime_fmt);
- update_timestamp_label (self);
-}
-
/**
* ido_appointment_menu_item_new_from_model:
* @menu_item: the corresponding menuitem
@@ -355,10 +88,10 @@ ido_appointment_menu_item_new_from_model (GMenuItem * menu_item,
guint n;
gint64 i64;
gchar * str;
- IdoAppointmentMenuItem * ido_appointment;
+ IdoBasicMenuItem * ido_menu_item;
GParameter parameters[8];
- /* create the ido_appointment */
+ /* create the ido_menu_item */
n = 0;
@@ -372,10 +105,11 @@ ido_appointment_menu_item_new_from_model (GMenuItem * menu_item,
if (g_menu_item_get_attribute (menu_item, "x-canonical-color", "s", &str))
{
- GParameter p = { "color", G_VALUE_INIT };
- g_value_init (&p.value, G_TYPE_STRING);
- g_value_take_string (&p.value, str);
+ GParameter p = { "icon", G_VALUE_INIT };
+ g_value_init (&p.value, G_TYPE_OBJECT);
+ g_value_take_object (&p.value, create_color_icon_pixbuf (str));
parameters[n++] = p;
+ g_free (str);
}
if (g_menu_item_get_attribute (menu_item, "x-canonical-time-format", "s", &str))
@@ -388,14 +122,14 @@ ido_appointment_menu_item_new_from_model (GMenuItem * menu_item,
if (g_menu_item_get_attribute (menu_item, "x-canonical-time", "x", &i64))
{
- GParameter p = { "time", G_VALUE_INIT };
- g_value_init (&p.value, G_TYPE_INT64);
- g_value_set_int64 (&p.value, i64);
+ GParameter p = { "date-time", G_VALUE_INIT };
+ g_value_init (&p.value, G_TYPE_DATE_TIME);
+ g_value_take_boxed (&p.value, g_date_time_new_from_unix_local (i64));
parameters[n++] = p;
}
g_assert (n <= G_N_ELEMENTS (parameters));
- ido_appointment = g_object_newv (IDO_APPOINTMENT_MENU_ITEM_TYPE, n, parameters);
+ ido_menu_item = g_object_newv (IDO_TYPE_TIME_STAMP_MENU_ITEM, n, parameters);
for (i=0; i<n; i++)
g_value_unset (&parameters[i].value);
@@ -410,16 +144,16 @@ ido_appointment_menu_item_new_from_model (GMenuItem * menu_item,
target = g_menu_item_get_attribute_value (menu_item, "target",
G_VARIANT_TYPE_ANY);
- helper = ido_action_helper_new (GTK_WIDGET(ido_appointment), actions,
+ helper = ido_action_helper_new (GTK_WIDGET(ido_menu_item), actions,
str, target);
- g_signal_connect_swapped (ido_appointment, "activate",
+ g_signal_connect_swapped (ido_menu_item, "activate",
G_CALLBACK (ido_action_helper_activate), helper);
- g_signal_connect_swapped (ido_appointment, "destroy",
+ g_signal_connect_swapped (ido_menu_item, "destroy",
G_CALLBACK (g_object_unref), helper);
g_clear_pointer (&target, g_variant_unref);
g_free (str);
}
- return GTK_MENU_ITEM (ido_appointment);
+ return GTK_MENU_ITEM (ido_menu_item);
}