Index: src/mainbox.h
===================================================================
--- src/mainbox.h (revision 26654)
+++ 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;
Index: src/mainbox.c
===================================================================
--- src/mainbox.c (revision 26654)
+++ 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,29 @@
create_el_win(NULL);
}
+static void mCalendar_day_selected_cb(GtkCalendar *calendar
+ , gpointer user_data)
+{
+#undef P_N
+#define P_N "mCalendar_day_selected_cb: "
+ struct tm t;
+
+#ifdef ORAGE_DEBUG
+ orage_message(-100, P_N);
+#endif
+ gtk_calendar_get_date(calendar,
+ &(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 gboolean upd_calendar(GtkCalendar *calendar)
{
#undef P_N
@@ -349,7 +374,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 +384,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 +406,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 +459,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,34 +482,109 @@
#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';
@@ -504,20 +607,53 @@
/* 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);
+
+ 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);
}
- else {
- gtk_widget_hide_all(cal->mInfo_scrolledWin);
+ /* caller takes care of this
+ xfical_file_close(TRUE);
+ */
+
+ 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 +706,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 +715,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);