gcal-view: modified API

Implemented in views.
Reworked GcalDayView implementation to allow bigger
than days events.
This commit is contained in:
Erick Pérez Castellanos
2014-12-04 17:10:26 -05:00
parent 318cd4dd33
commit 9f530a5b8a
7 changed files with 105 additions and 87 deletions
+13 -12
View File
@@ -77,11 +77,14 @@ static icaltimetype* gcal_day_view_get_final_date (GcalView *view)
static gboolean gcal_day_view_contains_date (GcalView *view,
icaltimetype *date);
static gchar* gcal_day_view_get_left_header (GcalView *view);
static gchar* gcal_day_view_get_right_header (GcalView *view);
static gboolean gcal_day_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date);
static GtkWidget* gcal_day_view_get_by_uuid (GcalView *view,
const gchar *uuid);
@@ -154,11 +157,11 @@ gcal_view_interface_init (GcalViewIface *iface)
/* New API */
iface->get_initial_date = gcal_day_view_get_initial_date;
iface->get_final_date = gcal_day_view_get_final_date;
iface->contains_date = gcal_day_view_contains_date;
iface->get_left_header = gcal_day_view_get_left_header;
iface->get_right_header = gcal_day_view_get_right_header;
iface->draw_event = gcal_day_view_draw_event;
iface->get_by_uuid = gcal_day_view_get_by_uuid;
}
@@ -368,8 +371,9 @@ gcal_day_view_get_final_date (GcalView *view)
}
static gboolean
gcal_day_view_contains_date (GcalView *view,
icaltimetype *date)
gcal_day_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date)
{
GcalDayViewPrivate *priv;
@@ -386,16 +390,13 @@ gcal_day_view_contains_date (GcalView *view,
return FALSE;
/* XXX: Check for date_only comparison since might drop timezone info */
left_boundary = icaltime_compare_date_only (*first_day, *date);
right_boundary = icaltime_compare_date_only (*date, *last_day);
left_boundary = icaltime_compare_date_only (*end_date, *first_day);
right_boundary = icaltime_compare_date_only (*last_day, *end_date);
if ((left_boundary == -1 || left_boundary == 0) &&
(right_boundary == -1 || right_boundary == 0))
{
return TRUE;
}
if (left_boundary == -1 || right_boundary == -1)
return FALSE;
return FALSE;
return TRUE;
}
static gchar*
+25 -23
View File
@@ -117,13 +117,14 @@ static icaltimetype* gcal_month_view_get_initial_date (GcalView *vie
static icaltimetype* gcal_month_view_get_final_date (GcalView *view);
static gboolean gcal_month_view_contains_date (GcalView *view,
icaltimetype *date);
static gchar* gcal_month_view_get_left_header (GcalView *view);
static gchar* gcal_month_view_get_right_header (GcalView *view);
static gboolean gcal_month_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date);
static GtkWidget* gcal_month_view_get_by_uuid (GcalView *view,
const gchar *uuid);
@@ -218,11 +219,11 @@ gcal_view_interface_init (GcalViewIface *iface)
/* New API */
iface->get_initial_date = gcal_month_view_get_initial_date;
iface->get_final_date = gcal_month_view_get_final_date;
iface->contains_date = gcal_month_view_contains_date;
iface->get_left_header = gcal_month_view_get_left_header;
iface->get_right_header = gcal_month_view_get_right_header;
iface->draw_event = gcal_month_view_draw_event;
iface->get_by_uuid = gcal_month_view_get_by_uuid;
}
@@ -1099,7 +1100,7 @@ gcal_month_view_set_date (GcalMonthView *view,
will_resize = FALSE;
/* if span_updated: queue_resize */
will_resize = ! gcal_month_view_contains_date (GCAL_VIEW (view), date);
will_resize = ! gcal_month_view_draw_event (GCAL_VIEW (view), date, NULL);
if (priv->date != NULL)
g_free (priv->date);
@@ -1125,7 +1126,7 @@ gcal_month_view_set_date (GcalMonthView *view,
child = (GcalViewChild*) l->data;
child_date =
gcal_event_widget_get_date (GCAL_EVENT_WIDGET (child->widget));
if (! gcal_month_view_contains_date (GCAL_VIEW (view), child_date))
if (! gcal_month_view_draw_event (GCAL_VIEW (view), child_date, NULL))
to_remove = g_list_append (to_remove, child->widget);
}
}
@@ -1212,22 +1213,6 @@ gcal_month_view_get_final_date (GcalView *view)
return new_date;
}
static gboolean
gcal_month_view_contains_date (GcalView *view,
icaltimetype *date)
{
GcalMonthViewPrivate *priv;
g_return_val_if_fail (GCAL_IS_MONTH_VIEW (view), FALSE);
priv = GCAL_MONTH_VIEW (view)->priv;
if (priv->date == NULL)
return FALSE;
return (priv->date->month == date->month &&
priv->date->year == date->year);
}
static gchar*
gcal_month_view_get_left_header (GcalView *view)
{
@@ -1255,6 +1240,23 @@ gcal_month_view_get_right_header (GcalView *view)
return g_strdup_printf ("%d", priv->date->year);
}
static gboolean
gcal_month_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date)
{
GcalMonthViewPrivate *priv;
g_return_val_if_fail (GCAL_IS_MONTH_VIEW (view), FALSE);
priv = GCAL_MONTH_VIEW (view)->priv;
if (priv->date == NULL)
return FALSE;
return (priv->date->month == start_date->month &&
priv->date->year == start_date->year);
}
static GtkWidget*
gcal_month_view_get_by_uuid (GcalView *view,
const gchar *uuid)
@@ -1309,7 +1311,7 @@ gcal_month_view_reposition_child (GcalView *view,
date =
gcal_event_widget_get_date (GCAL_EVENT_WIDGET (child->widget));
if (gcal_month_view_contains_date (view, date))
if (gcal_month_view_draw_event (view, date, NULL))
{
if (date->day - 1 == i)
{
+23 -19
View File
@@ -178,25 +178,6 @@ gcal_view_get_final_date (GcalView *view)
return GCAL_VIEW_GET_INTERFACE (view)->get_final_date (view);
}
/**
* gcal_view_contains_date:
* @view: a #GcalView
* @date: an #icaltimetype object
*
* Whether @date is contained in the time-range represented by @view
*
* Returns: %TRUE if it is, %FALSE otherwise
**/
gboolean
gcal_view_contains_date (GcalView *view,
icaltimetype *date)
{
g_return_val_if_fail (GCAL_IS_VIEW (view), FALSE);
g_return_if_fail (GCAL_VIEW_GET_INTERFACE (view)->contains_date);
return GCAL_VIEW_GET_INTERFACE (view)->contains_date (view, date);
}
/**
* gcal_view_mark_current_unit:
* @view: a #GcalView
@@ -263,6 +244,29 @@ gcal_view_get_right_header (GcalView *view)
return GCAL_VIEW_GET_INTERFACE (view)->get_right_header (view);
}
/**
* gcal_view_draw_event:
* @view: a #GcalView
* @start_date: an #icaltimetype object. The starting date of the event
* @end_date: an #icaltimetype object. The edn-date of the event
*
* Whether the event within these boundaries will be drawn by the #GcalView implementation
*
* Returns: %TRUE if it is, %FALSE otherwise
**/
gboolean
gcal_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date)
{
g_return_val_if_fail (GCAL_IS_VIEW (view), FALSE);
g_return_if_fail (GCAL_VIEW_GET_INTERFACE (view)->draw_event);
return GCAL_VIEW_GET_INTERFACE (view)->draw_event (view,
start_date,
end_date);
}
/**
* gcal_view_get_by_uuid:
* @view: a #GcalView
+5 -4
View File
@@ -63,7 +63,6 @@ struct _GcalViewIface
/* Time handling related API */
icaltimetype* (*get_initial_date) (GcalView *view);
icaltimetype* (*get_final_date) (GcalView *view);
gboolean (*contains_date) (GcalView *view, icaltimetype *date);
/* Marks related API */
void (*mark_current_unit) (GcalView *view);
@@ -74,6 +73,7 @@ struct _GcalViewIface
gchar* (*get_right_header) (GcalView *view);
/* Container functions related API */
gboolean (*draw_event) (GcalView *view, icaltimetype *start_date, icaltimetype *end_date);
GtkWidget* (*get_by_uuid) (GcalView *view, const gchar *uuid);
};
@@ -99,9 +99,6 @@ icaltimetype* gcal_view_get_initial_date (GcalView *view);
icaltimetype* gcal_view_get_final_date (GcalView *view);
gboolean gcal_view_contains_date (GcalView *view,
icaltimetype *date);
void gcal_view_mark_current_unit (GcalView *view);
void gcal_view_clear_mark (GcalView *view);
@@ -110,6 +107,10 @@ gchar* gcal_view_get_left_header (GcalView *view);
gchar* gcal_view_get_right_header (GcalView *view);
gboolean gcal_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date);
GtkWidget* gcal_view_get_by_uuid (GcalView *view,
const gchar *uuid);
+13 -9
View File
@@ -149,8 +149,9 @@ static icaltimetype* gcal_week_view_get_initial_date (GcalView *view
static icaltimetype* gcal_week_view_get_final_date (GcalView *view);
static gboolean gcal_week_view_contains_date (GcalView *view,
icaltimetype *date);
static gboolean gcal_week_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date);
static GtkWidget* gcal_week_view_get_by_uuid (GcalView *view,
const gchar *uuid);
@@ -233,7 +234,8 @@ gcal_view_interface_init (GcalViewIface *iface)
{
iface->get_initial_date = gcal_week_view_get_initial_date;
iface->get_final_date = gcal_week_view_get_final_date;
iface->contains_date = gcal_week_view_contains_date;
iface->draw_event = gcal_week_view_draw_event;
iface->get_by_uuid = gcal_week_view_get_by_uuid;
}
@@ -975,7 +977,7 @@ gcal_week_view_set_date (GcalWeekView *view,
will_resize = FALSE;
/* if span_updated: queue_resize */
will_resize = ! gcal_week_view_contains_date (GCAL_VIEW (view), date);
will_resize = ! gcal_week_view_draw_event (GCAL_VIEW (view), date, NULL);
if (priv->date != NULL)
g_free (priv->date);
@@ -995,7 +997,7 @@ gcal_week_view_set_date (GcalWeekView *view,
child = (GcalWeekViewChild*) l->data;
child_date = gcal_event_widget_get_date (GCAL_EVENT_WIDGET (child->widget));
if (! gcal_week_view_contains_date (GCAL_VIEW (view), child_date))
if (! gcal_week_view_draw_event (GCAL_VIEW (view), child_date, NULL))
to_remove = g_list_append (to_remove, child->widget);
}
}
@@ -1498,8 +1500,9 @@ gcal_week_view_get_final_date (GcalView *view)
}
static gboolean
gcal_week_view_contains_date (GcalView *view,
icaltimetype *date)
gcal_week_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date)
{
GcalWeekViewPrivate *priv;
@@ -1508,8 +1511,9 @@ gcal_week_view_contains_date (GcalView *view,
if (priv->date == NULL)
return FALSE;
if (icaltime_week_number (*(priv->date)) == icaltime_week_number (*date)
&& priv->date->year == date->year)
if (icaltime_week_number (*(priv->date)) == icaltime_week_number (*start_date)
&& priv->date->year == start_date->year)
{
return TRUE;
}
+11 -7
View File
@@ -688,7 +688,8 @@ gcal_window_events_added (GcalManager *manager,
GcalView *view;
GtkWidget *event;
icaltimetype *starting_date;
icaltimetype *start_date;
icaltimetype *end_date;
priv = GCAL_WINDOW (user_data)->priv;
view = GCAL_VIEW (priv->views[priv->active_view]);
@@ -698,16 +699,19 @@ gcal_window_events_added (GcalManager *manager,
tokens = g_strsplit ((gchar*) l->data, ":", -1);
source_uid = tokens[0];
event_uid = tokens[1];
starting_date = gcal_manager_get_event_start_date (manager,
source_uid,
event_uid);
start_date = gcal_manager_get_event_start_date (manager,
source_uid,
event_uid);
end_date = gcal_manager_get_event_end_date (manager,
source_uid,
event_uid);
/* FIXME: erase me */
/* g_debug ("add: %s with date %s", */
/* (gchar*) l->data, */
/* icaltime_as_ical_string (*starting_date)); */
/* icaltime_as_ical_string (*start_date)); */
if (gcal_view_contains_date (view, starting_date) &&
if (gcal_view_draw_event (view, start_date, end_date) &&
gcal_view_get_by_uuid (view, (gchar*)l->data) == NULL)
{
event = gcal_event_widget_new ((gchar*) l->data);
@@ -726,7 +730,7 @@ gcal_window_events_added (GcalManager *manager,
user_data);
}
g_free (starting_date);
g_free (start_date);
g_strfreev (tokens);
}
}
+15 -13
View File
@@ -115,8 +115,13 @@ static icaltimetype* gcal_year_view_get_initial_date (GcalView
static icaltimetype* gcal_year_view_get_final_date (GcalView *view);
static gboolean gcal_year_view_contains_date (GcalView *view,
icaltimetype *date);
static gchar* gcal_year_view_get_left_header (GcalView *view);
static gchar* gcal_year_view_get_right_header (GcalView *view);
static gboolean gcal_year_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date);
static GtkWidget* gcal_year_view_get_by_uuid (GcalView *view,
const gchar *uuid);
@@ -129,10 +134,6 @@ static void gcal_year_view_clear_selection (GcalView
static void gcal_year_view_create_event_on_current_unit (GcalView *view);
static gchar* gcal_year_view_get_left_header (GcalView *view);
static gchar* gcal_year_view_get_right_header (GcalView *view);
G_DEFINE_TYPE_WITH_CODE (GcalYearView,
gcal_year_view,
GTK_TYPE_CONTAINER,
@@ -213,11 +214,11 @@ gcal_view_interface_init (GcalViewIface *iface)
/* New API */
iface->get_initial_date = gcal_year_view_get_initial_date;
iface->get_final_date = gcal_year_view_get_final_date;
iface->contains_date = gcal_year_view_contains_date;
iface->get_left_header = gcal_year_view_get_left_header;
iface->get_right_header = gcal_year_view_get_right_header;
iface->draw_event = gcal_year_view_draw_event;
iface->get_by_uuid = gcal_year_view_get_by_uuid;
}
@@ -758,7 +759,7 @@ gcal_year_view_set_date (GcalYearView *view,
will_resize = FALSE;
/* if span_updated: queue_resize */
will_resize = ! gcal_year_view_contains_date (GCAL_VIEW (view), date);
will_resize = ! gcal_year_view_draw_event (GCAL_VIEW (view), date, NULL);
if (priv->date != NULL)
g_free (priv->date);
@@ -779,7 +780,7 @@ gcal_year_view_set_date (GcalYearView *view,
child = (GcalViewChild*) l->data;
child_date =
gcal_event_widget_get_date (GCAL_EVENT_WIDGET (child->widget));
if (! gcal_year_view_contains_date (GCAL_VIEW (view), child_date))
if (! gcal_year_view_draw_event (GCAL_VIEW (view), child_date, NULL))
to_remove = g_list_append (to_remove, child->widget);
}
}
@@ -1023,8 +1024,9 @@ gcal_year_view_get_final_date (GcalView *view)
}
static gboolean
gcal_year_view_contains_date (GcalView *view,
icaltimetype *date)
gcal_year_view_draw_event (GcalView *view,
icaltimetype *start_date,
icaltimetype *end_date)
{
GcalYearViewPrivate *priv;
@@ -1034,7 +1036,7 @@ gcal_year_view_contains_date (GcalView *view,
if (priv->date == NULL)
return FALSE;
return priv->date->year == date->year;
return priv->date->year == start_date->year;
}
static GtkWidget*
@@ -1091,7 +1093,7 @@ gcal_year_view_reposition_child (GcalView *view,
date =
gcal_event_widget_get_date (GCAL_EVENT_WIDGET (child->widget));
if (gcal_year_view_contains_date (view, date))
if (gcal_year_view_draw_event (view, date, NULL))
{
if (date->month - 1 == i)
{