gcal-day-view: initial implementation of view API

Implemented:
#GcalView:get_initial_date
#GcalView:get_final_date
#GcalView:contains_date

#GcalView:get_left_header
#GcalView:get_right_header

#GcalView:get_by_uuid
This commit is contained in:
Erick Pérez Castellanos
2014-12-04 17:10:24 -05:00
parent f3afda6584
commit aa20a71ca9
+154 -5
View File
@@ -23,9 +23,13 @@
#include "gcal-all-day-grid.h"
#include "gcal-days-grid.h"
#include "gcal-viewport.h"
#include "gcal-utils.h"
#include "gcal-view.h"
#include <glib/gi18n.h>
#include <libecal/libecal.h>
enum
{
PROP_0,
@@ -63,6 +67,20 @@ static void gcal_day_view_get_property (GObject *objec
static void gcal_day_view_set_date (GcalDayView *view,
icaltimetype *date);
static icaltimetype* gcal_day_view_get_initial_date (GcalView *view);
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 GtkWidget* gcal_day_view_get_by_uuid (GcalView *view,
const gchar *uuid);
G_DEFINE_TYPE_WITH_CODE (GcalDayView,
gcal_day_view,
GTK_TYPE_GRID,
@@ -107,12 +125,17 @@ static void
gcal_view_interface_init (GcalViewIface *iface)
{
/* FIXME: add new GcalView API */
/* iface->get_initial_date = gcal_day_view_get_initial_date; */
/* iface->get_final_date = gcal_day_view_get_final_date; */
/* iface->contains = gcal_day_view_contains; */
/* iface->remove_by_uuid = gcal_day_view_remove_by_uuid; */
/* iface->get_by_uuid = gcal_day_view_get_by_uuid; */
/* 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->get_by_uuid = gcal_day_view_get_by_uuid;
}
static void
@@ -241,6 +264,132 @@ gcal_day_view_set_date (GcalDayView *view,
priv->date = date;
}
/* GcalView API */
static icaltimetype*
gcal_day_view_get_initial_date (GcalView *view)
{
GcalDayViewPrivate *priv;
icaltimetype *new_date;
priv = GCAL_DAY_VIEW (view)->priv;
new_date = g_new0 (icaltimetype, 1);
*new_date = *(priv->date);
new_date->hour = 0;
new_date->minute = 0;
new_date->second = 0;
return new_date;
}
/**
* gcal_day_view_get_final_date:
* @view: a #GcalDayView
*
* Returns the date of "tomorrow" at 23:59
*
* Returns:
**/
static icaltimetype*
gcal_day_view_get_final_date (GcalView *view)
{
GcalDayViewPrivate *priv;
icaltimetype *new_date;
priv = GCAL_DAY_VIEW (view)->priv;
new_date = g_new0 (icaltimetype, 1);
*new_date = *(priv->date);
icaltime_adjust (new_date, 1, 0, 0, 0);
new_date->hour = 23;
new_date->minute = 59;
new_date->second = 59;
return new_date;
}
static gboolean
gcal_day_view_contains_date (GcalView *view,
icaltimetype *date)
{
GcalDayViewPrivate *priv;
icaltimetype *first_day;
icaltimetype *last_day;
gint left_boundary;
gint right_boundary;
priv = GCAL_DAY_VIEW (view)->priv;
first_day = gcal_day_view_get_initial_date (view);
last_day = gcal_day_view_get_final_date (view);
if (priv->date == NULL)
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);
if ((left_boundary == -1 || left_boundary == 0) &&
(right_boundary == -1 || right_boundary == 0))
{
return TRUE;
}
return FALSE;
}
static gchar*
gcal_day_view_get_left_header (GcalView *view)
{
GcalDayViewPrivate *priv;
gchar str_date[64];
struct tm tm_date;
priv = GCAL_DAY_VIEW (view)->priv;
tm_date = icaltimetype_to_tm (priv->date);
e_utf8_strftime_fix_am_pm (str_date, 64, "%B", &tm_date);
return g_strdup_printf ("%s, %d", str_date, priv->date->day);
}
static gchar*
gcal_day_view_get_right_header (GcalView *view)
{
GcalDayViewPrivate *priv;
priv = GCAL_DAY_VIEW (view)->priv;
return g_strdup_printf ("%d", priv->date->year);
}
static GtkWidget*
gcal_day_view_get_by_uuid (GcalView *view,
const gchar *uuid)
{
GcalDayViewPrivate *priv;
GtkWidget *widget;
priv = GCAL_DAY_VIEW (view)->priv;
widget =
gcal_all_day_grid_get_by_uuid (GCAL_ALL_DAY_GRID (priv->all_day_grid),
uuid);
if (widget != NULL)
return widget;
widget =
gcal_days_grid_get_by_uuid (GCAL_DAYS_GRID (priv->day_grid),
uuid);
if (widget != NULL)
return widget;
return NULL;
}
/* Public API */
/**
* gcal_day_view_new: