Author: juha
Date: 2007-11-04 23:14:51 +0000 (Sun, 04 Nov 2007)
New Revision: 26258

Modified:
   xfcalendar/trunk/src/day-view.c
   xfcalendar/trunk/src/ical-code.c
   xfcalendar/trunk/src/mainbox.c
   xfcalendar/trunk/src/mainbox.h
Log:
Part I of Bug 3601:
Added TODO window into mainbox and made it to refreshed.


Modified: xfcalendar/trunk/src/day-view.c
===================================================================
--- xfcalendar/trunk/src/day-view.c     2007-11-04 13:52:54 UTC (rev 26257)
+++ xfcalendar/trunk/src/day-view.c     2007-11-04 23:14:51 UTC (rev 26258)
@@ -513,22 +513,19 @@
     dw->bg1.red +=  (dw->bg1.red < 64000 ? 1000 : -1000);
     dw->bg1.green += (dw->bg1.green < 64000 ? 1000 : -1000);
     dw->bg1.blue += (dw->bg1.blue < 64000 ? 1000 : -1000);
-    dw->bg1.pixel = (gulong)(dw->bg1.red*65536+dw->bg1.green*256+dw->bg1.blue);
     gdk_colormap_alloc_color(pic1_cmap, &dw->bg1, FALSE, TRUE);
 
     dw->bg2 = def_style->bg[GTK_STATE_NORMAL];
     dw->bg2.red +=  (dw->bg2.red > 1000 ? -1000 : 1000);
     dw->bg2.green += (dw->bg2.green > 1000 ? -1000 : 1000);
     dw->bg2.blue += (dw->bg2.blue > 2000 ? -2000 : 2000);
-    dw->bg2.pixel = (gulong)(dw->bg2.red*65536+dw->bg2.green*256+dw->bg2.blue);
     gdk_colormap_alloc_color(pic1_cmap, &dw->bg2, FALSE, TRUE);
 
-    dw->line_color = def_style->bg[GTK_STATE_NORMAL];
-    dw->line_color.red =  239 * (65535/255);
-    dw->line_color.green = 235 * (65535/255);
-    dw->line_color.blue = 230 * (65535/255);
-    dw->line_color.pixel = (gulong)(dw->line_color.red*65536 
-            + dw->line_color.green*256 + dw->line_color.blue);
+    if (!gdk_color_parse("white", &dw->line_color)) {
+        dw->line_color.red =  239 * (65535/255);
+        dw->line_color.green = 235 * (65535/255);
+        dw->line_color.blue = 230 * (65535/255);
+    }
     gdk_colormap_alloc_color(pic1_cmap, &dw->line_color, FALSE, TRUE);
 }
 
@@ -546,15 +543,19 @@
     GdkColormap *pic1_cmap;
 
     pic1_cmap = gdk_colormap_get_system();
-    fg.red = 255 * (65535/255);
-    fg.green = 10 * (65535/255);
-    fg.blue = 10 * (65535/255);
-    fg.pixel = (gulong)(fg.red*65536 + fg.green*256 +fg.blue);
+    if (!gdk_color_parse("red", &fg)) {
+        g_warning("color parse failed: red\n");
+        fg.red = 255 * (65535/255);
+        fg.green = 10 * (65535/255);
+        fg.blue = 10 * (65535/255);
+    }
     gdk_colormap_alloc_color(pic1_cmap, &fg, FALSE, TRUE);
-    bg.red = 255 * (65535/255);
-    bg.green = 215 * (65535/255);
-    bg.blue = 115 * (65535/255);
-    bg.pixel = (gulong)(bg.red*65536 + bg.green*256 +bg.blue);
+    if (!gdk_color_parse("gold", &bg)) {
+        g_warning("color parse failed: gold\n");
+        bg.red = 255 * (65535/255);
+        bg.green = 215 * (65535/255);
+        bg.blue = 115 * (65535/255);
+    }
     gdk_colormap_alloc_color(pic1_cmap, &bg, FALSE, TRUE);
 
     days = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dw->day_spin));

