Index: src/mainbox.h
===================================================================
--- src/mainbox.h (revision 26656)
+++ src/mainbox.h (working copy)
@@ -50,9 +50,17 @@
GtkWidget *mCalendar;
- GtkWidget *mInfo_scrolledWin;
- GtkWidget *mInfo_vbox;
+ GtkWidget *mInfo_hbox;
+ GtkWidget *mInfo_container_Vbox;
+ GtkWidget *mTodo_label;
+ GtkWidget *mTodo_scrolledWin;
+ GtkWidget *mTodo_vbox;
+
+ GtkWidget *mEvent_label;
+ GtkWidget *mEvent_scrolledWin;
+ GtkWidget *mEvent_vbox;
+
GdkColor mRed, mBlue;
} CalWin;
@@ -60,5 +68,6 @@
gboolean orage_mark_appointments();
void build_mainbox_info();
void mCalendar_month_changed_cb(GtkCalendar *calendar, gpointer user_data);
+void orage_show_events_for_selected_date(void);
#endif /* !__MAINBOX_H__ */
Index: src/parameters.c
===================================================================
--- src/parameters.c (revision 26656)
+++ src/parameters.c (working copy)
@@ -82,6 +82,8 @@
GtkWidget *show_taskbar_checkbutton;
GtkWidget *show_pager_checkbutton;
GtkWidget *show_systray_checkbutton;
+ GtkWidget *show_todos_checkbutton;
+ GtkWidget *show_events_checkbutton;
/* Start visibity show or hide */
GtkWidget *visibility_frame;
GSList *visibility_radiobutton_group;
@@ -265,6 +267,22 @@
set_systray();
}
+static void todos_changed(GtkWidget *dialog, gpointer user_data)
+{
+ Itf *itf = (Itf *)user_data;
+
+ g_par.show_todos = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
+ itf->show_todos_checkbutton));
+}
+
+static void events_changed(GtkWidget *dialog, gpointer user_data)
+{
+ Itf *itf = (Itf *)user_data;
+
+ g_par.show_events = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
+ itf->show_events_checkbutton));
+}
+
static void start_changed(GtkWidget *dialog, gpointer user_data)
{
Itf *itf = (Itf *)user_data;
@@ -540,12 +558,30 @@
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
dialog->show_systray_checkbutton), g_par.show_systray);
+ dialog->show_todos_checkbutton = gtk_check_button_new_with_mnemonic(
+ _("Show Todo items"));
+ gtk_box_pack_start(GTK_BOX(vbox)
+ , dialog->show_todos_checkbutton, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
+ dialog->show_todos_checkbutton), g_par.show_todos);
+
+ dialog->show_events_checkbutton = gtk_check_button_new_with_mnemonic(
+ _("Show events for selected day"));
+ gtk_box_pack_start(GTK_BOX(vbox)
+ , dialog->show_events_checkbutton, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
+ dialog->show_events_checkbutton), g_par.show_events);
+
g_signal_connect(G_OBJECT(dialog->show_taskbar_checkbutton), "toggled"
, G_CALLBACK(taskbar_changed), dialog);
g_signal_connect(G_OBJECT(dialog->show_pager_checkbutton), "toggled"
, G_CALLBACK(pager_changed), dialog);
g_signal_connect(G_OBJECT(dialog->show_systray_checkbutton), "toggled"
, G_CALLBACK(systray_changed), dialog);
+ g_signal_connect(G_OBJECT(dialog->show_todos_checkbutton), "toggled"
+ , G_CALLBACK(todos_changed), dialog);
+ g_signal_connect(G_OBJECT(dialog->show_events_checkbutton), "toggled"
+ , G_CALLBACK(events_changed), dialog);
/* how to show when started (show/hide/minimize) */
dialog->visibility_radiobutton_group = NULL;
@@ -808,6 +844,8 @@
xfce_rc_write_bool_entry(rc, "Show in pager", g_par.show_pager);
xfce_rc_write_bool_entry(rc, "Show in systray", g_par.show_systray);
xfce_rc_write_bool_entry(rc, "Show in taskbar", g_par.show_taskbar);
+ xfce_rc_write_bool_entry(rc, "Show Todo items", g_par.show_todos);
+ xfce_rc_write_bool_entry(rc, "Show events for selected day", g_par.show_events);
xfce_rc_write_bool_entry(rc, "Start visible", g_par.start_visible);
xfce_rc_write_bool_entry(rc, "Start minimized", g_par.start_minimized);
xfce_rc_write_bool_entry(rc, "Set sticked", g_par.set_stick);
@@ -882,6 +920,8 @@
g_par.show_borders = xfce_rc_read_bool_entry(rc, "Show borders", TRUE);
g_par.show_pager = xfce_rc_read_bool_entry(rc, "Show in pager", TRUE);
g_par.show_systray = xfce_rc_read_bool_entry(rc, "Show in systray", TRUE);
+ g_par.show_todos = xfce_rc_read_bool_entry(rc, "Show Todo items", TRUE);
+ g_par.show_events = xfce_rc_read_bool_entry(rc, "Show events for selected day", TRUE);
g_par.show_taskbar = xfce_rc_read_bool_entry(rc, "Show in taskbar", TRUE);
g_par.start_visible = xfce_rc_read_bool_entry(rc, "Start visible", TRUE);
g_par.start_minimized =
Index: src/parameters.h
===================================================================
--- src/parameters.h (revision 26656)
+++ src/parameters.h (working copy)
@@ -48,6 +48,9 @@
gboolean set_stick;
gboolean set_ontop;
+ gboolean show_todos;
+ gboolean show_events;
+
/* ical week start day (0 = Monday, 1 = Tuesday,... 6 = Sunday) */
gint ical_weekstartday;
Index: src/main.c
===================================================================
--- src/main.c (revision 26656)
+++ src/main.c (working copy)
@@ -122,6 +122,8 @@
window = GTK_WIDGET(g_par.xfcal->mWindow)->window;
gdk_x11_window_set_user_time(window, gdk_x11_get_server_time(window));
gtk_window_present(GTK_WINDOW(g_par.xfcal->mWindow));
+
+ orage_show_events_for_selected_date();
}
static gboolean client_message_received(GtkWidget *widget
Index: src/mainbox.c
===================================================================
--- src/mainbox.c (revision 26656)
+++ src/mainbox.c (working copy)
@@ -55,6 +55,8 @@
#define ORAGE_DEBUG 1
*/
+static void show_mainbox_info (gboolean todos, gboolean events);
+static void build_mainbox_info_for_date(struct tm *t);
gboolean orage_mark_appointments()
{
@@ -210,6 +212,34 @@
create_el_win(NULL);
}
+void orage_show_events_for_selected_date(void)
+{
+ struct tm t;
+ CalWin *cal = g_par.xfcal;
+ gtk_calendar_get_date(GTK_CALENDAR(cal->mCalendar),
+ &(t.tm_year),
+ &(t.tm_mon),
+ &(t.tm_mday));
+ t.tm_year -= 1900;
+
+ /* rebuild the info for the selected date */
+ if (!xfical_file_open(TRUE))
+ return;
+ build_mainbox_info_for_date(&t);
+ xfical_file_close(TRUE);
+}
+
+static void mCalendar_day_selected_cb(GtkCalendar *calendar
+ , gpointer user_data)
+{
+#undef P_N
+#define P_N "mCalendar_day_selected_cb: "
+#ifdef ORAGE_DEBUG
+ orage_message(-100, P_N);
+#endif
+ orage_show_events_for_selected_date();
+}
+
static gboolean upd_calendar(GtkCalendar *calendar)
{
#undef P_N
@@ -349,7 +379,7 @@
}
}
-static void add_info_row(xfical_appt *appt)
+static void add_info_row(xfical_appt *appt, GtkBox *parentBox)
{
#undef P_N
#define P_N "add_info_row: "
@@ -359,13 +389,16 @@
struct tm *t;
char *l_time, *s_time, *e_time, *c_time, *na;
gint len;
-
+ gchar *tmp;
#ifdef ORAGE_DEBUG
orage_message(-100, P_N);
#endif
ev = gtk_event_box_new();
- label = gtk_label_new(appt->title);
+ tmp = g_strdup_printf(" %s", appt->title);
+ label = gtk_label_new(tmp);
+ g_free(tmp);
gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
t = orage_localtime();
l_time = orage_tm_time_to_icaltime(t);
if (appt->starttimecur[8] == 'T') /* date+time */
@@ -378,7 +411,7 @@
&& strncmp(appt->endtimecur, l_time, len) >= 0)
gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &cal->mBlue);
gtk_container_add(GTK_CONTAINER(ev), label);
- gtk_box_pack_start(GTK_BOX(cal->mInfo_vbox), ev, FALSE, FALSE, 0);
+ gtk_box_pack_start(parentBox, ev, FALSE, FALSE, 0);
na = _("Not defined");
s_time = g_strdup(orage_icaltime_to_i18_time(appt->starttimecur));
e_time = g_strdup(orage_icaltime_to_i18_time(appt->endtimecur));
@@ -431,21 +464,21 @@
return(strcmp(appt1->starttimecur, appt2->starttimecur));
}
-static void todo_process(gpointer a, gpointer dummy)
+static void todo_process(gpointer a, gpointer parentBox)
{
#undef P_N
#define P_N "todo_process: "
xfical_appt *appt;
-
+ GtkBox *box = GTK_BOX(parentBox);
#ifdef ORAGE_DEBUG
orage_message(-100, P_N);
#endif
appt = (xfical_appt *)a;
- add_info_row(appt);
+ add_info_row(appt, box);
xfical_appt_free(appt);
}
-void create_mainbox_info(void)
+void create_mainbox_info(gboolean first_create)
{
#undef P_N
#define P_N "create_mainbox_info: "
@@ -454,70 +487,180 @@
#ifdef ORAGE_DEBUG
orage_message(-100, P_N);
#endif
- cal->mInfo_scrolledWin = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cal->mInfo_scrolledWin)
+
+ /* destroy existing if necessary - this is the easiest way
+ * to relayout
+ */
+ if (!first_create) {
+ gtk_widget_destroy(cal->mInfo_hbox);
+ }
+
+/* global part */
+ cal->mInfo_hbox = gtk_hbox_new(FALSE, 0);
+ cal->mInfo_container_Vbox = gtk_vbox_new(FALSE, 0);
+
+ gtk_box_pack_start(GTK_BOX(cal->mVbox), cal->mInfo_hbox
+ , TRUE, TRUE, 2);
+ gtk_box_pack_start(GTK_BOX(cal->mInfo_hbox), cal->mInfo_container_Vbox
+ , TRUE, TRUE, 4);
+
+/* todo part */
+ cal->mTodo_label = gtk_label_new(NULL);
+ gtk_label_set_markup(GTK_LABEL(cal->mTodo_label), _("To do:"));
+
+ gtk_box_pack_start(GTK_BOX(cal->mInfo_container_Vbox), cal->mTodo_label
+ , TRUE, TRUE, 0);
+ gtk_misc_set_alignment(GTK_MISC(cal->mTodo_label), 0, 0.5);
+ cal->mTodo_scrolledWin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cal->mTodo_scrolledWin)
, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_box_pack_start(GTK_BOX(cal->mVbox), cal->mInfo_scrolledWin
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(cal->mTodo_scrolledWin)
+ , GTK_SHADOW_NONE);
+ gtk_box_pack_start(GTK_BOX(cal->mInfo_container_Vbox), cal->mTodo_scrolledWin
, FALSE, FALSE, 0);
- cal->mInfo_vbox = gtk_vbox_new(FALSE, 0);
+ cal->mTodo_vbox = gtk_vbox_new(FALSE, 0);
gtk_scrolled_window_add_with_viewport(
- GTK_SCROLLED_WINDOW(cal->mInfo_scrolledWin), cal->mInfo_vbox);
+ GTK_SCROLLED_WINDOW(cal->mTodo_scrolledWin), cal->mTodo_vbox);
+
+/* events part */
+ cal->mEvent_label = gtk_label_new(NULL);
+ gtk_label_set_markup(GTK_LABEL(cal->mEvent_label), _("Events for:"));
+
+ gtk_box_pack_start(GTK_BOX(cal->mInfo_container_Vbox), cal->mEvent_label
+ , TRUE, TRUE, 0);
+ gtk_misc_set_alignment(GTK_MISC(cal->mEvent_label), 0, 0.5);
+ cal->mEvent_scrolledWin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cal->mEvent_scrolledWin)
+ , GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(cal->mEvent_scrolledWin)
+ , GTK_SHADOW_NONE);
+ gtk_box_pack_start(GTK_BOX(cal->mInfo_container_Vbox), cal->mEvent_scrolledWin
+ , FALSE, FALSE, 0);
+ cal->mEvent_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_scrolled_window_add_with_viewport(
+ GTK_SCROLLED_WINDOW(cal->mEvent_scrolledWin), cal->mEvent_vbox);
}
-void build_mainbox_info(void)
+static void show_mainbox_info (gboolean todos, gboolean events)
{
#undef P_N
+#define P_N "show_mainbox_info: "
+ CalWin *cal = g_par.xfcal;
+
+#ifdef ORAGE_DEBUG
+ orage_message(-100, P_N);
+#endif
+ if (todos || events) {
+ /* first show everything, then hide parts if necessary */
+ gtk_widget_show_all(cal->mInfo_hbox);
+ if (!todos) {
+ gtk_widget_hide_all(cal->mTodo_label);
+ gtk_widget_hide_all(cal->mTodo_scrolledWin);
+ }
+ if (!events) {
+ gtk_widget_hide_all(cal->mEvent_label);
+ gtk_widget_hide_all(cal->mEvent_scrolledWin);
+ } else {
+ gchar *tmp = g_strdup_printf(
+ _("Events for %s:"),
+ orage_cal_to_i18_date(
+ GTK_CALENDAR(cal->mCalendar)));
+ gtk_label_set_markup(GTK_LABEL(cal->mEvent_label), tmp);
+ g_free(tmp);
+ }
+ } else {
+ gtk_widget_hide_all(cal->mInfo_hbox);
+ }
+}
+
+static void build_mainbox_info_for_date(struct tm *t)
+{
+#undef P_N
#define P_N "build_mainbox_info: "
CalWin *cal = g_par.xfcal;
char *s_time;
char a_day[9]; /* yyyymmdd */
- struct tm *t;
xfical_type ical_type;
gchar file_type[8];
gint i;
GList *todo_list=NULL;
+ GList *event_list = NULL;
#ifdef ORAGE_DEBUG
orage_message(-100, P_N);
#endif
- t = orage_localtime();
s_time = orage_tm_time_to_icaltime(t);
strncpy(a_day, s_time, 8);
a_day[8] = '\0';
- ical_type = XFICAL_TYPE_TODO;
- /* first search base orage file */
- /* this routine is called always from libical build alarm list internal
- * and ical files are already open at that time */
- /*
- if (!xfical_file_open(TRUE))
- return;
- */
- strcpy(file_type, "O00.");
- insert_rows(&todo_list, a_day, ical_type, file_type);
- /* then process all foreign files */
- for (i = 0; i < g_par.foreign_count; i++) {
- g_sprintf(file_type, "F%02d.", i);
- insert_rows(&todo_list, a_day, ical_type, file_type);
+ if (g_par.show_todos) {
+ ical_type = XFICAL_TYPE_TODO;
+ /* first search base orage file */
+ /* this routine is called always from libical build alarm list internal
+ * and ical files are already open at that time */
+ /*
+ if (!xfical_file_open(TRUE))
+ return;
+ */
+ strcpy(file_type, "O00.");
+ insert_rows(&todo_list, a_day, ical_type, file_type);
+ /* then process all foreign files */
+ for (i = 0; i < g_par.foreign_count; i++) {
+ g_sprintf(file_type, "F%02d.", i);
+ insert_rows(&todo_list, a_day, ical_type, file_type);
+ }
+ /* caller takes care of this
+ xfical_file_close(TRUE);
+ */
}
- /* caller takes care of this
- xfical_file_close(TRUE);
- */
- if (todo_list) {
- gtk_widget_destroy(cal->mInfo_scrolledWin);
- create_mainbox_info();
- todo_list = g_list_sort(todo_list, todo_order);
- g_list_foreach(todo_list, (GFunc)todo_process, NULL);
- g_list_free(todo_list);
- todo_list = NULL;
- gtk_widget_show_all(cal->mInfo_scrolledWin);
+ if (g_par.show_events) {
+ ical_type = XFICAL_TYPE_EVENT;
+ /* first search base orage file */
+ /* this routine is called always from libical build alarm list internal
+ * and ical files are already open at that time */
+ /*
+ if (!xfical_file_open(TRUE))
+ return;
+ */
+ strcpy(file_type, "O00.");
+ insert_rows(&event_list, a_day, ical_type, file_type);
+ /* then process all foreign files */
+ for (i = 0; i < g_par.foreign_count; i++) {
+ g_sprintf(file_type, "F%02d.", i);
+ insert_rows(&event_list, a_day, ical_type, file_type);
+ }
+ /* caller takes care of this
+ xfical_file_close(TRUE);
+ */
}
- else {
- gtk_widget_hide_all(cal->mInfo_scrolledWin);
+ if (todo_list || event_list) {
+ create_mainbox_info(FALSE);
+ if (todo_list) {
+ todo_list = g_list_sort(todo_list, todo_order);
+ g_list_foreach(todo_list, (GFunc)todo_process, cal->mTodo_vbox);
+ }
+ if (event_list) {
+ event_list = g_list_sort(event_list, todo_order);
+ g_list_foreach(event_list, (GFunc)todo_process, cal->mEvent_vbox);
+ }
+ show_mainbox_info((todo_list != NULL), (event_list != NULL));
+ g_list_free(todo_list);
+ todo_list = NULL;
+ g_list_free(event_list);
+ event_list = NULL;
+ } else {
+ show_mainbox_info(FALSE, FALSE);
}
}
+void build_mainbox_info (void)
+{
+ struct tm *t;
+ t = orage_localtime();
+ build_mainbox_info_for_date(t);
+}
+
void build_mainWin()
{
#undef P_N
@@ -570,10 +713,8 @@
gtk_widget_show(cal->mCalendar);
/* Build the Info box */
- create_mainbox_info();
- /*
- gtk_widget_show_all(cal->mInfo_scrolledWin);
- */
+ create_mainbox_info(TRUE);
+ show_mainbox_info(FALSE, FALSE);
/* Signals */
@@ -581,6 +722,10 @@
, G_CALLBACK(mCalendar_day_selected_double_click_cb)
, (gpointer) cal);
+ g_signal_connect((gpointer) cal->mCalendar, "day_selected"
+ , G_CALLBACK(mCalendar_day_selected_cb)
+ , (gpointer) cal);
+
g_signal_connect((gpointer) cal->mCalendar, "month-changed"
, G_CALLBACK(mCalendar_month_changed_cb), (gpointer) cal);