Author: juha
Date: 2007-10-08 19:24:38 +0000 (Mon, 08 Oct 2007)
New Revision: 26128

Modified:
   xfcalendar/trunk/configure.in.in
   xfcalendar/trunk/src/appointment.c
   xfcalendar/trunk/src/day-view.c
   xfcalendar/trunk/src/day-view.h
   xfcalendar/trunk/src/event-list.c
   xfcalendar/trunk/src/functions.c
   xfcalendar/trunk/src/functions.h
   xfcalendar/trunk/src/mainbox.c
   xfcalendar/trunk/src/mainbox.h
   xfcalendar/trunk/src/parameters.c
   xfcalendar/trunk/src/parameters.h
Log:
4.5.10.1: day view
and some common codes moved to common functions


Modified: xfcalendar/trunk/configure.in.in
===================================================================
--- xfcalendar/trunk/configure.in.in    2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/configure.in.in    2007-10-08 19:24:38 UTC (rev 26128)
@@ -9,7 +9,7 @@
 dnl
 
 dnl Version information
-m4_define([orage_version], [4.5.9.7-svn])
+m4_define([orage_version], [4.5.10.1-svn])
 
 m4_define([gtk_minimum_version], [2.6.0])
 m4_define([xfce_minimum_version], [4.4.0])

Modified: xfcalendar/trunk/src/appointment.c
===================================================================
--- xfcalendar/trunk/src/appointment.c  2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/appointment.c  2007-10-08 19:24:38 UTC (rev 26128)
@@ -564,8 +564,11 @@
     if (gtk_text_iter_forward_search(&start, "<D>"
                 , GTK_TEXT_SEARCH_TEXT_ONLY
                 , &match_start, &match_end, &end)) { /* found it */
+        /*
         tm = orage_localtime();
         cdate = orage_tm_date_to_i18_date(tm);
+            */
+        cdate = orage_localdate_i18();
         gtk_text_buffer_delete(tb, &match_start, &match_end);
         gtk_text_buffer_insert(tb, &match_start, cdate, -1);
     }
@@ -1194,8 +1197,7 @@
     revert_xfical_to_last_saved((appt_win *)user_data);
 }
 
-static void on_Date_button_clicked_cb(GtkWidget *button
-        , gpointer *user_data)
+static void on_Date_button_clicked_cb(GtkWidget *button, gpointer *user_data)
 {
     appt_win *apptw = (appt_win *)user_data;
 
@@ -1596,8 +1598,11 @@
                     GTK_TOGGLE_BUTTON(apptw->Recur_limit_rb), TRUE);
             gtk_spin_button_set_value(
                     GTK_SPIN_BUTTON(apptw->Recur_count_spin), (gdouble)1);
+            /*
             t = orage_localtime();
             untildate_to_display = orage_tm_date_to_i18_date(t);
+            */
+            untildate_to_display = orage_localdate_i18();
             gtk_button_set_label(GTK_BUTTON(apptw->Recur_until_button)
                     , (const gchar *)untildate_to_display);
             break;
@@ -1607,8 +1612,11 @@
             gtk_spin_button_set_value(
                     GTK_SPIN_BUTTON(apptw->Recur_count_spin)
                     , (gdouble)appt->recur_count);
+            /*
             t = orage_localtime();
             untildate_to_display = orage_tm_date_to_i18_date(t);
+            */
+            untildate_to_display = orage_localdate_i18();
             gtk_button_set_label(GTK_BUTTON(apptw->Recur_until_button)
                     , (const gchar *)untildate_to_display);
             break;

Modified: xfcalendar/trunk/src/day-view.c
===================================================================
--- xfcalendar/trunk/src/day-view.c     2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/day-view.c     2007-10-08 19:24:38 UTC (rev 26128)
@@ -172,9 +172,8 @@
 {
     day_win *dw = (day_win *)user_data;
 
-    if (orage_date_button_clicked(button, dw->Window)) {
+    if (orage_date_button_clicked(button, dw->Window))
         refresh_day_view_table(dw);
-    }
 }
 
 static void header_button_clicked_cb(GtkWidget *button, gpointer *user_data)
@@ -186,6 +185,17 @@
     create_el_win(start_date);
 }
 
+static void on_button_press_event_cb(GtkWidget *widget
+        , GdkEventButton *event, gpointer *user_data)
+{
+    day_win *dw = (day_win *)user_data;
+    gchar *uid;
+
+    g_print("pressed button %d\n", event->button);
+    uid = g_object_get_data(G_OBJECT(widget), "UID");
+    create_appt_win("UPDATE", uid, NULL);
+}
+
 static void event_button_clicked_cb(GtkWidget *button, gpointer *user_data)
 {
     day_win *dw = (day_win *)user_data;
@@ -195,15 +205,13 @@
     create_appt_win("UPDATE", uid, NULL);
 }
 
-static void add_row(day_win *dw, xfical_appt *appt, char *a_day
-        , GtkWidget *element[24][40], GtkWidget *line[24][40], GdkColor *bg
-        , gint days)
+static void add_row(day_win *dw, xfical_appt *appt, char *a_day, gint days)
 {
-    gint row, start_row, end_row, length;
-    gint col, len, start_col, end_col, first_col, last_col;
+    gint row, start_row, end_row;
+    gint col, start_col, end_col, first_col, last_col;
     gint height, start_height, end_height;
     gchar *text, *tip, *uid, *start_date, *end_date;
-    GtkWidget *ev, *lab, *name, *hb;
+    GtkWidget *ev, *lab, *hb;
     struct tm tm_start, tm_end, tm_first;
     GDate *g_start, *g_end, *g_first;
 
@@ -225,23 +233,44 @@
     else 
         row = tm_start.tm_hour;
 
-    len = strlen(gtk_button_get_label(GTK_BUTTON(dw->StartDate_button)));
-    text = g_strndup(appt->title ? appt->title : _("Unknown"), len);
-    if (element[row][col] == NULL) {
-        hb = gtk_hbox_new(FALSE, 0);
-    }
-    else {
-        hb = element[row][col];
-    }
+    text = g_strdup(appt->title ? appt->title : _("Unknown"));
     ev = gtk_event_box_new();
     lab = gtk_label_new(text);
     gtk_container_add(GTK_CONTAINER(ev), lab);
-    name = gtk_button_new();
-    gtk_button_set_relief(GTK_BUTTON(name), GTK_RELIEF_NONE);
+
+    if (appt->starttimecur[8] != 'T') {
+        gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &dw->bg2);
+        if (dw->header[col] == NULL)
+            hb = gtk_hbox_new(TRUE, 0);
+        else
+            hb = dw->header[col];
+        tip = g_strdup_printf("%s\n%s - %s\n%s"
+                , appt->title
+                , appt->starttimecur
+                , appt->endtimecur
+                , appt->note);
+        gtk_tooltips_set_tip(dw->Tooltips, ev, tip, NULL);
+        gtk_box_pack_start(GTK_BOX(hb), ev, TRUE, TRUE, 0);
+        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(on_button_press_event_cb), dw);
+        dw->header[col] = hb;
+        g_free(tip);
+        g_free(text);
+        g_date_free(g_start);
+        g_date_free(g_end);
+        g_date_free(g_first);
+        return;
+    }
+
+    if (dw->element[row][col] == NULL)
+        hb = gtk_hbox_new(TRUE, 0);
+    else
+        hb = dw->element[row][col];
     if ((row % 2) == 1)
-        gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, bg);
-    length = g_date_days_between(g_start, g_end);
-    if (length == 0)
+        gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &dw->bg1);
+    if (g_date_days_between(g_start, g_end) == 0)
         tip = g_strdup_printf("%s\n%02d:%02d-%02d:%02d\n%s"
                 , appt->title
                 , tm_start.tm_hour, tm_start.tm_min
@@ -263,19 +292,18 @@
         g_free(start_date);
         g_free(end_date);
     }
-    gtk_tooltips_set_tip(dw->Tooltips, name, tip, NULL);
-    gtk_container_add(GTK_CONTAINER(name), ev);
-    /*
-    gtk_widget_set_size_request(name, dw->StartDate_button_req.width, -1);
-    */
-    gtk_box_pack_start(GTK_BOX(hb), name, TRUE, TRUE, 0);
-    g_object_set_data_full(G_OBJECT(name), "UID", g_strdup(appt->uid), g_free);
-    g_signal_connect((gpointer)name, "clicked"
-            , G_CALLBACK(event_button_clicked_cb), dw);
-    element[row][col] = hb;
+    gtk_tooltips_set_tip(dw->Tooltips, ev, tip, NULL);
+    gtk_box_pack_start(GTK_BOX(hb), ev, TRUE, TRUE, 0);
+    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(on_button_press_event_cb), dw);
+    dw->element[row][col] = hb;
     g_free(tip);
     g_free(text);
     height = dw->StartDate_button_req.height;
+    /*
+     * same_date = !strncmp(start_ical_time, end_ical_time, 8);
+     * */
     start_col = g_date_days_between(g_first, g_start)+1;
     if (start_col < 1)
         first_col = 1;
@@ -286,9 +314,6 @@
         last_col = days;
     else
         last_col = end_col;
-    g_date_free(g_start);
-    g_date_free(g_end);
-    g_date_free(g_first);
     for (col = first_col; col <= last_col; col++) {
         if (col == start_col)
             start_row = tm_start.tm_hour;
@@ -307,34 +332,37 @@
                 end_height = tm_end.tm_min*height/60;
             else
                 end_height = height;
-            line[row][col] = build_line(1, start_height
-                    , 2, end_height-start_height, line[row][col]);
+            dw->line[row][col] = build_line(1, start_height
+                    , 2, end_height-start_height, dw->line[row][col]);
         }
     }
