Added a bunch of changes.

Fixed some minors align issues
Added method to GcalManager to get dtstart from events
Added method to GcalManager to sync COLUMN_ACTIVE with GcalManagerUnit::enabled
attribute
Added method for receiving button press events of view in GcalWindow
This commit is contained in:
Erick Pérez Castellanos
2012-05-15 23:32:29 -04:00
parent 99a89e0e24
commit a873e0b73f
4 changed files with 121 additions and 45 deletions
+1 -13
View File
@@ -50,8 +50,6 @@ static gboolean gcal_floating_container_draw (GtkWidge
static void gcal_floating_container_realize (GtkWidget *widget);
static void gcal_floating_container_unrealize (GtkWidget *widget);
static void gcal_floating_container_style_updated (GtkWidget *widget);
static void gcal_floating_container_add (GtkContainer *container,
@@ -82,7 +80,6 @@ gcal_floating_container_class_init (GcalFloatingContainerClass *klass)
widget_class->size_allocate = gcal_floating_container_size_allocate;
widget_class->draw = gcal_floating_container_draw;
widget_class->realize = gcal_floating_container_realize;
widget_class->unrealize = gcal_floating_container_unrealize;
widget_class->style_updated = gcal_floating_container_style_updated;
container_class->add = gcal_floating_container_add;
@@ -100,7 +97,6 @@ gcal_floating_container_init (GcalFloatingContainer *self)
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
GCAL_TYPE_FLOATING_CONTAINER,
GcalFloatingContainerPrivate);
}
static void
@@ -289,11 +285,9 @@ gcal_floating_container_draw (GtkWidget *widget,
cairo_t *cr)
{
GtkStyleContext *context;
GdkRectangle rect;
guint border_width;
context = gtk_widget_get_style_context (widget);
gtk_widget_get_allocation (widget, &rect);
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
gtk_render_background (context, cr,
@@ -305,7 +299,7 @@ gcal_floating_container_draw (GtkWidget *widget,
gtk_widget_get_allocated_width (widget) - 2 * border_width,
gtk_widget_get_allocated_height (widget) - 2 * border_width);
if (GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw != NULL)
GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw(widget, cr);
GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw (widget, cr);
return FALSE;
}
@@ -327,12 +321,6 @@ gcal_floating_container_realize (GtkWidget *widget)
gtk_widget_set_parent_window (child, window);
}
static void
gcal_floating_container_unrealize (GtkWidget *widget)
{
GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->unrealize (widget);
}
static void
gcal_floating_container_style_updated (GtkWidget *widget)
{
+66 -15
View File
@@ -69,7 +69,7 @@ struct _GcalManagerPrivate
/**
* The list of clients we are managing.
* Each value is of type GCalStoreUnit
* And is key is uid of the source
* And each key is the source uid
*/
GHashTable *clients;
@@ -90,6 +90,7 @@ struct _GcalManagerPrivate
GCancellable *loading_clients;
};
/* Signal IDs */
enum
{
@@ -138,6 +139,11 @@ static void _gcal_manager_on_view_objects_modified (ECalClientView *view
gpointer objects,
gpointer user_data);
static void _gcal_manager_on_sources_row_changed (GtkTreeModel *store,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer user_data);
G_DEFINE_TYPE(GcalManager, gcal_manager, G_TYPE_OBJECT)
static void
@@ -197,6 +203,11 @@ gcal_manager_init (GcalManager *self)
GDK_TYPE_COLOR);
g_object_ref_sink (priv->sources_model);
g_signal_connect (priv->sources_model,
"row-changed",
G_CALLBACK (_gcal_manager_on_sources_row_changed),
self);
priv->initial_date = g_new(icaltimetype, 1);
*(priv->initial_date) = icaltime_from_timet (time (NULL), 0);
@@ -553,7 +564,7 @@ _gcal_manager_on_view_objects_added (ECalClientView *view,
ECalClient *client;
const gchar *source_uid;
GcalManagerEventData *data;
gchar *event_uid;
priv = GCAL_MANAGER (user_data)->priv;
events_data = NULL;
@@ -579,22 +590,15 @@ _gcal_manager_on_view_objects_added (ECalClientView *view,
component);
}
data = g_new0 (GcalManagerEventData, 1);
data->source_uid = g_strdup (source_uid);
data->event_uid = g_strdup (icalcomponent_get_uid (l->data));
events_data = g_slist_append (events_data, data);
event_uid = g_strdup_printf ("%s:%s",
source_uid,
icalcomponent_get_uid (l->data));
events_data = g_slist_append (events_data, event_uid);
}
}
g_signal_emit (GCAL_MANAGER (user_data), signals[EVENTS_ADDED], 0, events_data);
for (l = events_data; l != NULL; l = l->next)
{
GcalManagerEventData *data;
data = l->data;
g_free (data->source_uid);
g_free (data->event_uid);
}
g_slist_free_full (events_data, g_free);
}
@@ -624,6 +628,31 @@ _gcal_manager_on_view_objects_modified (ECalClientView *view,
{
}
static void
_gcal_manager_on_sources_row_changed (GtkTreeModel *store,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer user_data)
{
GcalManagerPrivate *priv;
GcalManagerUnit *unit;
gchar *source_uid;
gboolean active;
priv = GCAL_MANAGER (user_data)->priv;
gtk_tree_model_get (store,
iter,
COLUMN_UID,
&source_uid,
COLUMN_ACTIVE,
&active,
-1);
unit = g_hash_table_lookup (priv->clients, source_uid);
unit->enabled = active;
g_free (source_uid);
}
/**
* gcal_manager_new:
*
@@ -681,7 +710,7 @@ gcal_manager_add_source (GcalManager *manager,
for (groups = e_source_list_peek_groups (priv->system_sources);
groups != NULL;
groups = groups->next)
{
{
if (g_strcmp0 (
base_uri,
e_source_group_peek_base_uri (E_SOURCE_GROUP (groups->data))) == 0)
@@ -701,7 +730,7 @@ gcal_manager_add_source (GcalManager *manager,
}
break;
}
}
}
if (selected_group == NULL)
{
@@ -789,3 +818,25 @@ gcal_manager_set_new_range (GcalManager *manager,
_gcal_manager_reload_events (manager);
}
}
icaltimetype*
gcal_manager_get_start_date (GcalManager *manager,
const gchar *source_uid,
const gchar *event_uid)
{
GcalManagerPrivate *priv;
GcalManagerUnit *unit;
ECalComponent *event;
ECalComponentDateTime dt;
icaltimetype *dtstart;
priv = manager->priv;
unit = g_hash_table_lookup (priv->clients, source_uid);
event = g_hash_table_lookup (unit->events, event_uid);
e_cal_component_get_dtstart (event, &dt);
dtstart = gcal_dup_icaltime (dt.value);
e_cal_component_free_datetime (&dt);
return dtstart;
}
+4 -7
View File
@@ -37,13 +37,6 @@ G_BEGIN_DECLS
typedef struct _GcalManager GcalManager;
typedef struct _GcalManagerClass GcalManagerClass;
typedef struct _GcalManagerPrivate GcalManagerPrivate;
typedef struct _GcalManagerEventData GcalManagerEventData;
struct _GcalManagerEventData
{
gchar *source_uid;
gchar *event_uid;
};
struct _GcalManager
{
@@ -80,6 +73,10 @@ void gcal_manager_set_new_range (GcalManager *manager,
const icaltimetype *initial_date,
const icaltimetype *final_date);
icaltimetype* gcal_manager_get_start_date (GcalManager *manager,
const gchar *source_uid,
const gchar *event_uid);
G_END_DECLS
#endif /* __GCAL_MANAGER_H__ */
+50 -10
View File
@@ -33,13 +33,15 @@
struct _GcalWindowPrivate
{
ClutterActor *main_toolbar;
ClutterActor *notebook_actor;
ClutterActor *sources_actor;
ClutterActor *main_toolbar;
ClutterActor *notebook_actor;
ClutterActor *sources_actor;
GtkWidget *notebook;
GtkWidget *sources_view;
GtkWidget *views [5];
GtkWidget *notebook;
GtkWidget *sources_view;
GtkWidget *views [5];
GcalViewType active_view;
};
static void gcal_window_constructed (GObject *object);
@@ -61,6 +63,10 @@ static void _gcal_window_sources_row_activated (GtkTreeView *tree_view,
GtkTreeViewColumn *column,
gpointer user_data);
static void _gcal_window_view_clicked (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data);
static void _gcal_window_events_added (GcalManager *manager,
gpointer events_list,
gpointer user_data);
@@ -208,6 +214,10 @@ gcal_window_constructed (GObject *object)
"sources-shown",
G_CALLBACK (_gcal_window_sources_shown),
object);
g_signal_connect (priv->views[GCAL_VIEW_TYPE_MONTHLY],
"button-press-event",
G_CALLBACK (_gcal_window_view_clicked),
object);
gtk_widget_show (embed);
}
@@ -294,9 +304,12 @@ _gcal_window_view_changed (GcalMainToolbar *main_toolbar,
GcalViewType view_type,
gpointer user_data)
{
GcalWindow *window;
GcalWindowPrivate *priv;
GcalManager *manager;
priv = GCAL_WINDOW (user_data)->priv;
priv->active_view = view_type;
/* FIXME: demo code */
icaltimetype *first_day;
icaltimetype *last_day;
@@ -307,10 +320,9 @@ _gcal_window_view_changed (GcalMainToolbar *main_toolbar,
*last_day = *first_day;
last_day->day = 28;
window = GCAL_WINDOW (user_data);
manager = _gcal_window_get_manager (window);
manager = _gcal_window_get_manager (GCAL_WINDOW (user_data));
gcal_manager_set_new_range (manager, first_day, last_day);
g_debug ("GcalViewType in GcalWindow %d", view_type);
g_debug ("GcalViewType in GcalWindow %d", priv->active_view);
g_free (first_day);
g_free (last_day);
}
@@ -369,12 +381,40 @@ _gcal_window_sources_row_activated (GtkTreeView *tree_view,
-1);
}
static void
_gcal_window_view_clicked (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
g_debug ("View Clicked");
}
static void
_gcal_window_events_added (GcalManager *manager,
gpointer events_list,
gpointer user_data)
{
GSList *l;
icaltimetype *starting_date;
gchar **tokens;
gchar *source_uid;
gchar *event_uid;
g_debug ("[IWEA]: obtained %d events", g_slist_length (events_list));
for (l = events_list; l != NULL; l = l->next)
{
g_debug ("event %s", (gchar*) l->data);
tokens = g_strsplit ((gchar*) l->data, ":", -1);
source_uid = tokens[0];
event_uid = tokens[1];
starting_date = gcal_manager_get_start_date (manager,
source_uid,
event_uid);
g_debug ("starts on %s", icaltime_as_ical_string (*starting_date));
g_free (starting_date);
g_strfreev (tokens);
}
}
GtkWidget*