Modified: xfcalendar/trunk/src/ical-code.c
===================================================================
--- xfcalendar/trunk/src/ical-code.c    2007-11-04 13:52:54 UTC (rev 26257)
+++ xfcalendar/trunk/src/ical-code.c    2007-11-04 23:14:51 UTC (rev 26258)
@@ -3006,6 +3006,7 @@
                 , file_type);
     }
     setup_orage_alarm_clock();
+    build_mainbox_info();
 }
 
 void xfical_alarm_build_list(gboolean first_list_today)
@@ -3046,7 +3047,7 @@
     icalproperty *p = NULL;
     static icalcompiter ci;
     gboolean date_found=FALSE;
-    gboolean date_rec_found=FALSE;
+    gboolean recurrent_date_found=FALSE;
     char *uid;
     xfical_appt *appt;
     struct icalrecurrencetype rrule;
@@ -3107,7 +3108,20 @@
                 , ICAL_RRULE_PROPERTY)) != 0) { /* check recurring */
             nsdate = icaltime_null_time();
             rrule = icalproperty_get_rrule(p);
-            ri = icalrecur_iterator_new(rrule, per.stime);
+            /* FIXME:
+             * for soem VTODOs you do not want to start over regularly
+             * from the starttime, but actually from the latest completed
+             * time. This kind of VTODOs do not have startdate! */
+            /*
+            if (type == XFICAL_TYPE_TODO) {
+                if (!icaltime_is_null_time(per.ctime))
+                    ri = icalrecur_iterator_new(rrule, per.ctime);
+                else
+                    ri = icalrecur_iterator_new(rrule, per.stime);
+            }
+            else
+            */
+                ri = icalrecur_iterator_new(rrule, per.stime);
             for (nsdate = icalrecur_iterator_next(ri),
                     nedate = icaltime_add(nsdate, per.duration);
                  !icaltime_is_null_time(nsdate)
@@ -3132,13 +3146,13 @@
             if (type == XFICAL_TYPE_TODO) {
                 if (!icaltime_is_null_time(nsdate)) {
                     date_found = TRUE;
-                    date_rec_found = TRUE;
+                    recurrent_date_found = TRUE;
                 }
             }
             else if (local_compare_date_only(nsdate, aedate) <= 0
                 && local_compare_date_only(asdate, nedate) <= 0) {
                 date_found = TRUE;
-                date_rec_found = TRUE;
+                recurrent_date_found = TRUE;
             }
         }
     }
@@ -3148,7 +3162,7 @@
             return(0);
         }
         appt = appt_get_any(uid, base, file_type);
-        if (date_rec_found) {
+        if (recurrent_date_found) {
             g_strlcpy(appt->starttimecur, icaltime_as_ical_string(nsdate), 17);
             g_strlcpy(appt->endtimecur, icaltime_as_ical_string(nedate), 17);
         }

Modified: xfcalendar/trunk/src/mainbox.c
===================================================================
--- xfcalendar/trunk/src/mainbox.c      2007-11-04 13:52:54 UTC (rev 26257)
+++ xfcalendar/trunk/src/mainbox.c      2007-11-04 23:14:51 UTC (rev 26258)
@@ -49,8 +49,7 @@
 #include "tray_icon.h"
 
 
-gboolean
-orage_mark_appointments()
+gboolean orage_mark_appointments()
 {
     guint year, month, day;
 
@@ -64,8 +63,7 @@
     return(TRUE);
 }
 
-static void
-mFile_newApp_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mFile_newApp_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
     appt_win *app;
     struct tm *t;
@@ -77,58 +75,55 @@
     app = create_appt_win("NEW", cur_date, NULL);  
 }
 
-static void
-mFile_interface_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mFile_interface_activate_cb(GtkMenuItem *menuitem
+        , gpointer user_data)
 {
     CalWin *cal = (CalWin *)user_data;
 
     orage_external_interface(cal);
 }
 
-static void
-mFile_close_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mFile_close_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
     CalWin *cal = (CalWin *)user_data;
 
     gtk_widget_hide(cal->mWindow);
 }
 
-static void
-mFile_quit_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mFile_quit_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
     gtk_main_quit();
 }
 
-static void 
-mEdit_preferences_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mEdit_preferences_activate_cb(GtkMenuItem *menuitem
+        , gpointer user_data)
 {
     show_parameters();
 }
 
-static void
-mView_ViewSelectedDate_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mView_ViewSelectedDate_activate_cb(GtkMenuItem *menuitem
+        , gpointer user_data)
 {
     create_el_win(NULL);
 }
 
-static void
-mView_ViewSelectedWeek_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mView_ViewSelectedWeek_activate_cb(GtkMenuItem *menuitem
+        , gpointer user_data)
 {
     CalWin *cal = (CalWin *)user_data;
 
     create_day_win(orage_cal_to_i18_date(GTK_CALENDAR(cal->mCalendar)));
 }
 
-static void
-mView_selectToday_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mView_selectToday_activate_cb(GtkMenuItem *menuitem
+        , gpointer user_data)
 {
     CalWin *cal = (CalWin *)user_data;
 
     orage_select_today(GTK_CALENDAR(cal->mCalendar));
 }
 
-static void
-mHelp_help_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mHelp_help_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
     gchar *helpdoc;
 
@@ -144,14 +139,13 @@
     */
 }
 
-static void
-mHelp_about_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void mHelp_about_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
     create_wAbout((GtkWidget *)menuitem, user_data);
 }
 
-static void
-mCalendar_scroll_event_cb(GtkWidget *calendar, GdkEventScroll *event)
+static void mCalendar_scroll_event_cb(GtkWidget *calendar
+        , GdkEventScroll *event)
 {
     guint year, month, day;
     gtk_calendar_get_date(GTK_CALENDAR(calendar), &year, &month, &day);
@@ -176,17 +170,16 @@
     }
 }
 
-static void
-mCalendar_day_selected_double_click_cb(GtkCalendar *cdar, gpointer user_data)
+static void mCalendar_day_selected_double_click_cb(GtkCalendar *calendar
+        , gpointer user_data)
 {
     if (g_par.show_days)
-        create_day_win(orage_cal_to_i18_date(cdar));
+        create_day_win(orage_cal_to_i18_date(calendar));
     else
         create_el_win(NULL);
 }
 
-static gboolean
-upd_calendar(GtkCalendar *calendar)
+static gboolean upd_calendar(GtkCalendar *calendar)
 {
     static guint year=-1, month=-1;
     guint year_n, month_n, day_n;
@@ -203,8 +196,7 @@
     return(FALSE); /* we do this only once */
 }
 
-void
-mCalendar_month_changed_cb(GtkCalendar *calendar, gpointer user_data)
+void mCalendar_month_changed_cb(GtkCalendar *calendar, gpointer user_data)
 {
     /* orage_mark_appointments is rather heavy (=slow), so doing
      * it here is not a good idea. We can't keep up with the autorepeat
@@ -295,6 +287,92 @@
             , G_CALLBACK(mHelp_about_activate_cb),(gpointer) cal);
 }
 
+static void todo_clicked(GtkWidget *widget
+        , GdkEventButton *event, gpointer *user_data)
+{
+    gchar *uid;
+
+    uid = g_object_get_data(G_OBJECT(widget), "UID");
+    create_appt_win("UPDATE", uid, NULL);
+}
+
+static void add_info_row(xfical_appt *appt)
+{
+    GtkWidget *ev, *label;
+    CalWin *cal = g_par.xfcal;
+    gchar *tip;
+
+    ev = gtk_event_box_new();
+    label = gtk_label_new(appt->title);
+    gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
+    gtk_container_add(GTK_CONTAINER(ev), label);
+    gtk_box_pack_start(GTK_BOX(cal->mInfo_vbox), ev, FALSE, FALSE, 0);
+    tip = g_strdup_printf("%s\n%s-%s\n%s", appt->title, appt->starttimecur
+            , appt->endtimecur ,appt->note);
+    gtk_tooltips_set_tip(cal->Tooltips, ev, tip, NULL);
+    g_free(tip);
+    g_object_set_data_full(G_OBJECT(ev), "UID", g_strdup(appt->uid), g_free);
+    g_signal_connect((gpointer)ev, "button-press-event"
+            , G_CALLBACK(todo_clicked), cal);
+
+}
+
+static void info_rows(char *a_day, xfical_type ical_type, gchar *file_type)
+{
+    xfical_appt *appt;
+
+    for (appt = xfical_appt_get_next_on_day(a_day, TRUE, 0
+                , ical_type , file_type);
+         appt;
+         appt = xfical_appt_get_next_on_day(a_day, FALSE, 0
+                , ical_type , file_type)) {
+        add_info_row(appt);
+        xfical_appt_free(appt);
+    }
+}
+
+void build_mainbox_info(void)
+{
+    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;
+
+
+    gtk_widget_destroy(cal->mInfo_scrolledWin);
+    cal->mInfo_scrolledWin = gtk_scrolled_window_new(NULL, NULL);
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cal->mInfo_scrolledWin)
+            , GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+    gtk_box_pack_start(GTK_BOX(cal->mVbox), cal->mInfo_scrolledWin
+            , FALSE, FALSE, 0);
+    cal->mInfo_vbox = gtk_vbox_new(FALSE, 0);
+    gtk_scrolled_window_add_with_viewport(
+            GTK_SCROLLED_WINDOW(cal->mInfo_scrolledWin), cal->mInfo_vbox);
+
+    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 */
+    if (!xfical_file_open(TRUE))
+        return;
+    strcpy(file_type, "O00.");
+    info_rows(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);
+        info_rows(a_day, ical_type, file_type);
+    }
+    xfical_file_close(TRUE);
+
+    gtk_widget_show_all(cal->mInfo_scrolledWin);
+}
+
 void build_mainWin()
 {
     GdkPixbuf *orage_logo;
@@ -304,9 +382,8 @@
      * when date changes. Could be added, but not worth it.
      * Dynamic icon is used in systray and about windows */
     orage_logo = orage_create_icon(cal, TRUE, 48, 48); 
-    /* orage_logo = xfce_themed_icon_load("xfcalendar", 48); */
-    /* orage_logo = create_icon(cal, 48, 48); */
     cal->mAccel_group = gtk_accel_group_new();
+    cal->Tooltips = gtk_tooltips_new();
 
     gtk_window_set_title(GTK_WINDOW(cal->mWindow), _("Orage"));
     gtk_window_set_position(GTK_WINDOW(cal->mWindow), GTK_WIN_POS_NONE);
@@ -335,6 +412,11 @@
             | GTK_CALENDAR_SHOW_WEEK_NUMBERS);
     gtk_widget_show(cal->mCalendar);
 
+    /* Build the Info box */
+    /* build_mainbox_info always deletes scrolled window, so we create one 
here */
+    cal->mInfo_scrolledWin = gtk_scrolled_window_new(NULL, NULL);
+    build_mainbox_info();
+
     /* Signals */
     g_signal_connect((gpointer) cal->mCalendar, "scroll_event"
             , G_CALLBACK(mCalendar_scroll_event_cb), NULL);

Modified: xfcalendar/trunk/src/mainbox.h
===================================================================
--- xfcalendar/trunk/src/mainbox.h      2007-11-04 13:52:54 UTC (rev 26257)
+++ xfcalendar/trunk/src/mainbox.h      2007-11-04 23:14:51 UTC (rev 26258)
@@ -26,8 +26,12 @@
 
 typedef struct _CalWin
 {
+    GtkAccelGroup *mAccel_group;
+    GtkTooltips   *Tooltips;
+
     GtkWidget *mWindow;
     GtkWidget *mVbox;
+
     GtkWidget *mMenubar;
     GtkWidget *mFile_menu;
     GtkWidget *mFile_newApp;
@@ -43,12 +47,15 @@
     GtkWidget *mHelp_menu;
     GtkWidget *mHelp_help;
     GtkWidget *mHelp_about;
+
     GtkWidget *mCalendar;
-    GtkAccelGroup *mAccel_group;
 
+    GtkWidget *mInfo_scrolledWin;
+    GtkWidget *mInfo_vbox;
 } CalWin;
 
 void build_mainWin();
 gboolean orage_mark_appointments();
+void build_mainbox_info();
 
 #endif /* !__MAINBOX_H__ */

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to