+    g_date_free(g_start);
+    g_date_free(g_end);
+    g_date_free(g_first);
 }
 
-static void app_rows(day_win *dw, char *a_day, GtkWidget *element[24][40]
-        , GtkWidget *line[24][40], xfical_type ical_type, gchar *file_type
-        , GdkColor *bg)
+static void app_rows(day_win *dw, char *a_day , xfical_type ical_type
+        , gchar *file_type)
 {
     xfical_appt *appt;
     int days = 1;
 
     program_log("\tapp_rows start");
-    days = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dw->day_spin)) - 1;
-    for (appt = xfical_appt_get_next_on_day(a_day, TRUE, days
+    days = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dw->day_spin));
+    /* xfical_appt_get_next_on_day uses extra days so to show 7 days we need
+     * to pass days=6, which means 6 days in addition to the one */
+    for (appt = xfical_appt_get_next_on_day(a_day, TRUE, days-1
                 , ical_type , file_type);
          appt;
-         appt = xfical_appt_get_next_on_day(a_day, FALSE, days
+         appt = xfical_appt_get_next_on_day(a_day, FALSE, days-1
                 , ical_type , file_type)) {
-        add_row(dw, appt, a_day, element, line, bg, days);
+        add_row(dw, appt, a_day, days);
         xfical_appt_free(appt);
     }
     program_log("\tapp_rows end");
 }
 
-static void app_data(day_win *dw, GtkWidget *element[24][40]
-        , GtkWidget *line[24][40], GdkColor *bg)
+static void app_data(day_win *dw)
 {
     xfical_type ical_type;
     gchar file_type[8];
@@ -351,10 +379,10 @@
         return;
     program_log("\tapp_data after open");
     strcpy(file_type, "O00.");
-    app_rows(dw, a_day, element, line, ical_type, file_type, bg);
+    app_rows(dw, a_day, ical_type, file_type);
     /* then process all foreign files */
     for (i = 0; i < g_par.foreign_count; i++) {
-        app_rows(dw, a_day, element, line, ical_type, file_type, bg);
+        app_rows(dw, a_day, ical_type, file_type);
     }
     xfical_file_close(TRUE);
 }
@@ -362,57 +390,65 @@
 
 static void fill_days(day_win *dw, gint days)
 {
-    gint i, j, height, width;
+    gint row, col, height, width;
     GtkWidget *name, *ev, *hb;
-    GdkColor bg;
-    GtkStyle *def_style;
-    GtkWidget *element[24][40];
-    GtkWidget *line[24][40];
+    GtkWidget *marker;
 
     program_log("fill_days started");
-    def_style = gtk_widget_get_default_style();
-    bg = def_style->bg[GTK_STATE_NORMAL];
-    bg.red +=  (bg.red < 64000 ? 1000 : -1000);
-    bg.green += (bg.green < 64000 ? 1000 : -1000);
-    bg.blue += (bg.blue < 64000 ? 1000 : -1000);
     height = dw->StartDate_button_req.height;
     width = dw->StartDate_button_req.width;
 
-    for (i = 0; i < 24; i++)
-    {
-        for (j = 1; j <  days+1; j++) {
-            element[i][j] = NULL;
+    for (col = 1; col <  days+1; col++) {
+        dw->header[col] = NULL;
+        for (row = 0; row < 24; row++) {
+            dw->element[row][col] = NULL;
     /* gdk_draw_rectangle(, , , left_x, top_y, width, height); */
-            line[i][j] = build_line(0, 0, 3, height, NULL);
+            dw->line[row][col] = build_line(0, 0, 3, height, NULL);
         }
     }
     program_log("fill_days init done");
     /* FIXME: the next line is heavy. it takes almost 100 % of time */
-    app_data(dw, element, line, &bg);
+    app_data(dw);
     program_log("fill_days data done");
-    for (i = 0; i < 24; i++)
-    {
-        for (j = 1; j <  days+1; j++) {
+    for (col = 1; col < days+1; col++) {
+        hb = gtk_hbox_new(FALSE, 0);
+        marker = build_line(0, 0, 2, height, NULL);
+        gtk_box_pack_start(GTK_BOX(hb), marker, FALSE, FALSE, 0);
+        if (dw->header[col]) {
+            gtk_box_pack_start(GTK_BOX(hb), dw->header[col], TRUE, TRUE, 0);
+            gtk_widget_set_size_request(hb, width, -1);
+        }
+        else {
+            ev = gtk_event_box_new();
+            gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &dw->bg2);
+            gtk_box_pack_start(GTK_BOX(hb), ev, TRUE, TRUE, 0);
+        }
+        gtk_table_attach(GTK_TABLE(dw->dtable_h), hb, col, col+1, 1, 2
+                 , (GTK_FILL), (0), 0, 0);
+        for (row = 0; row < 24; row++) {
             hb = gtk_hbox_new(FALSE, 0);
-            if (i == 0) {
+            if (row == 0)
                 gtk_widget_set_size_request(hb, width, -1);
-            }
-            if (element[i][j]) {
-                gtk_box_pack_start(GTK_BOX(hb), line[i][j], FALSE, FALSE, 0);
-                gtk_box_pack_start(GTK_BOX(hb), element[i][j], TRUE, TRUE, 0);
+            if (dw->element[row][col]) {
+                gtk_box_pack_start(GTK_BOX(hb), dw->line[row][col]
+                        , FALSE, FALSE, 0);
+                gtk_box_pack_start(GTK_BOX(hb), dw->element[row][col]
+                        , TRUE, TRUE, 0);
                 gtk_widget_set_size_request(hb, width, -1);
             }
             else {
                 ev = gtk_event_box_new();
+                /*
                 name = gtk_label_new(" ");
                 gtk_container_add(GTK_CONTAINER(ev), name);
-                if ((i % 2) == 1) {
-                    gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &bg);
-                }
-                gtk_box_pack_start(GTK_BOX(hb), line[i][j], FALSE, FALSE, 0);
+                */
+                if ((row % 2) == 1)
+                    gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &dw->bg1);
+                gtk_box_pack_start(GTK_BOX(hb), dw->line[row][col]
+                        , FALSE, FALSE, 0);
                 gtk_box_pack_start(GTK_BOX(hb), ev, TRUE, TRUE, 0);
             }
-            gtk_table_attach(GTK_TABLE(dw->dtable), hb, j, j+1, i, i+1
+            gtk_table_attach(GTK_TABLE(dw->dtable), hb, col, col+1, row, row+1
                      , (GTK_FILL), (0), 0, 0);
         }
     }
@@ -443,7 +479,7 @@
     gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10);
 
     /* show days spin = how many days to show */
-    dw->day_spin = gtk_spin_button_new_with_range(1, 40, 1);
+    dw->day_spin = gtk_spin_button_new_with_range(1, MAX_DAYS, 1);
     gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(dw->day_spin), TRUE);
     gtk_widget_set_size_request(dw->day_spin, 40, -1);
     gtk_box_pack_start(GTK_BOX(hbox), dw->day_spin, FALSE, FALSE, 0);
@@ -470,12 +506,31 @@
             , G_CALLBACK(on_Date_button_clicked_cb), dw);
 }
 
+static void build_day_view_bgs(day_win *dw)
+{
+    GtkStyle *def_style;
+    GdkColormap *pic1_cmap;
+
+    def_style = gtk_widget_get_default_style();
+    pic1_cmap = gdk_colormap_get_system();
+    dw->bg1 = def_style->bg[GTK_STATE_NORMAL];
+    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);
+    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 > 1000 ? -1000 : 1000);
+    gdk_colormap_alloc_color(pic1_cmap, &dw->bg1, FALSE, TRUE);
+}
+
 static void build_day_view_table(day_win *dw)
 {
     gint days;   /* number of days to show */
     int year, month, day;
     gint i, j, sunday;
-    GtkWidget *name, *label;
+    GtkWidget *name, *label, *ev;
     char text[5+1], *date;
     struct tm tm_date;
     guint monthdays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
@@ -509,7 +564,7 @@
     /*
     gtk_container_add(GTK_CONTAINER(dw->scroll_win_h), dw->day_view_vbox);
     */
-    dw->dtable_h = gtk_table_new(1, days+2, FALSE);
+    dw->dtable_h = gtk_table_new(2, days+2, FALSE);
     gtk_box_pack_start(GTK_BOX(dw->day_view_vbox), dw->dtable_h
             , FALSE, FALSE, 0);
     year = tm_date.tm_year + 1900;
@@ -567,15 +622,24 @@
 
     /* hours column = hour rows */
     for (i = 0; i < 24; i++) {
+        ev = gtk_event_box_new();
         g_sprintf(text, "%02d", i);
         name = gtk_label_new(text);
-        gtk_widget_set_size_request(name, dw->hour_req.width
+        gtk_container_add(GTK_CONTAINER(ev), name);
+        if ((i % 2) == 1)
+            gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &dw->bg1);
+        gtk_widget_set_size_request(ev, dw->hour_req.width
                 , dw->StartDate_button_req.height);
-        gtk_table_attach(GTK_TABLE(dw->dtable), name, 0, 1, i, i+1
+        gtk_table_attach(GTK_TABLE(dw->dtable), ev, 0, 1, i, i+1
              , (GTK_FILL), (0), 0, 0);
+        ev = gtk_event_box_new();
         name = gtk_label_new(text);
-        gtk_widget_set_size_request(name, dw->hour_req.width, -1);
-        gtk_table_attach(GTK_TABLE(dw->dtable), name, days+1, days+2, i, i+1
+        gtk_container_add(GTK_CONTAINER(ev), name);
+        if ((i % 2) == 1)
+            gtk_widget_modify_bg(ev, GTK_STATE_NORMAL, &dw->bg1);
+        gtk_widget_set_size_request(ev, dw->hour_req.width
+                , dw->StartDate_button_req.height);
+        gtk_table_attach(GTK_TABLE(dw->dtable), ev, days+1, days+2, i, i+1
              , (GTK_FILL), (0), 0, 0);
     }
     fill_days(dw, days);
@@ -585,7 +649,7 @@
 {
     GtkAdjustment *v_adj;
     
-    /* let's try to start rougly from line 8 = 8 o'clock */
+    /* let's try to start roughly from line 8 = 8 o'clock */
     v_adj = gtk_scrolled_window_get_vadjustment(
             GTK_SCROLLED_WINDOW(dw->scroll_win));
     gtk_adjustment_set_value(v_adj, v_adj->upper/3);
@@ -612,7 +676,6 @@
     dw->Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
     gtk_window_set_default_size(GTK_WINDOW(dw->Window), 690, 390);
     gtk_window_set_title(GTK_WINDOW(dw->Window), _("Orage - day view"));
-
     gtk_window_add_accel_group(GTK_WINDOW(dw->Window), dw->accel_group);
 
     dw->Vbox = gtk_vbox_new(FALSE, 0);
@@ -623,6 +686,7 @@
     build_menu(dw);
     build_toolbar(dw);
     program_log("create_day_win toolbar done");
+    build_day_view_bgs(dw);
     build_day_view_header(dw, start_date);
     program_log("create_day_win header done");
     build_day_view_table(dw);

Modified: xfcalendar/trunk/src/day-view.h
===================================================================
--- xfcalendar/trunk/src/day-view.h     2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/day-view.h     2007-10-08 19:24:38 UTC (rev 26128)
@@ -24,6 +24,8 @@
 #ifndef __DAY_VIEW_H__
 #define __DAY_VIEW_H__
 
+#define MAX_DAYS 40
+
 typedef struct _day_win
 {
     GtkAccelGroup *accel_group;
@@ -49,6 +51,12 @@
     GtkWidget *scroll_win;
     GtkWidget *dtable;   /* day table */
     GtkRequisition hour_req;
+
+    GtkWidget *header[MAX_DAYS];
+    GtkWidget *element[24][MAX_DAYS];
+    GtkWidget *line[24][MAX_DAYS];
+
+    GdkColor bg1, bg2;
 } day_win;
 
 day_win *create_day_win(char *start_date);

Modified: xfcalendar/trunk/src/event-list.c
===================================================================
--- xfcalendar/trunk/src/event-list.c   2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/event-list.c   2007-10-08 19:24:38 UTC (rev 26128)
@@ -643,14 +643,8 @@
 static void set_el_data_from_cal(el_win *el)
 {
     char *title;
-    struct tm tm_date = {0,0,0,0,0,0,0,0,0};
 
-    gtk_calendar_get_date(GTK_CALENDAR(g_par.xfcal->mCalendar)
-            , (unsigned int *)&tm_date.tm_year
-            , (unsigned int *)&tm_date.tm_mon
-            , (unsigned int *)&tm_date.tm_mday);
-    tm_date.tm_year -= 1900;
-    title = orage_tm_date_to_i18_date(&tm_date);
+    title = orage_cal_to_i18_date(GTK_CALENDAR(g_par.xfcal->mCalendar));
     set_el_data(el, title);
 }
 
@@ -917,57 +911,12 @@
     delete_appointment((el_win *)user_data);
 }
 
-static void on_journal_start_button_clicked(GtkButton *button
+static void on_journal_start_button_clicked(GtkWidget *button
         , gpointer *user_data)
 {
     el_win *el = (el_win *)user_data;
-    GtkWidget *selDate_Window_dialog;
-    GtkWidget *selDate_Calendar_calendar;
-    gint result;
-    guint year, month, day;
-    char *date_to_display = NULL;
-    struct tm *t, cur_t;
-
-    selDate_Window_dialog = gtk_dialog_new_with_buttons(
-            _("Pick the date"), GTK_WINDOW(el->Window),
-            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-            _("Today"),
-            1,
-            GTK_STOCK_OK,
-            GTK_RESPONSE_ACCEPT,
-            NULL);
-
-    selDate_Calendar_calendar = gtk_calendar_new();
-    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(selDate_Window_dialog)->vbox)
-            , selDate_Calendar_calendar);
-
-    cur_t = orage_i18_date_to_tm_date(gtk_button_get_label(
-            GTK_BUTTON(button)));
-    orage_select_date(GTK_CALENDAR(selDate_Calendar_calendar)
-            , cur_t.tm_year+1900, cur_t.tm_mon, cur_t.tm_mday);
-    gtk_widget_show_all(selDate_Window_dialog);
-
-    result = gtk_dialog_run(GTK_DIALOG(selDate_Window_dialog));
-    switch(result){
-        case GTK_RESPONSE_ACCEPT:
-            gtk_calendar_get_date(GTK_CALENDAR(selDate_Calendar_calendar)
-                    , (guint *)&cur_t.tm_year, (guint *)&cur_t.tm_mon
-                    , (guint *)&cur_t.tm_mday);
-            cur_t.tm_year -= 1900;
-            date_to_display = orage_tm_date_to_i18_date(&cur_t);
-            break;
-        case 1:
-            t = orage_localtime();
-            date_to_display = orage_tm_date_to_i18_date(t);
-            break;
-        case GTK_RESPONSE_DELETE_EVENT:
-        default:
-            date_to_display = (gchar *)gtk_button_get_label(button);
-            break;
-    }
-    gtk_button_set_label(button, (const gchar *)date_to_display);
-    refresh_el_win(el);
-    gtk_widget_destroy(selDate_Window_dialog);
+    if (orage_date_button_clicked(button, el->Window))
+        refresh_el_win(el);
 }
 
 static void drag_data_get(GtkWidget *widget, GdkDragContext *context

Modified: xfcalendar/trunk/src/functions.c
===================================================================
--- xfcalendar/trunk/src/functions.c    2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/functions.c    2007-10-08 19:24:38 UTC (rev 26128)
@@ -44,14 +44,15 @@
  *  General purpose helper functions  *
  **************************************/
 
-
 gboolean orage_date_button_clicked(GtkWidget *button, GtkWidget *win)
 {
     GtkWidget *selDate_Window_dialog;
     GtkWidget *selDate_Calendar_calendar;
     gint result;
     char *date_to_display=NULL;
+    /*
     struct tm *t;
+    */
     struct tm cur_t;
     gboolean changed;
 
@@ -77,15 +78,21 @@
     result = gtk_dialog_run(GTK_DIALOG(selDate_Window_dialog));
     switch(result){
         case GTK_RESPONSE_ACCEPT:
+            /*
             gtk_calendar_get_date(GTK_CALENDAR(selDate_Calendar_calendar)
                     , (guint *)&cur_t.tm_year, (guint *)&cur_t.tm_mon
                     , (guint *)&cur_t.tm_mday);
             cur_t.tm_year -= 1900;
             date_to_display = orage_tm_date_to_i18_date(&cur_t);
+            */
+            date_to_display = orage_cal_to_i18_date(selDate_Calendar_calendar);
             break;
         case 1:
+            /*
             t = orage_localtime();
             date_to_display = orage_tm_date_to_i18_date(t);
+            */
+            date_to_display = orage_localdate_i18();
             break;
         case GTK_RESPONSE_DELETE_EVENT:
         default:
@@ -167,6 +174,18 @@
     return(i18_date);
 }
 
+char *orage_cal_to_i18_date(GtkCalendar *cal)
+{
+    struct tm tm_date = {0,0,0,0,0,0,0,0,0};
+
+    gtk_calendar_get_date(cal
+            , (unsigned int *)&tm_date.tm_year
+            , (unsigned int *)&tm_date.tm_mon
+            , (unsigned int *)&tm_date.tm_mday);
+    tm_date.tm_year -= 1900;
+    return(orage_tm_date_to_i18_date(&tm_date));
+}
+
 struct tm orage_icaltime_to_tm_time(const char *icaltime, gboolean real_tm)
 {
     int i;
@@ -331,6 +350,14 @@
     return(localtime(&tt));
 }
 
+char *orage_localdate_i18()
+{
+    struct tm *t;
+
+    t = orage_localtime();
+    return(orage_tm_date_to_i18_date(t));
+}
+
 void orage_select_date(GtkCalendar *cal
     , guint year, guint month, guint day)
 {

Modified: xfcalendar/trunk/src/functions.h
===================================================================
--- xfcalendar/trunk/src/functions.h    2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/functions.h    2007-10-08 19:24:38 UTC (rev 26128)
@@ -76,4 +76,8 @@
 
 char *orage_i18_date_to_icaltime(const char *i18_date);
 
+char *orage_cal_to_i18_date(GtkCalendar *cal);
+
+char *orage_localdate_i18();
+
 #endif /* !__ORAGE_FUNCTIONS_H__ */

Modified: xfcalendar/trunk/src/mainbox.c
===================================================================
--- xfcalendar/trunk/src/mainbox.c      2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/mainbox.c      2007-10-08 19:24:38 UTC (rev 26128)
@@ -80,7 +80,7 @@
 static void
 mFile_interface_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
-    CalWin *cal = (CalWin *) user_data;
+    CalWin *cal = (CalWin *)user_data;
 
     orage_external_interface(cal);
 }
@@ -108,16 +108,21 @@
 static void
 mView_ViewSelectedDate_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
-    CalWin *cal = (CalWin *) user_data;
-    el_win *el;
+    create_el_win(NULL);
+}
 
-    el = create_el_win(NULL);
+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)
 {
-    CalWin *cal = (CalWin *) user_data;
+    CalWin *cal = (CalWin *)user_data;
 
     orage_select_today(GTK_CALENDAR(cal->mCalendar));
 }
@@ -174,9 +179,10 @@
 static void
 mCalendar_day_selected_double_click_cb(GtkCalendar *cdar, gpointer user_data)
 {
-    el_win *el;
-
-    el = create_el_win(NULL);
+    if (g_par.show_days)
+        create_day_win(orage_cal_to_i18_date(cdar));
+    else
+        create_el_win(NULL);
 }
 
 static gboolean
@@ -247,6 +253,9 @@
     cal->mView_ViewSelectedDate = 
             orage_menu_item_new_with_mnemonic(_("View selected _date")
                     , cal->mView_menu);
+    cal->mView_ViewSelectedWeek = 
+            orage_menu_item_new_with_mnemonic(_("View selected _week")
+                    , cal->mView_menu);
 
     menu_separator = orage_separator_menu_item_new(cal->mView_menu);
 
@@ -276,6 +285,8 @@
             , G_CALLBACK(mEdit_preferences_activate_cb), NULL);
     g_signal_connect((gpointer) cal->mView_ViewSelectedDate, "activate"
             , G_CALLBACK(mView_ViewSelectedDate_activate_cb),(gpointer) cal);
+    g_signal_connect((gpointer) cal->mView_ViewSelectedWeek, "activate"
+            , G_CALLBACK(mView_ViewSelectedWeek_activate_cb),(gpointer) cal);
     g_signal_connect((gpointer) cal->mView_selectToday, "activate"
             , G_CALLBACK(mView_selectToday_activate_cb),(gpointer) cal);
     g_signal_connect((gpointer) cal->mHelp_help, "activate"

Modified: xfcalendar/trunk/src/mainbox.h
===================================================================
--- xfcalendar/trunk/src/mainbox.h      2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/mainbox.h      2007-10-08 19:24:38 UTC (rev 26128)
@@ -38,6 +38,7 @@
     GtkWidget *mEdit_preferences;
     GtkWidget *mView_menu;
     GtkWidget *mView_ViewSelectedDate;
+    GtkWidget *mView_ViewSelectedWeek;
     GtkWidget *mView_selectToday;
     GtkWidget *mHelp_menu;
     GtkWidget *mHelp_help;

Modified: xfcalendar/trunk/src/parameters.c
===================================================================
--- xfcalendar/trunk/src/parameters.c   2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/parameters.c   2007-10-08 19:24:38 UTC (rev 26128)
@@ -96,6 +96,11 @@
     GtkWidget *icon_size_frame;
     GtkWidget *icon_size_x_spin;
     GtkWidget *icon_size_y_spin;
+    /* show event/days window from main calendar */
+    GtkWidget *click_to_show_frame;
+    GSList    *click_to_show_radiobutton_group;
+    GtkWidget *click_to_show_days_radiobutton;
+    GtkWidget *click_to_show_events_radiobutton;
 
     /* the rest */
     GtkWidget *close_button;
@@ -259,6 +264,14 @@
             itf->visibility_minimized_radiobutton));
 }
 
