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-new-event-widget.h"
|
||||||
#include "gcal-arrow-bin.h"
|
#include "gcal-arrow-bin.h"
|
||||||
|
#include "gcal-utils.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -32,8 +33,41 @@ typedef struct
|
|||||||
GtkWidget *close_button;
|
GtkWidget *close_button;
|
||||||
} GcalNewEventWidgetPrivate;
|
} GcalNewEventWidgetPrivate;
|
||||||
|
|
||||||
|
static void item_activated (GtkWidget *item,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (GcalNewEventWidget, gcal_new_event_widget, GTK_TYPE_OVERLAY)
|
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
|
static void
|
||||||
gcal_new_event_widget_class_init (GcalNewEventWidgetClass *klass)
|
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);
|
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:
|
* gcal_new_event_widget_get_entry:
|
||||||
* @widget:
|
* @widget:
|
||||||
@@ -127,3 +280,40 @@ gcal_new_event_widget_get_close_button (GcalNewEventWidget *widget)
|
|||||||
priv = gcal_new_event_widget_get_instance_private (widget);
|
priv = gcal_new_event_widget_get_instance_private (widget);
|
||||||
return priv->close_button;
|
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)));
|
||||||
|
}
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ GtkWidget* gcal_new_event_widget_new (void);
|
|||||||
void gcal_new_event_widget_set_title (GcalNewEventWidget *widget,
|
void gcal_new_event_widget_set_title (GcalNewEventWidget *widget,
|
||||||
const gchar *title);
|
const gchar *title);
|
||||||
|
|
||||||
|
void gcal_new_event_widget_set_calendars (GcalNewEventWidget *widget,
|
||||||
|
GtkTreeModel *sources_model);
|
||||||
|
|
||||||
|
void gcal_new_event_widget_set_default_calendar (GcalNewEventWidget *widget,
|
||||||
|
const gchar *source_uid);
|
||||||
|
|
||||||
GtkWidget* gcal_new_event_widget_get_entry (GcalNewEventWidget *widget);
|
GtkWidget* gcal_new_event_widget_get_entry (GcalNewEventWidget *widget);
|
||||||
|
|
||||||
GtkWidget* gcal_new_event_widget_get_create_button (GcalNewEventWidget *widget);
|
GtkWidget* gcal_new_event_widget_get_create_button (GcalNewEventWidget *widget);
|
||||||
@@ -71,6 +77,10 @@ GtkWidget* gcal_new_event_widget_get_details_button (GcalNewEventWidget *wi
|
|||||||
|
|
||||||
GtkWidget* gcal_new_event_widget_get_close_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
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GCAL_NEW_EVENT_WIDGET_H__ */
|
#endif /* __GCAL_NEW_EVENT_WIDGET_H__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user