gcal-new-event-widget: finished API
Added method to set calendars Added method to set default calendar Added method to get selected calendar Added method to get entered smmary string Fixed formatting issues
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
|
||||
#include "gcal-new-event-widget.h"
|
||||
#include "gcal-arrow-bin.h"
|
||||
#include "gcal-utils.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -32,8 +33,41 @@ typedef struct
|
||||
GtkWidget *close_button;
|
||||
} GcalNewEventWidgetPrivate;
|
||||
|
||||
static void item_activated (GtkWidget *item,
|
||||
gpointer user_data);
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (GcalNewEventWidget, gcal_new_event_widget, GTK_TYPE_OVERLAY)
|
||||
|
||||
static void
|
||||
item_activated (GtkWidget *item,
|
||||
gpointer user_data)
|
||||
{
|
||||
GcalNewEventWidgetPrivate *priv;
|
||||
|
||||
gchar *uid;
|
||||
gchar *color_name;
|
||||
GdkColor color;
|
||||
|
||||
GdkPixbuf *pix;
|
||||
GtkWidget *image;
|
||||
|
||||
priv = gcal_new_event_widget_get_instance_private (
|
||||
GCAL_NEW_EVENT_WIDGET (user_data));
|
||||
|
||||
uid = g_object_get_data (G_OBJECT (item), "calendar-uid");
|
||||
color_name = g_object_get_data (G_OBJECT (item), "color");
|
||||
gdk_color_parse (color_name, &color);
|
||||
|
||||
pix = gcal_get_pixbuf_from_color (&color, 16);
|
||||
image = gtk_image_new_from_pixbuf (pix);
|
||||
gtk_button_set_image (GTK_BUTTON (priv->calendar_button), image);
|
||||
|
||||
/* saving the value */
|
||||
g_object_set_data (G_OBJECT (priv->calendar_button),
|
||||
"calendar-uid", uid);
|
||||
g_object_unref (pix);
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_new_event_widget_class_init (GcalNewEventWidgetClass *klass)
|
||||
{
|
||||
@@ -76,6 +110,125 @@ gcal_new_event_widget_set_title (GcalNewEventWidget *widget,
|
||||
gtk_label_set_text (GTK_LABEL (priv->title_label), title);
|
||||
}
|
||||
|
||||
void
|
||||
gcal_new_event_widget_set_calendars (GcalNewEventWidget *widget,
|
||||
GtkTreeModel *sources_model)
|
||||
{
|
||||
GcalNewEventWidgetPrivate *priv;
|
||||
GtkWidget *menu;
|
||||
GtkWidget *item;
|
||||
|
||||
gboolean valid;
|
||||
GtkTreeIter iter;
|
||||
|
||||
priv = gcal_new_event_widget_get_instance_private (widget);
|
||||
|
||||
valid = gtk_tree_model_get_iter_first (sources_model, &iter);
|
||||
if (! valid)
|
||||
return;
|
||||
|
||||
menu = gtk_menu_new ();
|
||||
gtk_menu_button_set_popup (GTK_MENU_BUTTON (priv->calendar_button), menu);
|
||||
|
||||
while (valid)
|
||||
{
|
||||
/* Walk through the list, reading each row */
|
||||
gchar *uid;
|
||||
gchar *name;
|
||||
gboolean active;
|
||||
GdkColor *color;
|
||||
|
||||
GtkWidget *box;
|
||||
GtkWidget *name_label;
|
||||
GtkWidget *cal_image;
|
||||
GdkPixbuf *pix;
|
||||
|
||||
gtk_tree_model_get (sources_model, &iter,
|
||||
0, &uid,
|
||||
1, &name,
|
||||
2, &active,
|
||||
3, &color,
|
||||
-1);
|
||||
|
||||
if (! active)
|
||||
{
|
||||
valid = gtk_tree_model_iter_next (sources_model, &iter);
|
||||
continue;
|
||||
}
|
||||
|
||||
item = gtk_menu_item_new ();
|
||||
g_object_set_data_full (G_OBJECT (item),
|
||||
"calendar-uid", uid, g_free);
|
||||
g_object_set_data_full (G_OBJECT (item),
|
||||
"color", gdk_color_to_string (color), g_free);
|
||||
g_signal_connect (item,
|
||||
"activate",
|
||||
G_CALLBACK (item_activated),
|
||||
widget);
|
||||
|
||||
pix = gcal_get_pixbuf_from_color (color, 16);
|
||||
cal_image = gtk_image_new_from_pixbuf (pix);
|
||||
name_label = gtk_label_new (name);
|
||||
box = gtk_grid_new ();
|
||||
gtk_grid_set_column_spacing (GTK_GRID (box), 6);
|
||||
gtk_container_add (GTK_CONTAINER (box), cal_image);
|
||||
gtk_container_add (GTK_CONTAINER (box), name_label);
|
||||
gtk_container_add (GTK_CONTAINER (item), box);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (menu), item);
|
||||
|
||||
g_object_unref (pix);
|
||||
g_free (name);
|
||||
gdk_color_free (color);
|
||||
|
||||
valid = gtk_tree_model_iter_next (sources_model, &iter);
|
||||
}
|
||||
|
||||
gtk_widget_show_all (GTK_WIDGET (menu));
|
||||
}
|
||||
|
||||
void
|
||||
gcal_new_event_widget_set_default_calendar (GcalNewEventWidget *widget,
|
||||
const gchar *source_uid)
|
||||
{
|
||||
GcalNewEventWidgetPrivate *priv;
|
||||
|
||||
GList *l;
|
||||
GtkMenu *menu;
|
||||
|
||||
gchar *uid;
|
||||
gchar *color_name;
|
||||
GdkColor color;
|
||||
GdkPixbuf *pix;
|
||||
GtkWidget *image;
|
||||
|
||||
priv = gcal_new_event_widget_get_instance_private (widget);
|
||||
|
||||
menu = gtk_menu_button_get_popup (GTK_MENU_BUTTON (priv->calendar_button));
|
||||
for (l = gtk_container_get_children (GTK_CONTAINER (menu));
|
||||
l != NULL;
|
||||
l = l->next)
|
||||
{
|
||||
GObject *item = l->data;
|
||||
uid = g_object_get_data (item, "calendar-uid");
|
||||
if (g_strcmp0 (source_uid, uid) == 0)
|
||||
{
|
||||
color_name = g_object_get_data (item, "color");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gdk_color_parse (color_name, &color);
|
||||
pix = gcal_get_pixbuf_from_color (&color, 16);
|
||||
image = gtk_image_new_from_pixbuf (pix);
|
||||
gtk_button_set_image (GTK_BUTTON (priv->calendar_button), image);
|
||||
|
||||
/* saving the value */
|
||||
g_object_set_data (G_OBJECT (priv->calendar_button),
|
||||
"calendar-uid", uid);
|
||||
g_object_unref (pix);
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_new_event_widget_get_entry:
|
||||
* @widget:
|
||||
@@ -127,3 +280,40 @@ gcal_new_event_widget_get_close_button (GcalNewEventWidget *widget)
|
||||
priv = gcal_new_event_widget_get_instance_private (widget);
|
||||
return priv->close_button;
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_new_event_widget_get_calendar_uid:
|
||||
* @widget: a #GcalNewEventWidget
|
||||
*
|
||||
* Returns the selected calendar uid.
|
||||
*
|
||||
* Returns: (transfer full) a c-string
|
||||
**/
|
||||
gchar*
|
||||
gcal_new_event_widget_get_calendar_uid (GcalNewEventWidget *widget)
|
||||
{
|
||||
GcalNewEventWidgetPrivate *priv;
|
||||
|
||||
priv = gcal_new_event_widget_get_instance_private (widget);
|
||||
|
||||
return g_strdup (g_object_get_data (G_OBJECT (priv->calendar_button),
|
||||
"calendar-uid"));
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_new_event_widget_get_summary:
|
||||
* @widget: a #GcalNewEventWidget
|
||||
*
|
||||
* Return the summary written down in the entry
|
||||
*
|
||||
* Returns: (transfer full) a c-string
|
||||
**/
|
||||
gchar*
|
||||
gcal_new_event_widget_get_summary (GcalNewEventWidget *widget)
|
||||
{
|
||||
GcalNewEventWidgetPrivate *priv;
|
||||
|
||||
priv = gcal_new_event_widget_get_instance_private (widget);
|
||||
|
||||
return g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->what_entry)));
|
||||
}
|
||||
|
||||
@@ -58,18 +58,28 @@ struct _GcalNewEventWidgetClass
|
||||
|
||||
GType gcal_new_event_widget_get_type (void);
|
||||
|
||||
GtkWidget* gcal_new_event_widget_new (void);
|
||||
GtkWidget* gcal_new_event_widget_new (void);
|
||||
|
||||
void gcal_new_event_widget_set_title (GcalNewEventWidget *widget,
|
||||
const gchar *title);
|
||||
void gcal_new_event_widget_set_title (GcalNewEventWidget *widget,
|
||||
const gchar *title);
|
||||
|
||||
GtkWidget* gcal_new_event_widget_get_entry (GcalNewEventWidget *widget);
|
||||
void gcal_new_event_widget_set_calendars (GcalNewEventWidget *widget,
|
||||
GtkTreeModel *sources_model);
|
||||
|
||||
GtkWidget* gcal_new_event_widget_get_create_button (GcalNewEventWidget *widget);
|
||||
void gcal_new_event_widget_set_default_calendar (GcalNewEventWidget *widget,
|
||||
const gchar *source_uid);
|
||||
|
||||
GtkWidget* gcal_new_event_widget_get_details_button (GcalNewEventWidget *widget);
|
||||
GtkWidget* gcal_new_event_widget_get_entry (GcalNewEventWidget *widget);
|
||||
|
||||
GtkWidget* gcal_new_event_widget_get_close_button (GcalNewEventWidget *widget);
|
||||
GtkWidget* gcal_new_event_widget_get_create_button (GcalNewEventWidget *widget);
|
||||
|
||||
GtkWidget* gcal_new_event_widget_get_details_button (GcalNewEventWidget *widget);
|
||||
|
||||
GtkWidget* gcal_new_event_widget_get_close_button (GcalNewEventWidget *widget);
|
||||
|
||||
gchar* gcal_new_event_widget_get_calendar_uid (GcalNewEventWidget *widget);
|
||||
|
||||
gchar* gcal_new_event_widget_get_summary (GcalNewEventWidget *widget);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
||||
Reference in New Issue
Block a user