+static void show_changed(GtkWidget *dialog, gpointer user_data)
+{
+    Itf *itf = (Itf *)user_data;
+
+    g_par.show_days = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
+            itf->click_to_show_days_radiobutton));
+}
+
 static void sound_application_open_button_clicked(GtkButton *button
         , gpointer user_data)
 {
@@ -511,6 +524,7 @@
             , G_CALLBACK(systray_changed), dialog);
 
     /* how to show when started (show/hide/minimize) */
+    dialog->visibility_radiobutton_group = NULL;
     hbox = gtk_hbox_new(TRUE, 0);
     dialog->visibility_frame = xfce_create_framebox_with_content(
             _("Calendar start") , hbox);
@@ -612,10 +626,10 @@
 
     /***** tray icon size  (0 = use static icon) *****/
     vbox = gtk_vbox_new(FALSE, 0);
-    dialog->ical_weekstartday_frame = xfce_create_framebox_with_content(
+    dialog->icon_size_frame = xfce_create_framebox_with_content(
             _("Dynamic icon size"), vbox);
     gtk_box_pack_start(GTK_BOX(dialog->extra_vbox)
-            , dialog->ical_weekstartday_frame, FALSE, FALSE, 5);
+            , dialog->icon_size_frame, FALSE, FALSE, 5);
 
     hbox = gtk_hbox_new(FALSE, 0);
     gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
