month-view: makes a descendant of GcalSubscriber

By making GcalMonthView a descendat of GcalSubscriber it gets
implementation for each of the methods on ECalDataModel subscriber and
utomatically gains the functionality of adding and removing events widgets
This commit is contained in:
Erick Pérez Castellanos
2014-12-04 17:10:46 -05:00
parent cfb2c39a7d
commit aca1b66743
2 changed files with 9 additions and 133 deletions
+6 -129
View File
@@ -65,8 +65,6 @@ static void event_opened (GcalEventWidget *ev
static void gcal_view_interface_init (GcalViewIface *iface);
static void gcal_data_model_subscriber_interface_init (ECalDataModelSubscriberInterface *iface);
static void gcal_month_view_set_property (GObject *object,
guint property_id,
const GValue *value,
@@ -141,31 +139,12 @@ static void gcal_month_view_clear (GcalView *vie
static gboolean gcal_month_view_will_add_event (GcalView *view,
GcalEventWidget *event);
static void gcal_month_view_subscriber_component_added (ECalDataModelSubscriber *subscriber,
ECalClient *client,
ECalComponent *comp);
static void gcal_month_view_subscriber_component_modified (ECalDataModelSubscriber *subscriber,
ECalClient *client,
ECalComponent *comp);
static void gcal_month_view_subscriber_component_removed (ECalDataModelSubscriber *subscriber,
ECalClient *client,
const gchar *uid,
const gchar *rid);
static void gcal_month_view_subscriber_freeze (ECalDataModelSubscriber *subscriber);
static void gcal_month_view_subscriber_thaw (ECalDataModelSubscriber *subscriber);
G_DEFINE_TYPE_WITH_CODE (GcalMonthView,
gcal_month_view,
GTK_TYPE_CONTAINER,
GCAL_TYPE_SUBSCRIBER,
G_ADD_PRIVATE (GcalMonthView)
G_IMPLEMENT_INTERFACE (GCAL_TYPE_VIEW,
gcal_view_interface_init)
G_IMPLEMENT_INTERFACE (E_TYPE_CAL_DATA_MODEL_SUBSCRIBER,
gcal_data_model_subscriber_interface_init));
gcal_view_interface_init));
static void
@@ -253,17 +232,6 @@ gcal_view_interface_init (GcalViewIface *iface)
iface->will_add_event = gcal_month_view_will_add_event;
}
static void
gcal_data_model_subscriber_interface_init (ECalDataModelSubscriberInterface *iface)
{
iface->component_added = gcal_month_view_subscriber_component_added;
iface->component_modified = gcal_month_view_subscriber_component_modified;
iface->component_removed = gcal_month_view_subscriber_component_removed;
iface->freeze = gcal_month_view_subscriber_freeze;
iface->thaw = gcal_month_view_subscriber_thaw;
}
static void
gcal_month_view_set_property (GObject *object,
guint property_id,
@@ -1078,6 +1046,10 @@ gcal_month_view_add (GtkContainer *container,
gcal_compare_event_widget_by_date);
gtk_widget_set_parent (widget, GTK_WIDGET (container));
g_signal_connect (widget,
"activate",
G_CALLBACK (event_opened),
container);
g_free (date);
}
@@ -1395,101 +1367,6 @@ gcal_month_view_will_add_event (GcalView *view,
return !(gcal_month_view_get_by_uuid (view, event_uuid) != NULL);
}
/* ECalDataModelSubscriber interface API */
static void
gcal_month_view_subscriber_component_added (ECalDataModelSubscriber *subscriber,
ECalClient *client,
ECalComponent *comp)
{
GtkWidget *event;
GcalEventData *data;
data = g_new0 (GcalEventData, 1);
data->source = e_client_get_source (E_CLIENT (client));
data->event_component = e_cal_component_clone (comp);
event = gcal_event_widget_new_from_data (data);
g_free (data);
gtk_widget_show (event);
gtk_container_add (GTK_CONTAINER (subscriber), event);
g_signal_connect (event,
"activate",
G_CALLBACK (event_opened),
subscriber);
}
static void
gcal_month_view_subscriber_component_modified (ECalDataModelSubscriber *subscriber,
ECalClient *client,
ECalComponent *comp)
{
GtkWidget *event;
GtkWidget *widget;
GcalEventData *data;
data = g_new0 (GcalEventData, 1);
data->source = e_client_get_source (E_CLIENT (client));
data->event_component = e_cal_component_clone (comp);
event = gcal_event_widget_new_from_data (data);
g_free (data);
widget =
gcal_view_get_by_uuid (GCAL_VIEW (subscriber),
gcal_event_widget_peek_uuid (GCAL_EVENT_WIDGET (event)));
if (widget != NULL)
{
gtk_widget_destroy (widget);
gtk_widget_show (event);
gtk_container_add (GTK_CONTAINER (subscriber), event);
}
g_signal_connect (event,
"activate",
G_CALLBACK (event_opened),
subscriber);
}
static void
gcal_month_view_subscriber_component_removed (ECalDataModelSubscriber *subscriber,
ECalClient *client,
const gchar *uid,
const gchar *rid)
{
GtkWidget *widget;
const gchar *sid;
gchar *uuid;
sid = e_source_get_uid (e_client_get_source (E_CLIENT (client)));
if (rid != NULL)
uuid = g_strdup_printf ("%s:%s:%s", sid, uid, rid);
else
uuid = g_strdup_printf ("%s:%s", sid, uid);
widget = gcal_view_get_by_uuid (GCAL_VIEW (subscriber), uuid);
if (widget != NULL)
gtk_widget_destroy (widget);
else
g_warning ("%s: Widget with uuid: %s not found",
G_STRFUNC, uuid);
g_free (uuid);
}
static void
gcal_month_view_subscriber_freeze (ECalDataModelSubscriber *subscriber)
{
}
static void
gcal_month_view_subscriber_thaw (ECalDataModelSubscriber *subscriber)
{
}
/* Public API */
/**
* gcal_month_view_new:
+3 -4
View File
@@ -21,8 +21,7 @@
#define __GCAL_MONTH_VIEW_H__
#include "gcal-manager.h"
#include <gtk/gtk.h>
#include "gcal-subscriber.h"
G_BEGIN_DECLS
@@ -38,12 +37,12 @@ typedef struct _GcalMonthViewClass GcalMonthViewClass;
struct _GcalMonthView
{
GtkContainer parent;
GcalSubscriber parent;
};
struct _GcalMonthViewClass
{
GtkContainerClass parent_class;
GcalSubscriberClass parent_class;
/* signals */
void (*new_event) (gint new_day);