Drop the now unused year view
We don't need this anymore.
This commit is contained in:
@@ -44,6 +44,4 @@ src/gui/views/gcal-week-grid.c
|
||||
src/gui/views/gcal-week-header.c
|
||||
src/gui/views/gcal-week-hour-bar.c
|
||||
src/gui/views/gcal-week-view.c
|
||||
src/gui/views/gcal-year-view.c
|
||||
src/gui/views/gcal-year-view.ui
|
||||
src/utils/gcal-utils.c
|
||||
|
||||
@@ -35,7 +35,6 @@ typedef enum
|
||||
* GcalWindowViewType:
|
||||
* @GCAL_WINDOW_VIEW_WEEK: Week view
|
||||
* @GCAL_WINDOW_VIEW_MONTH: Month view
|
||||
* @GCAL_WINDOW_VIEW_YEAR: Year view
|
||||
*
|
||||
* Enum with the available views.
|
||||
*/
|
||||
@@ -43,7 +42,6 @@ typedef enum
|
||||
{
|
||||
GCAL_WINDOW_VIEW_WEEK,
|
||||
GCAL_WINDOW_VIEW_MONTH,
|
||||
GCAL_WINDOW_VIEW_YEAR,
|
||||
} GcalWindowView;
|
||||
|
||||
typedef enum
|
||||
|
||||
@@ -1,714 +0,0 @@
|
||||
/* gcal-year-view.c
|
||||
*
|
||||
* Copyright (C) 2015 Erick Pérez Castellanos <erick.red@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#define G_LOG_DOMAIN "GcalYearView"
|
||||
|
||||
#include "gcal-application.h"
|
||||
#include "gcal-clock.h"
|
||||
#include "gcal-context.h"
|
||||
#include "gcal-debug.h"
|
||||
#include "gcal-range-tree.h"
|
||||
#include "gcal-timeline-subscriber.h"
|
||||
#include "gcal-year-view.h"
|
||||
#include "gcal-view.h"
|
||||
#include "gcal-utils.h"
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#define NAVIGATOR_MAX_GRID_SIZE 4
|
||||
#define VISUAL_CLUES_SIDE 3.0
|
||||
#define WEEK_NUMBER_MARGIN 3.0
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GtkWidget *week_number[6];
|
||||
GtkWidget *day[31];
|
||||
GtkWidget *grid;
|
||||
} MonthData;
|
||||
|
||||
struct _GcalYearView
|
||||
{
|
||||
GtkBox parent;
|
||||
|
||||
GtkFlowBox *flowbox;
|
||||
GtkLabel *year_label;
|
||||
|
||||
/**
|
||||
* first day of the week according to user locale, being
|
||||
* 0 for Sunday, 1 for Monday and so on
|
||||
*/
|
||||
gint first_weekday;
|
||||
|
||||
GSettings *calendar_settings;
|
||||
|
||||
MonthData months[12];
|
||||
|
||||
GDateTime *date;
|
||||
GcalContext *context;
|
||||
gulong update_indicators_idle_id;
|
||||
|
||||
GcalRangeTree *events;
|
||||
};
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_DATE,
|
||||
PROP_CONTEXT,
|
||||
LAST_PROP
|
||||
};
|
||||
|
||||
static void gcal_view_interface_init (GcalViewInterface *iface);
|
||||
|
||||
static void gcal_timeline_subscriber_interface_init (GcalTimelineSubscriberInterface *iface);
|
||||
|
||||
static gboolean update_event_indicators_in_idle_cb (gpointer data);
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (GcalYearView, gcal_year_view, GTK_TYPE_BOX,
|
||||
G_IMPLEMENT_INTERFACE (GCAL_TYPE_VIEW, gcal_view_interface_init)
|
||||
G_IMPLEMENT_INTERFACE (GCAL_TYPE_TIMELINE_SUBSCRIBER,
|
||||
gcal_timeline_subscriber_interface_init));
|
||||
|
||||
static GtkWidget*
|
||||
create_day_label (guint day)
|
||||
{
|
||||
g_autofree gchar *day_str = NULL;
|
||||
GtkWidget *overlay;
|
||||
GtkWidget *label;
|
||||
GtkWidget *dot;
|
||||
|
||||
day_str = g_strdup_printf ("%u", day);
|
||||
label = gtk_label_new (day_str);
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_add_css_class (label, "days");
|
||||
gtk_widget_add_css_class (label, "numeric");
|
||||
|
||||
dot = g_object_new (ADW_TYPE_BIN,
|
||||
"css-name", "dot",
|
||||
"valign", GTK_ALIGN_END,
|
||||
"halign", GTK_ALIGN_CENTER,
|
||||
NULL);
|
||||
|
||||
overlay = gtk_overlay_new ();
|
||||
gtk_overlay_set_child (GTK_OVERLAY (overlay), label);
|
||||
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), dot);
|
||||
g_object_set_data (G_OBJECT (overlay), "dot", dot);
|
||||
|
||||
return overlay;
|
||||
}
|
||||
|
||||
static void
|
||||
set_dot_visible (GtkWidget *day_widget,
|
||||
gboolean visible)
|
||||
{
|
||||
GtkWidget *dot = g_object_get_data (G_OBJECT (day_widget), "dot");
|
||||
gtk_widget_set_visible (dot, visible);
|
||||
}
|
||||
|
||||
static void
|
||||
init_month_data (GcalYearView *self,
|
||||
guint month,
|
||||
MonthData *month_data)
|
||||
{
|
||||
GtkWidget *month_name;
|
||||
GtkWidget *separator;
|
||||
guint i;
|
||||
|
||||
month_data->grid = g_object_new (GTK_TYPE_GRID,
|
||||
"column-spacing", 6,
|
||||
"row-spacing", 6,
|
||||
"column-spacing", 6,
|
||||
"hexpand", TRUE,
|
||||
"vexpand", TRUE,
|
||||
NULL);
|
||||
gtk_widget_add_css_class (month_data->grid, "month");
|
||||
gtk_widget_add_css_class (month_data->grid, "card");
|
||||
gtk_widget_add_css_class (month_data->grid, "activatable");
|
||||
gtk_flow_box_append (self->flowbox, month_data->grid);
|
||||
|
||||
month_name = gtk_label_new (gcal_get_month_name (month));
|
||||
gtk_widget_set_hexpand (month_name, TRUE);
|
||||
gtk_widget_add_css_class (month_name, "accent");
|
||||
gtk_widget_add_css_class (month_name, "title-4");
|
||||
gtk_grid_attach (GTK_GRID (month_data->grid), month_name, 0, 0, 8, 1);
|
||||
|
||||
separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
|
||||
gtk_grid_attach (GTK_GRID (month_data->grid), separator, 0, 1, 8, 1);
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
month_data->week_number[i] = gtk_label_new (NULL);
|
||||
gtk_widget_set_halign (month_data->week_number[i], GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (month_data->week_number[i], GTK_ALIGN_CENTER);
|
||||
gtk_widget_add_css_class (month_data->week_number[i], "week-number");
|
||||
gtk_grid_attach (GTK_GRID (month_data->grid), month_data->week_number[i], 0, i + 2, 1, 1);
|
||||
}
|
||||
|
||||
for (i = 0; i < 31; i++)
|
||||
{
|
||||
month_data->day[i] = create_day_label (i + 1);
|
||||
|
||||
gtk_grid_attach (GTK_GRID (month_data->grid),
|
||||
month_data->day[i],
|
||||
1 + i % 7,
|
||||
2 + i / 7,
|
||||
1,
|
||||
1);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
update_weekday_widgets (GcalYearView *self)
|
||||
{
|
||||
gboolean show_weekdate;
|
||||
guint month;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
show_weekdate = g_settings_get_boolean (self->calendar_settings, "show-weekdate");
|
||||
|
||||
for (month = 0; month < 12; month++)
|
||||
{
|
||||
g_autoptr (GDateTime) week_date = NULL;
|
||||
GDate date;
|
||||
gint days_delay;
|
||||
gint week;
|
||||
|
||||
g_date_set_dmy (&date, 1, month + 1, g_date_time_get_year (self->date));
|
||||
days_delay = 7 - (7 - ((g_date_get_weekday (&date) % 7) - (self->first_weekday % 7)));
|
||||
|
||||
/* Week numbers */
|
||||
week_date = g_date_time_new_local (g_date_time_get_year (self->date),
|
||||
month + 1,
|
||||
1, 0, 0, 0);
|
||||
|
||||
for (week = 0; week < 6; week++)
|
||||
{
|
||||
g_autoptr (GDateTime) next_week_date = NULL;
|
||||
GtkWidget *label;
|
||||
gboolean valid_date;
|
||||
|
||||
valid_date = g_date_valid_dmy (MAX (week * 7 + 1 - days_delay, 1),
|
||||
month + 1,
|
||||
g_date_time_get_year (self->date));
|
||||
|
||||
label = self->months[month].week_number[week];
|
||||
gtk_widget_set_visible (label, valid_date && show_weekdate);
|
||||
|
||||
if (valid_date)
|
||||
{
|
||||
g_autofree gchar *week_number = NULL;
|
||||
|
||||
week_number = g_strdup_printf ("%d", g_date_time_get_week_of_year (week_date));
|
||||
gtk_label_set_label (GTK_LABEL (label), week_number);
|
||||
}
|
||||
|
||||
next_week_date = g_date_time_add_days (week_date, 7);
|
||||
gcal_set_date_time (&week_date, next_week_date);
|
||||
}
|
||||
}
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
static void
|
||||
update_year_label (GcalYearView *self)
|
||||
{
|
||||
g_autofree gchar *year = NULL;
|
||||
|
||||
year = g_date_time_format (self->date, "%Y");
|
||||
gtk_label_set_label (self->year_label, year);
|
||||
}
|
||||
|
||||
static void
|
||||
update_event_indicators (GcalYearView *self)
|
||||
{
|
||||
guint month;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
for (month = 0; month < 12; month++)
|
||||
{
|
||||
guint day;
|
||||
|
||||
for (day = 0; day < 31; day++)
|
||||
{
|
||||
g_autoptr (GcalRange) range = NULL;
|
||||
g_autoptr (GDateTime) date = NULL;
|
||||
|
||||
if (!g_date_valid_dmy (day + 1, month + 1, g_date_time_get_year (self->date)))
|
||||
continue;
|
||||
|
||||
date = g_date_time_new_local (g_date_time_get_year (self->date),
|
||||
month + 1,
|
||||
day + 1,
|
||||
0, 0, 0);
|
||||
range = gcal_range_new_take (g_date_time_ref (date),
|
||||
g_date_time_add_days (date, 1),
|
||||
GCAL_RANGE_DEFAULT);
|
||||
|
||||
set_dot_visible (self->months[month].day[day],
|
||||
gcal_range_tree_count_entries_at_range (self->events, range) > 0);
|
||||
}
|
||||
}
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
static void
|
||||
update_month_grid (GcalYearView *self)
|
||||
{
|
||||
g_autoptr (GDateTime) now = NULL;
|
||||
gboolean show_weekdate;
|
||||
guint month;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
now = g_date_time_new_now_local ();
|
||||
show_weekdate = g_settings_get_boolean (self->calendar_settings, "show-weekdate");
|
||||
|
||||
for (month = 0; month < 12; month++)
|
||||
{
|
||||
g_autoptr (GDateTime) week_date = NULL;
|
||||
GDate date;
|
||||
guint day;
|
||||
gint days_delay;
|
||||
gint column;
|
||||
gint week;
|
||||
gint row;
|
||||
|
||||
g_date_set_dmy (&date, 1, month + 1, g_date_time_get_year (self->date));
|
||||
days_delay = 7 - (7 - ((g_date_get_weekday (&date) % 7) - (self->first_weekday % 7)));
|
||||
|
||||
column = days_delay;
|
||||
row = 2;
|
||||
|
||||
/* Week numbers */
|
||||
week_date = g_date_time_new_local (g_date_time_get_year (self->date),
|
||||
month + 1,
|
||||
1, 0, 0, 0);
|
||||
|
||||
for (week = 0; week < 6; week++)
|
||||
{
|
||||
g_autoptr (GDateTime) next_week_date = NULL;
|
||||
GtkWidget *label;
|
||||
gboolean valid_date;
|
||||
|
||||
valid_date = g_date_valid_dmy (MAX (week * 7 + 1 - days_delay, 1),
|
||||
month + 1,
|
||||
g_date_time_get_year (self->date));
|
||||
|
||||
label = self->months[month].week_number[week];
|
||||
gtk_widget_set_visible (label, valid_date && show_weekdate);
|
||||
|
||||
if (valid_date)
|
||||
{
|
||||
g_autofree gchar *week_number = NULL;
|
||||
|
||||
week_number = g_strdup_printf ("%d", g_date_time_get_week_of_year (week_date));
|
||||
gtk_label_set_label (GTK_LABEL (label), week_number);
|
||||
}
|
||||
|
||||
next_week_date = g_date_time_add_days (week_date, 7);
|
||||
gcal_set_date_time (&week_date, next_week_date);
|
||||
}
|
||||
|
||||
/* Month days */
|
||||
for (day = 0; day < 31; day++)
|
||||
{
|
||||
g_autoptr (GDateTime) day_datetime = NULL;
|
||||
GtkLayoutManager *layout_manager;
|
||||
GtkLayoutChild *layout_child;
|
||||
GtkWidget *label;
|
||||
gboolean valid_date;
|
||||
gint weekday;
|
||||
|
||||
label = self->months[month].day[day];
|
||||
valid_date = g_date_valid_dmy (day + 1, month + 1, g_date_time_get_year (self->date));
|
||||
|
||||
gtk_widget_set_visible (label, valid_date);
|
||||
|
||||
if (!valid_date)
|
||||
continue;
|
||||
|
||||
day_datetime = g_date_time_new_local (g_date_time_get_year (self->date),
|
||||
month + 1,
|
||||
day + 1,
|
||||
0, 0, 0);
|
||||
|
||||
g_date_set_dmy (&date, day + 1, month + 1, g_date_time_get_year (self->date));
|
||||
weekday = g_date_get_weekday (&date) % 7;
|
||||
|
||||
if (!is_workday (weekday))
|
||||
gtk_widget_add_css_class (label, "non-workday");
|
||||
else
|
||||
gtk_widget_remove_css_class (label, "non-workday");
|
||||
|
||||
if (g_date_time_get_month (now) == month + 1 &&
|
||||
g_date_time_get_day_of_month (now) == day + 1 &&
|
||||
g_date_time_get_year (now) == g_date_time_get_year (self->date))
|
||||
gtk_widget_add_css_class (label, "current");
|
||||
else
|
||||
gtk_widget_remove_css_class (label, "current");
|
||||
|
||||
layout_manager = gtk_widget_get_layout_manager (GTK_WIDGET (self->months[month].grid));
|
||||
layout_child = gtk_layout_manager_get_layout_child (layout_manager, label);
|
||||
|
||||
gtk_grid_layout_child_set_column (GTK_GRID_LAYOUT_CHILD (layout_child), column + 1);
|
||||
gtk_grid_layout_child_set_row (GTK_GRID_LAYOUT_CHILD (layout_child), row);
|
||||
|
||||
column++;
|
||||
if (column >= 7)
|
||||
row++;
|
||||
column %= 7;
|
||||
}
|
||||
}
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
static void
|
||||
queue_update_event_indicators (GcalYearView *self)
|
||||
{
|
||||
if (self->update_indicators_idle_id > 0)
|
||||
return;
|
||||
|
||||
self->update_indicators_idle_id = g_idle_add_full (G_PRIORITY_LOW,
|
||||
update_event_indicators_in_idle_cb,
|
||||
self,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Callbacks
|
||||
*/
|
||||
|
||||
static gboolean
|
||||
update_event_indicators_in_idle_cb (gpointer data)
|
||||
{
|
||||
GcalYearView *self = GCAL_YEAR_VIEW (data);
|
||||
|
||||
update_event_indicators (self);
|
||||
|
||||
self->update_indicators_idle_id = 0;
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_clock_day_changed_cb (GcalClock *clock,
|
||||
GcalYearView *self)
|
||||
{
|
||||
GCAL_ENTRY;
|
||||
|
||||
update_month_grid (self);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
static void
|
||||
on_flowbox_child_activated_cb (GtkFlowBox *flowbox,
|
||||
GtkFlowBoxChild *child,
|
||||
GcalYearView *self)
|
||||
{
|
||||
g_autoptr (GDateTime) date = NULL;
|
||||
gint child_index;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
child_index = gtk_flow_box_child_get_index (child);
|
||||
date = g_date_time_new_local (g_date_time_get_year (self->date),
|
||||
child_index + 1,
|
||||
1, 0, 0, 0);
|
||||
|
||||
gcal_set_date_time (&self->date, date);
|
||||
g_object_notify (G_OBJECT (self), "active-date");
|
||||
|
||||
gtk_widget_activate_action (GTK_WIDGET (self), "win.change-view", "i", 1);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
static void
|
||||
on_show_weekdate_changed_cb (GSettings *settings,
|
||||
gchar *key,
|
||||
GcalYearView *self)
|
||||
{
|
||||
GCAL_ENTRY;
|
||||
|
||||
update_weekday_widgets (self);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* GcalTimelineSubscriber implementation
|
||||
*/
|
||||
|
||||
static GcalRange*
|
||||
gcal_year_view_get_range (GcalTimelineSubscriber *subscriber)
|
||||
{
|
||||
g_autoptr (GDateTime) start = NULL;
|
||||
g_autoptr (GDateTime) end = NULL;
|
||||
GcalYearView *self;
|
||||
|
||||
self = GCAL_YEAR_VIEW (subscriber);
|
||||
start = g_date_time_new_local (g_date_time_get_year (self->date), 1, 1, 0, 0, 0);
|
||||
end = g_date_time_add_years (start, 1);
|
||||
|
||||
return gcal_range_new (start, end, GCAL_RANGE_DEFAULT);
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_year_view_add_event (GcalTimelineSubscriber *subscriber,
|
||||
GcalEvent *event)
|
||||
{
|
||||
GcalYearView *self;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
self = GCAL_YEAR_VIEW (subscriber);
|
||||
|
||||
g_debug ("Caching event '%s' in Year view", gcal_event_get_uid (event));
|
||||
gcal_range_tree_add_range (self->events, gcal_event_get_range (event), g_object_ref (event));
|
||||
|
||||
queue_update_event_indicators (self);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_year_view_remove_event (GcalTimelineSubscriber *subscriber,
|
||||
GcalEvent *event)
|
||||
{
|
||||
GcalYearView *self;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
self = GCAL_YEAR_VIEW (subscriber);
|
||||
|
||||
g_debug ("Removing event '%s' from Year view's cache", gcal_event_get_uid (event));
|
||||
gcal_range_tree_remove_range (self->events, gcal_event_get_range (event), event);
|
||||
|
||||
queue_update_event_indicators (self);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_year_view_update_event (GcalTimelineSubscriber *subscriber,
|
||||
GcalEvent *event)
|
||||
{
|
||||
GCAL_ENTRY;
|
||||
|
||||
gcal_year_view_remove_event (subscriber, event);
|
||||
gcal_year_view_add_event (subscriber, event);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_timeline_subscriber_interface_init (GcalTimelineSubscriberInterface *iface)
|
||||
{
|
||||
iface->get_range = gcal_year_view_get_range;
|
||||
iface->add_event = gcal_year_view_add_event;
|
||||
iface->remove_event = gcal_year_view_remove_event;
|
||||
iface->update_event = gcal_year_view_update_event;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* GcalView interface
|
||||
*/
|
||||
|
||||
static GDateTime*
|
||||
gcal_year_view_get_date (GcalView *view)
|
||||
{
|
||||
GcalYearView *self = GCAL_YEAR_VIEW (view);
|
||||
|
||||
return self->date;
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_year_view_set_date (GcalView *view,
|
||||
GDateTime *date)
|
||||
{
|
||||
GcalYearView *self;
|
||||
gboolean year_changed;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
self = GCAL_YEAR_VIEW (view);
|
||||
|
||||
year_changed = !self->date || g_date_time_get_year (self->date) != g_date_time_get_year (date);
|
||||
|
||||
gcal_set_date_time (&self->date, date);
|
||||
|
||||
if (year_changed)
|
||||
gcal_timeline_subscriber_range_changed (GCAL_TIMELINE_SUBSCRIBER (view));
|
||||
|
||||
update_weekday_widgets (self);
|
||||
update_month_grid (self);
|
||||
update_year_label (self);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
static GList*
|
||||
gcal_year_view_get_children_by_uuid (GcalView *view,
|
||||
GcalRecurrenceModType mod,
|
||||
const gchar *uuid)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GDateTime*
|
||||
gcal_year_view_get_next_date (GcalView *view)
|
||||
{
|
||||
GcalYearView *self = GCAL_YEAR_VIEW (view);
|
||||
|
||||
g_assert (self->date != NULL);
|
||||
return g_date_time_add_years (self->date, 1);
|
||||
}
|
||||
|
||||
|
||||
static GDateTime*
|
||||
gcal_year_view_get_previous_date (GcalView *view)
|
||||
{
|
||||
GcalYearView *self = GCAL_YEAR_VIEW (view);
|
||||
|
||||
g_assert (self->date != NULL);
|
||||
return g_date_time_add_years (self->date, -1);
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_view_interface_init (GcalViewInterface *iface)
|
||||
{
|
||||
iface->get_date = gcal_year_view_get_date;
|
||||
iface->set_date = gcal_year_view_set_date;
|
||||
iface->get_children_by_uuid = gcal_year_view_get_children_by_uuid;
|
||||
iface->get_next_date = gcal_year_view_get_next_date;
|
||||
iface->get_previous_date = gcal_year_view_get_previous_date;
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_year_view_finalize (GObject *object)
|
||||
{
|
||||
GcalYearView *year_view = GCAL_YEAR_VIEW (object);
|
||||
|
||||
g_clear_pointer (&year_view->date, g_date_time_unref);
|
||||
g_clear_pointer (&year_view->events, gcal_range_tree_unref);
|
||||
g_clear_object (&year_view->calendar_settings);
|
||||
|
||||
G_OBJECT_CLASS (gcal_year_view_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_year_view_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GcalYearView *self = GCAL_YEAR_VIEW (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DATE:
|
||||
g_value_set_boxed (value, self->date);
|
||||
break;
|
||||
|
||||
case PROP_CONTEXT:
|
||||
g_value_set_object (value, self->context);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_year_view_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GcalYearView *self = GCAL_YEAR_VIEW (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DATE:
|
||||
gcal_view_set_date (GCAL_VIEW (self), g_value_get_boxed (value));
|
||||
break;
|
||||
|
||||
case PROP_CONTEXT:
|
||||
g_assert (self->context == NULL);
|
||||
self->context = g_value_dup_object (value);
|
||||
|
||||
g_signal_connect_object (gcal_context_get_clock (self->context),
|
||||
"day-changed",
|
||||
G_CALLBACK (on_clock_day_changed_cb),
|
||||
self,
|
||||
0);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_year_view_class_init (GcalYearViewClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
object_class->finalize = gcal_year_view_finalize;
|
||||
object_class->get_property = gcal_year_view_get_property;
|
||||
object_class->set_property = gcal_year_view_set_property;
|
||||
|
||||
g_object_class_override_property (object_class, PROP_DATE, "active-date");
|
||||
g_object_class_override_property (object_class, PROP_CONTEXT, "context");
|
||||
|
||||
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/calendar/ui/views/gcal-year-view.ui");
|
||||
|
||||
gtk_widget_class_bind_template_child (widget_class, GcalYearView, flowbox);
|
||||
gtk_widget_class_bind_template_child (widget_class, GcalYearView, year_label);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, on_flowbox_child_activated_cb);
|
||||
|
||||
gtk_widget_class_set_css_name (widget_class, "calendar-view");
|
||||
}
|
||||
|
||||
static void
|
||||
gcal_year_view_init (GcalYearView *self)
|
||||
{
|
||||
guint i;
|
||||
|
||||
gtk_widget_init_template (GTK_WIDGET (self));
|
||||
|
||||
self->first_weekday = get_first_weekday ();
|
||||
self->events = gcal_range_tree_new_with_free_func (g_object_unref);
|
||||
|
||||
/* bind GNOME Shell' show week numbers property to GNOME Calendar's one */
|
||||
self->calendar_settings = g_settings_new ("org.gnome.desktop.calendar");
|
||||
g_signal_connect (self->calendar_settings, "changed::show-weekdate", G_CALLBACK (on_show_weekdate_changed_cb), self);
|
||||
|
||||
for (i = 0; i < 12; i++)
|
||||
init_month_data (self, i, &self->months[i]);
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
/* gcal-year-view.h
|
||||
*
|
||||
* Copyright (C) 2015 Erick Pérez Castellanos <erick.red@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef GCAL_YEAR_VIEW_H
|
||||
#define GCAL_YEAR_VIEW_H
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GCAL_TYPE_YEAR_VIEW (gcal_year_view_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GcalYearView, gcal_year_view, GCAL, YEAR_VIEW, GtkBox)
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* GCAL_YEAR_VIEW_H */
|
||||
@@ -1,68 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface>
|
||||
<template class="GcalYearView" parent="GtkBox">
|
||||
<property name="orientation">vertical</property>
|
||||
<style>
|
||||
<class name="year-view"/>
|
||||
</style>
|
||||
|
||||
<child>
|
||||
<object class="GtkLabel" id="year_label">
|
||||
<property name="hexpand">true</property>
|
||||
<property name="xalign">1.0</property>
|
||||
<style>
|
||||
<class name="secondary-label" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkSeparator">
|
||||
<property name="orientation">horizontal</property>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="hexpand">True</property>
|
||||
<property name="vexpand">True</property>
|
||||
<style>
|
||||
<class name="background" />
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkViewport">
|
||||
<property name="scroll-to-focus">True</property>
|
||||
|
||||
<child>
|
||||
<object class="AdwClamp">
|
||||
<property name="margin-top">24</property>
|
||||
<property name="margin-bottom">24</property>
|
||||
<property name="margin-start">24</property>
|
||||
<property name="margin-end">24</property>
|
||||
<property name="maximum-size">1600</property>
|
||||
<property name="tightening-threshold">1200</property>
|
||||
|
||||
<child>
|
||||
<object class="GtkFlowBox" id="flowbox">
|
||||
<property name="valign">center</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<property name="selection-mode">none</property>
|
||||
<property name="min-children-per-line">1</property>
|
||||
<property name="max-children-per-line">4</property>
|
||||
<property name="column-spacing">18</property>
|
||||
<property name="row-spacing">18</property>
|
||||
<signal name="child-activated" handler="on_flowbox_child_activated_cb" object="GcalYearView" swapped="no" />
|
||||
<style>
|
||||
<class name="year-navigator"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</template>
|
||||
</interface>
|
||||
@@ -16,5 +16,4 @@ sources += files(
|
||||
'gcal-week-hour-bar.c',
|
||||
'gcal-week-view.c',
|
||||
'gcal-week-view-common.c',
|
||||
'gcal-year-view.c',
|
||||
)
|
||||
|
||||
@@ -6,6 +6,5 @@
|
||||
<file compressed="true">gcal-month-view.ui</file>
|
||||
<file compressed="true">gcal-week-header.ui</file>
|
||||
<file compressed="true">gcal-week-view.ui</file>
|
||||
<file compressed="true">gcal-year-view.ui</file>
|
||||
</gresource>
|
||||
</gresources>
|
||||
|
||||
@@ -36,57 +36,6 @@ calendar-view:selected {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Year View CSS */
|
||||
|
||||
.year-navigator grid.month {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.year-navigator label.days {
|
||||
padding: 5px;
|
||||
color: @theme_fg_color;
|
||||
font-size: 9pt;
|
||||
min-width: 18px;
|
||||
min-height: 18px;
|
||||
}
|
||||
|
||||
.year-navigator label.non-workday {
|
||||
color: alpha(@theme_fg_color, 0.5);
|
||||
}
|
||||
|
||||
.year-navigator label.week-number {
|
||||
font-size: 0.5rem;
|
||||
border-radius: 50%;
|
||||
background-color: alpha(@theme_fg_color, 0.05);
|
||||
color: alpha(@theme_fg_color, 0.4);
|
||||
min-width: 18px;
|
||||
min-height: 18px;
|
||||
}
|
||||
|
||||
.year-navigator .current label {
|
||||
color: @accent_fg_color;
|
||||
background-color: @accent_bg_color;
|
||||
border-radius: 50%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.year-navigator dot {
|
||||
transform: translateX(-1px) translateY(-3px);
|
||||
background-color: @theme_fg_color;
|
||||
border-radius: 3px;
|
||||
min-width: 3px;
|
||||
min-height: 3px;
|
||||
}
|
||||
|
||||
.year-navigator .current dot {
|
||||
background-color: @accent_fg_color;
|
||||
}
|
||||
|
||||
|
||||
.year-navigator .non-workday dot {
|
||||
background-color: alpha(@theme_fg_color, 0.5);
|
||||
}
|
||||
|
||||
popover.events {
|
||||
background-color: @theme_bg_color;
|
||||
padding: 0;
|
||||
|
||||
Reference in New Issue
Block a user