@@ -644,6 +658,41 @@
     gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
     g_signal_connect(G_OBJECT(dialog->icon_size_y_spin), "value-changed"
             , G_CALLBACK(icon_size_y_spin_changed), dialog);
+
+    /***** Start event or day window from main calendar *****/
+    dialog->click_to_show_radiobutton_group = NULL;
+    hbox = gtk_vbox_new(FALSE, 0);
+    dialog->click_to_show_frame = xfce_create_framebox_with_content(
+            _("Main Calendar double click shows"), hbox);
+    gtk_box_pack_start(GTK_BOX(dialog->extra_vbox)
+            , dialog->click_to_show_frame, FALSE, FALSE, 5);
+
+    dialog->click_to_show_days_radiobutton =
+            gtk_radio_button_new_with_mnemonic(NULL, _("Days view"));
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , dialog->click_to_show_days_radiobutton, FALSE, FALSE, 0);
+    gtk_radio_button_set_group(
+            GTK_RADIO_BUTTON(dialog->click_to_show_days_radiobutton)
+            , dialog->click_to_show_radiobutton_group);
+    dialog->click_to_show_radiobutton_group = gtk_radio_button_get_group(
+            GTK_RADIO_BUTTON(dialog->click_to_show_days_radiobutton));
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
+            dialog->click_to_show_days_radiobutton), g_par.show_days);
+
+    dialog->click_to_show_events_radiobutton =
+            gtk_radio_button_new_with_mnemonic(NULL, _("Event list"));
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , dialog->click_to_show_events_radiobutton, FALSE, FALSE, 0);
+    gtk_radio_button_set_group(
+            GTK_RADIO_BUTTON(dialog->click_to_show_events_radiobutton)
+            , dialog->click_to_show_radiobutton_group);
+    dialog->click_to_show_radiobutton_group = gtk_radio_button_get_group(
+            GTK_RADIO_BUTTON(dialog->click_to_show_events_radiobutton));
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
+            dialog->click_to_show_events_radiobutton), !g_par.show_days);
+
+    g_signal_connect(G_OBJECT(dialog->click_to_show_days_radiobutton), 
"toggled"
+            , G_CALLBACK(show_changed), dialog);
 }
 
 Itf *create_parameter_dialog()
