week-view: display events in header
Displaying events in the week-header based on duration of the event.
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
16a1c9b55b
commit
188d7742b4
@@ -61,6 +61,8 @@
|
|||||||
<object class="GtkGrid" id="grid">
|
<object class="GtkGrid" id="grid">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="height-request">100</property>
|
<property name="height-request">100</property>
|
||||||
|
<property name="column-homogeneous">True</property>
|
||||||
|
<property name="row-homogeneous">True</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|||||||
@@ -154,6 +154,79 @@ gcal_week_header_finalize (GObject *object)
|
|||||||
g_clear_pointer (&self->current_date, g_free);
|
g_clear_pointer (&self->current_date, g_free);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gcal_week_header_add_event (GcalWeekHeader *self,
|
||||||
|
GcalEvent *event)
|
||||||
|
{
|
||||||
|
GDateTime *week_start, *week_end, *event_start, *event_end;
|
||||||
|
GtkWidget *child_widget, *place_holder_left, *place_holder_right;
|
||||||
|
gint start, end;
|
||||||
|
|
||||||
|
start = -1;
|
||||||
|
end = -1;
|
||||||
|
week_start = get_start_of_week (self);
|
||||||
|
week_end = g_date_time_add_days (week_start, 7);
|
||||||
|
event_start = gcal_event_get_date_start (event);
|
||||||
|
event_end = gcal_event_get_date_end (event);
|
||||||
|
child_widget = gcal_event_widget_new (event);
|
||||||
|
place_holder_left = gtk_invisible_new ();
|
||||||
|
place_holder_right = gtk_invisible_new ();
|
||||||
|
|
||||||
|
gtk_widget_set_visible (child_widget, TRUE);
|
||||||
|
gtk_widget_set_visible (place_holder_left, TRUE);
|
||||||
|
gtk_widget_set_visible (place_holder_right, TRUE);
|
||||||
|
|
||||||
|
start = (g_date_time_get_day_of_week (event_start) - self->first_weekday + 7) % 7;
|
||||||
|
end = (g_date_time_get_day_of_week (event_end) - self->first_weekday + 7) % 7;
|
||||||
|
|
||||||
|
if (g_date_time_compare (event_start, week_start) < 0)
|
||||||
|
start = 0;
|
||||||
|
|
||||||
|
if (g_date_time_compare (event_end, week_end) >= 0)
|
||||||
|
end = 6;
|
||||||
|
|
||||||
|
gtk_grid_insert_row (GTK_GRID (self->grid), 0);
|
||||||
|
|
||||||
|
if (gcal_event_get_all_day (event))
|
||||||
|
{
|
||||||
|
start = (g_date_time_get_day_of_week (event_start) - self->first_weekday + 7) % 7;
|
||||||
|
end = start;
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_grid_attach (GTK_GRID (self->grid),
|
||||||
|
child_widget,
|
||||||
|
start,
|
||||||
|
0,
|
||||||
|
end - start + 1,
|
||||||
|
1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gcal_week_header_remove_event (GcalWeekHeader *header,
|
||||||
|
gchar *uuid)
|
||||||
|
{
|
||||||
|
GList *children, *l;
|
||||||
|
|
||||||
|
children = gtk_container_get_children (GTK_CONTAINER (header->grid));
|
||||||
|
|
||||||
|
for (l = children; l != NULL; l = g_list_next (l))
|
||||||
|
{
|
||||||
|
GcalEventWidget *child_widget;
|
||||||
|
GcalEvent *event;
|
||||||
|
|
||||||
|
if (!GCAL_IS_EVENT_WIDGET(l->data))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
child_widget = GCAL_EVENT_WIDGET (l->data);
|
||||||
|
event = gcal_event_widget_get_event (child_widget);
|
||||||
|
|
||||||
|
if(child_widget != NULL && g_strcmp0 (uuid, gcal_event_get_uid (event)) == 0)
|
||||||
|
gtk_widget_destroy (GTK_WIDGET (l->data));
|
||||||
|
}
|
||||||
|
|
||||||
|
g_list_free (children);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gcal_week_header_get_property (GObject *object,
|
gcal_week_header_get_property (GObject *object,
|
||||||
guint prop_id,
|
guint prop_id,
|
||||||
@@ -366,7 +439,12 @@ gcal_week_header_class_init (GcalWeekHeaderClass *kclass)
|
|||||||
static void
|
static void
|
||||||
gcal_week_header_init (GcalWeekHeader *self)
|
gcal_week_header_init (GcalWeekHeader *self)
|
||||||
{
|
{
|
||||||
|
gint i;
|
||||||
|
|
||||||
gtk_widget_init_template (GTK_WIDGET (self));
|
gtk_widget_init_template (GTK_WIDGET (self));
|
||||||
|
|
||||||
|
for (i = 1; i <= 7; i++)
|
||||||
|
gtk_grid_insert_column (GTK_GRID (self->grid), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|||||||
@@ -39,6 +39,10 @@ void gcal_week_header_set_use_24h_format (GcalWeekHeader *self,
|
|||||||
gboolean use_24h_format);
|
gboolean use_24h_format);
|
||||||
void gcal_week_header_set_current_date (GcalWeekHeader *self,
|
void gcal_week_header_set_current_date (GcalWeekHeader *self,
|
||||||
icaltimetype *current_date);
|
icaltimetype *current_date);
|
||||||
|
void gcal_week_header_add_event (GcalWeekHeader *header,
|
||||||
|
GcalEvent *event);
|
||||||
|
void gcal_week_header_remove_event (GcalWeekHeader *header,
|
||||||
|
gchar *uuid);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -225,6 +225,9 @@ gcal_week_view_component_added (ECalDataModelSubscriber *subscriber,
|
|||||||
GcalEvent *event;
|
GcalEvent *event;
|
||||||
|
|
||||||
event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp, NULL);
|
event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp, NULL);
|
||||||
|
|
||||||
|
if (gcal_event_is_multiday (event) || gcal_event_get_all_day (event))
|
||||||
|
gcal_week_header_add_event (GCAL_WEEK_HEADER (self->header), event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -233,10 +236,21 @@ gcal_week_view_component_modified (ECalDataModelSubscriber *subscriber,
|
|||||||
ECalComponent *comp)
|
ECalComponent *comp)
|
||||||
{
|
{
|
||||||
GcalWeekView *self = GCAL_WEEK_VIEW (subscriber);
|
GcalWeekView *self = GCAL_WEEK_VIEW (subscriber);
|
||||||
|
GcalEvent *event;
|
||||||
|
GcalWeekHeader *header;
|
||||||
gchar *uuid;
|
gchar *uuid;
|
||||||
|
|
||||||
|
header = GCAL_WEEK_HEADER (self->header);
|
||||||
|
|
||||||
|
event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp, NULL);
|
||||||
uuid = get_uuid_from_component (e_client_get_source (E_CLIENT (client)), comp);
|
uuid = get_uuid_from_component (e_client_get_source (E_CLIENT (client)), comp);
|
||||||
/* TODO: Implement for week_header and week_grid with if */
|
|
||||||
|
if (gcal_event_is_multiday (event) || gcal_event_get_all_day (event))
|
||||||
|
gcal_week_header_remove_event (header, uuid);
|
||||||
|
|
||||||
|
g_free (uuid);
|
||||||
|
|
||||||
|
gcal_week_view_component_added (subscriber, client, comp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -245,18 +259,23 @@ gcal_week_view_component_removed (ECalDataModelSubscriber *subscriber,
|
|||||||
const gchar *uid,
|
const gchar *uid,
|
||||||
const gchar *rid)
|
const gchar *rid)
|
||||||
{
|
{
|
||||||
GcalWeekView *week_view = GCAL_WEEK_VIEW (subscriber);
|
GcalWeekView *self = GCAL_WEEK_VIEW (subscriber);
|
||||||
GList *children, *l;
|
GcalWeekHeader *header;
|
||||||
ESource *source;
|
ESource *source;
|
||||||
gchar *uuid;
|
gchar *uuid;
|
||||||
|
|
||||||
|
header = GCAL_WEEK_HEADER (self->header);
|
||||||
|
|
||||||
source = e_client_get_source (E_CLIENT (client));
|
source = e_client_get_source (E_CLIENT (client));
|
||||||
|
|
||||||
if (rid != NULL)
|
if (rid != NULL)
|
||||||
uuid = g_strdup_printf ("%s:%s:%s", e_source_get_uid (source), uid, rid);
|
uuid = g_strdup_printf ("%s:%s:%s", e_source_get_uid (source), uid, rid);
|
||||||
else
|
else
|
||||||
uuid = g_strdup_printf ("%s:%s", e_source_get_uid (source), uid);
|
uuid = g_strdup_printf ("%s:%s", e_source_get_uid (source), uid);
|
||||||
|
|
||||||
/* TODO: Implement for week_header and week_grid with if */
|
gcal_week_header_remove_event (header, uuid);
|
||||||
|
|
||||||
|
g_free (uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user