@@ -652,8 +701,6 @@
 
     dialog = g_new(Itf, 1);
 
-    dialog->visibility_radiobutton_group = NULL;
-
     dialog->orage_dialog = xfce_titled_dialog_new();
     gtk_window_set_default_size(GTK_WINDOW(dialog->orage_dialog), 300, 350);
     gtk_window_set_title(GTK_WINDOW(dialog->orage_dialog)
@@ -688,9 +735,11 @@
     g_signal_connect(G_OBJECT (dialog->orage_dialog), "response"
             , G_CALLBACK(dialog_response), NULL);
 
+    gtk_widget_show_all(dialog->orage_dialog);
+    /*
     gdk_x11_window_set_user_time(GTK_WIDGET(dialog->orage_dialog)->window, 
             gdk_x11_get_server_time(GTK_WIDGET(dialog->orage_dialog)->window));
-    gtk_widget_show_all(dialog->orage_dialog);
+            */
 
     return(dialog);
 }
@@ -733,6 +782,7 @@
     xfce_rc_write_int_entry(rc, "Dynamic icon X", g_par.icon_size_x);
     xfce_rc_write_int_entry(rc, "Dynamic icon Y", g_par.icon_size_y);
     xfce_rc_write_int_entry(rc, "Ical week start day", 
g_par.ical_weekstartday);
+    xfce_rc_write_bool_entry(rc, "Show days", g_par.show_days);
     xfce_rc_write_int_entry(rc, "Foreign file count", g_par.foreign_count);
     for (i = 0; i < g_par.foreign_count;  i++) {
         g_sprintf(f_par, "Foreign file %02d name", i);
@@ -804,6 +854,7 @@
     g_par.icon_size_y = xfce_rc_read_int_entry(rc, "Dynamic icon Y", 32);
     g_par.ical_weekstartday = 
             xfce_rc_read_int_entry(rc, "Ical week start day", 0); /* monday */
+    g_par.show_days = xfce_rc_read_bool_entry(rc, "Show days", FALSE);
     g_par.foreign_count = 
             xfce_rc_read_int_entry(rc, "Foreign file count", 0);
     for (i = 0; i < g_par.foreign_count; i++) {

Modified: xfcalendar/trunk/src/parameters.h
===================================================================
--- xfcalendar/trunk/src/parameters.h   2007-10-06 17:00:21 UTC (rev 26127)
+++ xfcalendar/trunk/src/parameters.h   2007-10-08 19:24:38 UTC (rev 26128)
@@ -85,6 +85,9 @@
 
     /* event-list window */
     gint el_size_x, el_size_y;
+
+    /* show days window from main calendar */
+    gboolean show_days; /* true=show days false=show events */
 } global_parameters; /* global parameters */
 
 #ifdef ORAGE_MAIN

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

Reply via email to