Author: juha
Date: 2007-02-20 21:47:23 +0000 (Tue, 20 Feb 2007)
New Revision: 25000

Modified:
   xfcalendar/trunk/src/ical-code.c
   xfcalendar/trunk/src/ical-code.h
   xfcalendar/trunk/src/interface.c
   xfcalendar/trunk/src/interface.h
   xfcalendar/trunk/src/parameters.c
   xfcalendar/trunk/src/parameters.h
Log:
 filenames change feature


Modified: xfcalendar/trunk/src/ical-code.c
===================================================================
--- xfcalendar/trunk/src/ical-code.c    2007-02-20 19:48:12 UTC (rev 24999)
+++ xfcalendar/trunk/src/ical-code.c    2007-02-20 21:47:23 UTC (rev 25000)
@@ -566,18 +566,27 @@
 }
 
 static gboolean xfical_internal_file_open(icalcomponent **p_ical
-        , icalset **p_fical, gchar *file_icalpath)
+        , icalset **p_fical, gchar *file_icalpath, gboolean test)
 {
     icalcomponent *iter;
     gint cnt=0;
 
     if (*p_fical != NULL)
         g_warning("xfical_internal_file_open: file already open");
-    if (!ORAGE_STR_EXISTS(file_icalpath))
-        g_error("xfical_internal_file_open: file empty");
+    if (!ORAGE_STR_EXISTS(file_icalpath)) {
+        if (test)
+            g_warning("xfical_internal_file_open: file empty");
+        else
+            g_error("xfical_internal_file_open: file empty");
+        return(FALSE);
+    }
     if ((*p_fical = icalset_new_file(file_icalpath)) == NULL) {
-        g_error("xfical_internal_file_open: Could not open ical file (%s) %s\n"
-                , file_icalpath, icalerror_strerror(icalerrno));
+        if (test)
+            g_warning("xfical_internal_file_open: Could not open ical file 
(%s) %s\n"
+                    , file_icalpath, icalerror_strerror(icalerrno));
+        else
+            g_error("xfical_internal_file_open: Could not open ical file (%s) 
%s\n"
+                    , file_icalpath, icalerror_strerror(icalerrno));
         return(FALSE);
     }
     else { /* file open, let's find last VCALENDAR entry */
@@ -588,6 +597,10 @@
             *p_ical = iter; /* last valid component */
         }
         if (cnt == 0) {
+            if (test) { /* failed */
+                g_warning("xfical_internal_file_open: no top level (VCALENDAR) 
component in calendar file %s", file_icalpath);
+                return(FALSE);
+            }
         /* calendar missing, need to add one.  
          * Note: According to standard rfc2445 calendar always needs to
          *       contain at least one other component. So strictly speaking
@@ -611,8 +624,16 @@
         }
         else { /* VCALENDAR found */
             if (cnt > 1) {
-                g_warning("xfical_internal_file_open: Too many top level 
components in calendar file %s", file_icalpath);
+                g_warning("xfical_internal_file_open: too many top level 
components in calendar file %s", file_icalpath);
+                if (test) { /* failed */
+                    return(FALSE);
+                }
             }
+            if (test 
+            && icalcomponent_isa(*p_ical) != ICAL_VCALENDAR_COMPONENT) {
+                g_warning("xfical_internal_file_open: top level component is 
not VCALENDAR %s", file_icalpath);
+                return(FALSE);
+            }
         }
     }
     return(TRUE);
@@ -620,7 +641,7 @@
 
 gboolean xfical_file_open(void)
 { 
-    return(xfical_internal_file_open(&ical, &fical, g_par.orage_file));
+    return(xfical_internal_file_open(&ical, &fical, g_par.orage_file, FALSE));
 }
 
 gboolean xfical_archive_open(void)
@@ -630,9 +651,18 @@
     if (!ORAGE_STR_EXISTS(g_par.archive_file))
         return(FALSE);
 
-    return(xfical_internal_file_open(&aical, &afical, g_par.archive_file));
+    return(xfical_internal_file_open(&aical, &afical, g_par.archive_file
+            , FALSE));
 }
 
+gboolean xfical_file_check(gchar *file_name)
+{ 
+    icalcomponent *x_ical = NULL;
+    icalset *x_fical = NULL;
+
+    return(xfical_internal_file_open(&x_ical, &x_fical, file_name, TRUE));
+}
+
 void xfical_file_close(void)
 {
     if (fical == NULL)
@@ -1150,9 +1180,12 @@
         } /* trg_found */
     }  /* EVENTS */
     g_par.alarm_list = g_list_sort(g_par.alarm_list, alarm_order);
-    if (first_list_today)
-        g_message("Orage **: Build alarm list: Processed %d events.\n\tFound 
%d alarms of which %d are active. (Searched %d recurring alarms.)"
-                , cnt_event, cnt_alarm, cnt_act_alarm, cnt_repeat);
+    if (first_list_today) {
+        g_message("Orage **: Build alarm list: Processed %d events."
+                , cnt_event);
+        g_message("Orage **: \tFound %d alarms of which %d are active. 
(Searched %d recurring alarms.)"
+                , cnt_alarm, cnt_act_alarm, cnt_repeat);
+        }
 }
 
 void xfical_alarm_build_list(gboolean first_list_today)
@@ -2372,8 +2405,9 @@
     }
     threshold->tm_mon += 1;
 
-    g_message(_("Orage **: Archiving threshold: %d month(s)\n\tArchiving 
events, which are older than: %04d-%02d-%02d")
-            , g_par.archive_limit
+    g_message(_("Orage **: Archiving threshold: %d month(s)")
+            , g_par.archive_limit);
+    g_message(_("Orage **: \tArchiving events, which are older than: 
%04d-%02d-%02d")
             , threshold->tm_year, threshold->tm_mon, threshold->tm_mday);
 
     /* Check appointment file for items older than the threshold */
@@ -2399,8 +2433,9 @@
         if ((edate.year*12 + edate.month) 
             < (threshold->tm_year*12 + threshold->tm_mon)) {
             p = icalcomponent_get_first_property(c, ICAL_RRULE_PROPERTY);
-            g_message("Orage **: Archiving uid: %s (%s)\n\tEnd year: %04d, 
month: %02d, day: %02d"
-                    , uid, (p) ? "recur" : "normal"
+            g_message(_("Orage **: Archiving uid: %s (%s)")
+                    , uid, (p) ? _("recur") : _("normal"));
+            g_message(_("Orage **: \tEnd year: %04d, month: %02d, day: %02d")
                     , edate.year, edate.month, edate.day);
             if (p)  /*  it is recurrent event */
                 xfical_icalcomponent_archive_recurrent(c, threshold, uid);
@@ -2781,7 +2816,7 @@
         g_warning("xfical_export_file: UID list is empty");
         return(FALSE);
     }
-    if (!xfical_internal_file_open(&x_ical, &x_fical, file_name)) {
+    if (!xfical_internal_file_open(&x_ical, &x_fical, file_name, FALSE)) {
         g_warning("xfical_export_file: Failed to create export file %s"
                 , file_name);
         return(FALSE);

Modified: xfcalendar/trunk/src/ical-code.h
===================================================================
--- xfcalendar/trunk/src/ical-code.h    2007-02-20 19:48:12 UTC (rev 24999)
+++ xfcalendar/trunk/src/ical-code.h    2007-02-20 21:47:23 UTC (rev 25000)
@@ -123,4 +123,5 @@
 gboolean xfical_timezone_button_clicked(GtkButton *button, GtkWindow *parent
         , gchar **tz);
 
+gboolean xfical_file_check(gchar *file_name);
 #endif /* !__ICAL_CODE_H__ */

Modified: xfcalendar/trunk/src/interface.c
===================================================================
--- xfcalendar/trunk/src/interface.c    2007-02-20 19:48:12 UTC (rev 24999)
+++ xfcalendar/trunk/src/interface.c    2007-02-20 21:47:23 UTC (rev 25000)
@@ -68,6 +68,256 @@
 static int uid_drag_target_count = 1;
 
 
+void static orage_file_entry_changed(GtkWidget *dialog, gpointer user_data)
+{
+    intf_win *itf = (intf_win *)user_data;
+    const gchar *s;
+
+    s = gtk_entry_get_text(GTK_ENTRY(itf->orage_file_entry));
+    if (strcmp(g_par.orage_file, s) == 0) {
+        gtk_widget_set_sensitive(itf->orage_file_save_button, FALSE);
+    }
+    else {
+        gtk_widget_set_sensitive(itf->orage_file_save_button, TRUE);
+    }
+}
+
+static gboolean copy_file(gchar *source, gchar *target)
+{
+    gchar *text;
+    gsize text_len;
+    GError *error = NULL;
+    gboolean ok = TRUE;
+
+    /* read file */
+    if (!g_file_get_contents(source, &text, &text_len, &error)) {
+        g_warning("file save: Could not open ical file (%s) error:%s"
+                , source, error->message);
+        g_error_free(error);
+        ok = FALSE;
+    }
+    /* write file */
+    if (!g_file_set_contents(target, text, -1, &error)) {
+        g_warning("file save: Could not write ical file (%s) error:%s"
+                , target, error->message);
+        g_error_free(error);
+        ok = FALSE;
+    }
+    g_free(text);
+    return(ok);
+}
+
+void static orage_file_save_button_clicked(GtkButton *button
+        , gpointer user_data)
+{
+    intf_win *itf = (intf_win *)user_data;
+    gchar *s;
+    gboolean ok = TRUE;
+
+    s = strdup(gtk_entry_get_text(GTK_ENTRY(itf->orage_file_entry)));
+    if (gtk_toggle_button_get_active(
+            GTK_TOGGLE_BUTTON(itf->orage_file_rename_rb))) {
+        if (!g_file_test(s, G_FILE_TEST_EXISTS)) {
+            g_warning("New file %s does not exist. Rename not done", s);
+            ok = FALSE;
+        }
+        if (!xfical_file_check(s)) {
+            g_warning("New file %s is not valid ical calendar file. Rename not 
done", s);
+            ok = FALSE;
+        }
+    }
+    else if (gtk_toggle_button_get_active(
+            GTK_TOGGLE_BUTTON(itf->orage_file_copy_rb))) {
+        ok = copy_file(g_par.orage_file, s);
+    }
+    else if (gtk_toggle_button_get_active(
+            GTK_TOGGLE_BUTTON(itf->orage_file_move_rb))) {
+        if (g_rename(g_par.orage_file, s)) { /* failed */
+            g_warning("rename failed. trying manual copy");
+            ok = copy_file(g_par.orage_file, s);
+            if (ok) { /* this is move. so let's remove the orig */
+               if (g_remove(g_par.orage_file))
+                   g_message("file remove failed %s", g_par.orage_file);
+            }
+        }
+    }
+    else {
+        g_warning("illegal file save toggle button status");
+        ok = FALSE;
+    }
+
+    /* finally orage internal file name change */
+    if (ok) {
+        if (g_par.orage_file)
+            g_free(g_par.orage_file);
+        g_par.orage_file = s;
+        gtk_widget_set_sensitive(itf->orage_file_save_button, FALSE);
+    }
+    else {
+        g_free(s);
+    }
+}
+
+void static archive_file_entry_changed(GtkWidget *dialog, gpointer user_data)
+{
+    intf_win *itf = (intf_win *)user_data;
+    const gchar *s;
+
+    s = gtk_entry_get_text(GTK_ENTRY(itf->archive_file_entry));
+    if (strcmp(g_par.archive_file, s) == 0) { /* same file */
+        gtk_widget_set_sensitive(itf->archive_file_save_button, FALSE);
+    }
+    else {
+        gtk_widget_set_sensitive(itf->archive_file_save_button, TRUE);
+    }
+}
+
+void static archive_file_save_button_clicked(GtkButton *button
+        , gpointer user_data)
+{
+    intf_win *itf = (intf_win *)user_data;
+    gchar *s;
+    gboolean ok = TRUE;
+
+    s = strdup(gtk_entry_get_text(GTK_ENTRY(itf->archive_file_entry)));
+    if (gtk_toggle_button_get_active(
+            GTK_TOGGLE_BUTTON(itf->archive_file_rename_rb))) {
+        if (!g_file_test(s, G_FILE_TEST_EXISTS)) {
+            g_warning("New file %s does not exist. Rename not done", s);
+            ok = FALSE;
+        }
+        if (!xfical_file_check(s)) {
+            g_warning("New file %s is not valid ical calendar file. Rename not 
done", s);
+            ok = FALSE;
+        }
+    }
+    else if (gtk_toggle_button_get_active(
+            GTK_TOGGLE_BUTTON(itf->archive_file_copy_rb))) {
+        ok = copy_file(g_par.archive_file, s);
+    }
+    else if (gtk_toggle_button_get_active(
+            GTK_TOGGLE_BUTTON(itf->archive_file_move_rb))) {
+        if (g_rename(g_par.archive_file, s)) { /* failed */
+            g_warning("rename failed. trying manual copy");
+            ok = copy_file(g_par.archive_file, s);
+            if (ok) { /* this is move. so let's remove the orig */
+               if (g_remove(g_par.archive_file))
+                   g_message("file remove failed %s", g_par.archive_file);
+            }
+        }
+    }
+    else {
+        g_warning("illegal file save toggle button status");
+        ok = FALSE;
+    }
+
+    /* finally archive internal file name change */
+    if (ok) {
+        if (g_par.archive_file)
+            g_free(g_par.archive_file);
+        g_par.archive_file = s;
+        gtk_widget_set_sensitive(itf->archive_file_save_button, FALSE);
+    }
+    else {
+        g_free(s);
+    }
+}
+
+static GtkWidget *create_orage_file_chooser(intf_win *itf, gchar *cur_file
+        , gchar *rcfolder, gchar *def_name)
+{
+    GtkWidget *file_chooser;
+    GtkFileFilter *filter;
+
+    /* Create file chooser */
+    file_chooser = gtk_file_chooser_dialog_new(_("Select a file...")
+            , GTK_WINDOW(itf->main_window), GTK_FILE_CHOOSER_ACTION_SAVE
+            , GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL
+            , GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT
+            , NULL);
+    /* Add filters */
+    filter = gtk_file_filter_new();
+    gtk_file_filter_set_name(filter, _("Calendar files"));
+    gtk_file_filter_add_pattern(filter, "*.ics");
+    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(file_chooser), filter);
+
+    filter = gtk_file_filter_new();
+    gtk_file_filter_set_name(filter, _("All Files"));
+    gtk_file_filter_add_pattern(filter, "*");
+    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(file_chooser), filter);
+
+    gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(file_chooser)
+            , rcfolder, NULL);
+
+    gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(file_chooser), TRUE);
+
+    if (ORAGE_STR_EXISTS(cur_file)) {
+        if (! gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(file_chooser)
+                , cur_file)) {
+            gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_chooser)
+                    , rcfolder);
+            gtk_file_chooser_set_current_name(
+                    GTK_FILE_CHOOSER(file_chooser), def_name);
+        }
+    }
+    else { /* this should never happen since we have default value */
+        g_warning("Orage file missing");
+        gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_chooser)
+                , rcfolder);
+        gtk_file_chooser_set_current_name(
+                GTK_FILE_CHOOSER(file_chooser), def_name);
+    }
+    return(file_chooser);
+}
+
+static void orage_file_open_button_clicked(GtkButton *button
+        , gpointer user_data)
+{
+    intf_win *itf = (intf_win *)user_data;
+    GtkWidget *file_chooser;
+    gchar *rcfile;
+    gchar *s;
+
+    rcfile = xfce_resource_save_location(XFCE_RESOURCE_DATA, ORAGE_DIR, TRUE);
+    file_chooser = create_orage_file_chooser(itf, g_par.orage_file
+            , rcfile, APPFILE);
+
+    if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT) {
+        s = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser));
+        if (s) {
+            gtk_entry_set_text(GTK_ENTRY(itf->orage_file_entry)
+                    , (const gchar *)s);
+            g_free(s);
+        }
+    }
+    gtk_widget_destroy(file_chooser);
+    g_free(rcfile);
+}
+
+static void archive_file_open_button_clicked(GtkButton *button
+        , gpointer user_data)
+{
+    intf_win *itf = (intf_win *)user_data;
+    GtkWidget *file_chooser;
+    gchar *rcfile;
+    gchar *s;
+
+    rcfile = xfce_resource_save_location(XFCE_RESOURCE_DATA, ORAGE_DIR, TRUE);
+    file_chooser = create_orage_file_chooser(itf, g_par.archive_file
+            , rcfile, ARCFILE);
+
+    if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT) {
+        s = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser));
+        if (s) {
+            gtk_entry_set_text(GTK_ENTRY(itf->archive_file_entry)
+                    , (const gchar *)s);
+            g_free(s);
+        }
+    }
+    gtk_widget_destroy(file_chooser);
+    g_free(rcfile);
+}
+
 void on_exp_file_button_clicked_cb(GtkButton *button, gpointer user_data)
 {
     intf_win *intf_w = (intf_win *)user_data;
@@ -516,9 +766,9 @@
     intf_w->exp_file_entry = gtk_entry_new();
     gtk_box_pack_start(GTK_BOX(hbox), intf_w->exp_file_entry, TRUE, TRUE, 0);
     intf_w->exp_file_button = gtk_button_new_from_stock("gtk-find");
-    gtk_box_pack_start(GTK_BOX(hbox), intf_w->exp_file_button, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), intf_w->exp_file_button, FALSE, FALSE, 
0);
     orage_table_add_row(intf_w->exp_table, label, hbox, 0
-            , (GTK_FILL) , (GTK_FILL));
+            , (GTK_SHRINK | GTK_FILL), (GTK_SHRINK | GTK_FILL));
     g_signal_connect((gpointer)intf_w->exp_file_button, "clicked"
             , G_CALLBACK(on_exp_file_button_clicked_cb), intf_w);
     file = g_build_filename(g_get_home_dir(), "orage_export.ics", NULL);
@@ -609,6 +859,153 @@
             , G_CALLBACK(on_unarchive_button_clicked_cb), intf_w);
 }
 
+void create_orage_file_tab(intf_win *intf_w)
+{
+    GtkWidget *label, *hbox, *vbox, *m_vbox;
+    gchar *file;
+    char *str;
+
+    m_vbox = gtk_vbox_new(FALSE, 0);
+    intf_w->fil_notebook_page = xfce_create_framebox_with_content(NULL, 
m_vbox);
+    intf_w->fil_tab_label = gtk_label_new(_("Orage files"));
+    gtk_notebook_append_page(GTK_NOTEBOOK(intf_w->notebook)
+            , intf_w->fil_notebook_page, intf_w->fil_tab_label);
+
+    /***** main file *****/
+    vbox = gtk_vbox_new(FALSE, 0);
+    intf_w->orage_file_frame = xfce_create_framebox_with_content(
+            _("Orage main calendar file"), vbox);
+    gtk_box_pack_start(GTK_BOX(m_vbox)
+            , intf_w->orage_file_frame, FALSE, FALSE, 5);
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    label = gtk_label_new(_("Current file"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+    label = gtk_label_new((const gchar *)g_par.orage_file);
+    gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 5);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    label = gtk_label_new(_("New file"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+    intf_w->orage_file_entry = gtk_entry_new();
+    gtk_entry_set_text(GTK_ENTRY(intf_w->orage_file_entry)
+            , (const gchar *)g_par.orage_file);
+    gtk_box_pack_start(GTK_BOX(hbox), intf_w->orage_file_entry, TRUE, TRUE, 5);
+    intf_w->orage_file_open_button = gtk_button_new_from_stock("gtk-open");
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->orage_file_open_button, FALSE, FALSE, 5);
+    intf_w->orage_file_save_button = gtk_button_new_from_stock("gtk-save");
+    gtk_widget_set_sensitive(intf_w->orage_file_save_button, FALSE);
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->orage_file_save_button, FALSE, FALSE, 5);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    label = gtk_label_new(_("Action options"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+    intf_w->orage_file_rename_rb = 
+            gtk_radio_button_new_with_label(NULL, _("Rename"));
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->orage_file_rename_rb, FALSE, FALSE, 5);
+    gtk_tooltips_set_tip(intf_w->tooltips, intf_w->orage_file_rename_rb
+            , _("Orage internal file rename only.\nDoes not touch external 
filesystem at all.\nNew file must exist."), NULL);
+
+    intf_w->orage_file_copy_rb = 
+            gtk_radio_button_new_with_mnemonic_from_widget(
+                    GTK_RADIO_BUTTON(intf_w->orage_file_rename_rb), _("Copy"));
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->orage_file_copy_rb, FALSE, FALSE, 5);
+    gtk_tooltips_set_tip(intf_w->tooltips, intf_w->orage_file_copy_rb
+            , _("Current file is copied and stays unmodified in the old 
place."), NULL);
+
+    intf_w->orage_file_move_rb = 
+            gtk_radio_button_new_with_mnemonic_from_widget(
+                    GTK_RADIO_BUTTON(intf_w->orage_file_rename_rb), _("Move"));
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->orage_file_move_rb, FALSE, FALSE, 5);
+    gtk_tooltips_set_tip(intf_w->tooltips, intf_w->orage_file_move_rb
+            , _("Current file is moved and vanishes from the old place."), 
NULL);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
+
+    g_signal_connect(G_OBJECT(intf_w->orage_file_open_button), "clicked"
+            , G_CALLBACK(orage_file_open_button_clicked), intf_w);
+    g_signal_connect(G_OBJECT(intf_w->orage_file_entry), "changed"
+            , G_CALLBACK(orage_file_entry_changed), intf_w);
+    g_signal_connect(G_OBJECT(intf_w->orage_file_save_button), "clicked"
+            , G_CALLBACK(orage_file_save_button_clicked), intf_w);
+
+    /***** archive file *****/
+    vbox = gtk_vbox_new(FALSE, 0);
+    intf_w->archive_file_frame = xfce_create_framebox_with_content(
+            _("Archive file"), vbox);
+    gtk_box_pack_start(GTK_BOX(m_vbox)
+            , intf_w->archive_file_frame, FALSE, FALSE, 5);
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    label = gtk_label_new(_("Current file"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+    label = gtk_label_new((const gchar *)g_par.archive_file);
+    gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 5);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    label = gtk_label_new(_("New file"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+    intf_w->archive_file_entry = gtk_entry_new();
+    gtk_entry_set_text(GTK_ENTRY(intf_w->archive_file_entry)
+            , (const gchar *)g_par.archive_file);
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->archive_file_entry, TRUE, TRUE, 5);
+    intf_w->archive_file_open_button = gtk_button_new_from_stock("gtk-open");
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->archive_file_open_button, FALSE, FALSE, 5);
+    intf_w->archive_file_save_button = gtk_button_new_from_stock("gtk-save");
+    gtk_widget_set_sensitive(intf_w->archive_file_save_button, FALSE);
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->archive_file_save_button, FALSE, FALSE, 5);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    label = gtk_label_new(_("Action options"));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+    intf_w->archive_file_rename_rb = 
+            gtk_radio_button_new_with_label(NULL, _("Rename"));
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->archive_file_rename_rb, FALSE, FALSE, 5);
+    intf_w->archive_file_copy_rb = 
+            gtk_radio_button_new_with_mnemonic_from_widget(
+                GTK_RADIO_BUTTON(intf_w->archive_file_rename_rb), _("Copy"));
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->archive_file_copy_rb, FALSE, FALSE, 5);
+    intf_w->archive_file_move_rb = 
+            gtk_radio_button_new_with_mnemonic_from_widget(
+                GTK_RADIO_BUTTON(intf_w->archive_file_rename_rb), _("Move"));
+    gtk_box_pack_start(GTK_BOX(hbox)
+            , intf_w->archive_file_move_rb, FALSE, FALSE, 5);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
+
+    g_signal_connect(G_OBJECT(intf_w->archive_file_open_button), "clicked"
+            , G_CALLBACK(archive_file_open_button_clicked), intf_w);
+    g_signal_connect(G_OBJECT(intf_w->archive_file_entry), "changed"
+            , G_CALLBACK(archive_file_entry_changed), intf_w);
+    g_signal_connect(G_OBJECT(intf_w->archive_file_save_button), "clicked"
+            , G_CALLBACK(archive_file_save_button_clicked), intf_w);
+}
+
+void create_external_file_tab(intf_win *intf_w)
+{
+    GtkWidget *label;
+    gchar *file;
+    char *str;
+
+    intf_w->ext_table = orage_table_new(3, 20);
+    intf_w->ext_notebook_page = intf_w->ext_table;
+    intf_w->ext_tab_label = gtk_label_new(_("External files"));
+    gtk_notebook_append_page(GTK_NOTEBOOK(intf_w->notebook)
+            , intf_w->ext_notebook_page, intf_w->ext_tab_label);
+}
+
 void orage_external_interface(CalWin *xfcal)
 {
     intf_win *intf_w = g_new(intf_win, 1);
@@ -638,6 +1035,9 @@
     create_import_tab(intf_w);
     create_export_tab(intf_w);
     create_archive_tab(intf_w);
+    create_orage_file_tab(intf_w);
+    create_external_file_tab(intf_w);
+    gtk_notebook_set_current_page(GTK_NOTEBOOK(intf_w->notebook), 1);
 
     gtk_widget_show_all(intf_w->main_window);
     drag_and_drop_init(intf_w);

Modified: xfcalendar/trunk/src/interface.h
===================================================================
--- xfcalendar/trunk/src/interface.h    2007-02-20 19:48:12 UTC (rev 24999)
+++ xfcalendar/trunk/src/interface.h    2007-02-20 21:47:23 UTC (rev 25000)
@@ -23,7 +23,7 @@
 #ifndef __INTERFACE_H__
 #define __INTERFACE_H__
 
-typedef struct
+typedef struct _intf_win
 {
     GtkWidget *main_window;
     GtkWidget *main_vbox;
@@ -53,7 +53,30 @@
     GtkWidget *arc_tab_label;
     GtkWidget *arc_button1;
     GtkWidget *arc_button2;
+    GtkWidget *fil_table;
+    GtkWidget *fil_notebook_page;
+    GtkWidget *fil_tab_label;
+    /* Orage calendar file */
+    GtkWidget *orage_file_frame;
+    GtkWidget *orage_file_entry;
+    GtkWidget *orage_file_open_button;
+    GtkWidget *orage_file_save_button;
+    GtkWidget *orage_file_rename_rb;
+    GtkWidget *orage_file_copy_rb;
+    GtkWidget *orage_file_move_rb;
+    /* archive file */
+    GtkWidget *archive_file_frame;
+    GtkWidget *archive_file_entry;
+    GtkWidget *archive_file_open_button;
+    GtkWidget *archive_file_save_button;
+    GtkWidget *archive_file_rename_rb;
+    GtkWidget *archive_file_copy_rb;
+    GtkWidget *archive_file_move_rb;
 
+    GtkWidget *ext_table;
+    GtkWidget *ext_notebook_page;
+    GtkWidget *ext_tab_label;
+
     GtkTooltips *tooltips;
     GtkAccelGroup *accelgroup;
 } intf_win;  /* interface = export/import window */

Modified: xfcalendar/trunk/src/parameters.c
===================================================================
--- xfcalendar/trunk/src/parameters.c   2007-02-20 19:48:12 UTC (rev 24999)
+++ xfcalendar/trunk/src/parameters.c   2007-02-20 21:47:23 UTC (rev 25000)
@@ -96,18 +96,6 @@
     GtkWidget *icon_size_frame;
     GtkWidget *icon_size_x_spin;
     GtkWidget *icon_size_y_spin;
-#ifdef ORAGE_FILE_RENAME_ENABLED
-    /* Orage calendar file */
-    GtkWidget *orage_file_frame;
-    GtkWidget *orage_file_entry;
-    GtkWidget *orage_file_open_button;
-    GtkWidget *orage_file_save_button;
-    /* archive file */
-    GtkWidget *archive_file_frame;
-    GtkWidget *archive_file_entry;
-    GtkWidget *archive_file_open_button;
-    GtkWidget *archive_file_save_button;
-#endif
 
     /* the rest */
     GtkWidget *close_button;
@@ -146,167 +134,6 @@
             GTK_ENTRY(itf->sound_application_entry)));
 }
 
-#ifdef ORAGE_FILE_RENAME_ENABLED
-void static orage_file_entry_changed(GtkWidget *dialog, gpointer user_data)
-{
-    Itf *itf = (Itf *)user_data;
-    const gchar *s;
-
-    s = gtk_entry_get_text(GTK_ENTRY(itf->orage_file_entry));
-    if (strcmp(g_par.orage_file, s) == 0) {
-        gtk_widget_set_sensitive(itf->orage_file_save_button, FALSE);
-    }
-    else {
-        gtk_widget_set_sensitive(itf->orage_file_save_button, TRUE);
-    }
-}
-
-void static orage_file_save_button_clicked(GtkButton *button
-        , gpointer user_data)
-{
-    Itf *itf = (Itf *)user_data;
-    gchar *s;
-
-    s = strdup(gtk_entry_get_text(GTK_ENTRY(itf->archive_file_entry)));
-    if (g_rename(g_par.orage_file, s)) { /* failed */ 
-        g_warning("rename failed");
-        g_free(s);
-    }
-    else {
-        if (g_par.orage_file)
-            g_free(g_par.orage_file);
-        g_par.orage_file = s;
-        gtk_widget_set_sensitive(itf->orage_file_save_button, FALSE);
-    }
-}
-
-void static archive_file_entry_changed(GtkWidget *dialog, gpointer user_data)
-{
-    Itf *itf = (Itf *)user_data;
-    const gchar *s;
-
-    s = gtk_entry_get_text(GTK_ENTRY(itf->archive_file_entry));
-    if (strcmp(g_par.archive_file, s) == 0) { /* same file */
-        gtk_widget_set_sensitive(itf->archive_file_save_button, FALSE);
-    }
-    else {
-        gtk_widget_set_sensitive(itf->archive_file_save_button, TRUE);
-    }
-}
-
-void static archive_file_save_button_clicked(GtkButton *button
-        , gpointer user_data)
-{
-    Itf *itf = (Itf *)user_data;
-    gchar *s;
-
-    s = strdup(gtk_entry_get_text(GTK_ENTRY(itf->archive_file_entry)));
-    if (g_rename(g_par.archive_file, s)) { /* failed */ 
-        g_warning("rename failed");
-        g_free(s);
-    }
-    else {
-        if (g_par.archive_file)
-            g_free(g_par.archive_file);
-        g_par.archive_file = s;
-        gtk_widget_set_sensitive(itf->archive_file_save_button, FALSE);
-    }
-}
-
-static GtkWidget *create_orage_file_chooser(Itf *itf, gchar *cur_file
-        , gchar *rcfolder, gchar *def_name)
-{
-    GtkWidget *file_chooser;
-    GtkFileFilter *filter;
-
-    /* Create file chooser */
-    file_chooser = gtk_file_chooser_dialog_new(_("Select a file...")
-            , GTK_WINDOW(itf->orage_dialog), GTK_FILE_CHOOSER_ACTION_SAVE
-            , GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL
-            , GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT
-            , NULL);
-    /* Add filters */
-    filter = gtk_file_filter_new();
-    gtk_file_filter_set_name(filter, _("Calendar files"));
-    gtk_file_filter_add_pattern(filter, "*.ics");
-    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(file_chooser), filter);
-
-    filter = gtk_file_filter_new();
-    gtk_file_filter_set_name(filter, _("All Files"));
-    gtk_file_filter_add_pattern(filter, "*");
-    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(file_chooser), filter);
-
-    gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(file_chooser)
-            , rcfolder, NULL);
-
-    if (ORAGE_STR_EXISTS(cur_file)) {
-        if (! gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(file_chooser)
-                , cur_file)) {
-            gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_chooser)
-                    , rcfolder);
-            gtk_file_chooser_set_current_name(
-                    GTK_FILE_CHOOSER(file_chooser), def_name);
-        }
-    }
-    else { /* this should never happen since we have default value */
-        g_warning("Orage file missing");
-        gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_chooser)
-                , rcfolder);
-        gtk_file_chooser_set_current_name(
-                GTK_FILE_CHOOSER(file_chooser), def_name);
-    }
-    return(file_chooser);
-}
-
-static void orage_file_open_button_clicked(GtkButton *button
-        , gpointer user_data)
-{
-    Itf *itf = (Itf *)user_data;
-    GtkWidget *file_chooser;
-    gchar *rcfile;
-    gchar *s;
-
-    rcfile = xfce_resource_save_location(XFCE_RESOURCE_DATA, ORAGE_DIR, TRUE);
-    file_chooser = create_orage_file_chooser(itf, g_par.orage_file
-            , rcfile, APPFILE);
-
-    if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT) {
-        s = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser));
-        if (s) {
-            gtk_entry_set_text(GTK_ENTRY(itf->orage_file_entry)
-                    , (const gchar *)s);
-            g_free(s);
-        }
-    }
-    gtk_widget_destroy(file_chooser);
-    g_free(rcfile);
-}
-
-static void archive_file_open_button_clicked(GtkButton *button
-        , gpointer user_data)
-{
-    Itf *itf = (Itf *)user_data;
-    GtkWidget *file_chooser;
-    gchar *rcfile;
-    gchar *s;
-
-    rcfile = xfce_resource_save_location(XFCE_RESOURCE_DATA, ORAGE_DIR, TRUE);
-    file_chooser = create_orage_file_chooser(itf, g_par.archive_file
-            , rcfile, ARCFILE);
-
-    if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT) {
-        s = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser));
-        if (s) {
-            gtk_entry_set_text(GTK_ENTRY(itf->archive_file_entry)
-                    , (const gchar *)s);
-            g_free(s);
-        }
-    }
-    gtk_widget_destroy(file_chooser);
-    g_free(rcfile);
-}
-#endif
-
 static void set_border()
 {
     gtk_window_set_decorated(GTK_WINDOW(g_par.xfcal->mWindow)
@@ -817,62 +644,6 @@
     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);
-
-#ifdef ORAGE_FILE_RENAME_ENABLED
-    /***** main file *****/
-    hbox = gtk_hbox_new(FALSE, 0);
-    dialog->orage_file_frame = xfce_create_framebox_with_content(
-            _("Orage main calendar file"), hbox);
-    gtk_box_pack_start(GTK_BOX(dialog->extra_vbox)
-            , dialog->orage_file_frame, FALSE, FALSE, 5);
-
-    dialog->orage_file_entry = gtk_entry_new();
-    gtk_entry_set_text(GTK_ENTRY(dialog->orage_file_entry)
-            , (const gchar *)g_par.orage_file);
-    gtk_box_pack_start(GTK_BOX(hbox)
-            , dialog->orage_file_entry, TRUE, TRUE, 5);
-    dialog->orage_file_open_button = gtk_button_new_from_stock("gtk-open");
-    gtk_box_pack_start(GTK_BOX(hbox)
-            , dialog->orage_file_open_button, FALSE, FALSE, 5);
-    dialog->orage_file_save_button = gtk_button_new_from_stock("gtk-save");
-    gtk_widget_set_sensitive(dialog->orage_file_save_button, FALSE);
-    gtk_box_pack_start(GTK_BOX(hbox)
-            , dialog->orage_file_save_button, FALSE, FALSE, 5);
-
-    g_signal_connect(G_OBJECT(dialog->orage_file_open_button), "clicked"
-            , G_CALLBACK(orage_file_open_button_clicked), dialog);
-    g_signal_connect(G_OBJECT(dialog->orage_file_entry), "changed"
-            , G_CALLBACK(orage_file_entry_changed), dialog);
-    g_signal_connect(G_OBJECT(dialog->orage_file_save_button), "clicked"
-            , G_CALLBACK(orage_file_save_button_clicked), dialog);
-
-    /***** archive file *****/
-    hbox = gtk_hbox_new(FALSE, 0);
-    dialog->archive_file_frame = xfce_create_framebox_with_content(
-            _("Archive file"), hbox);
-    gtk_box_pack_start(GTK_BOX(dialog->extra_vbox)
-            , dialog->archive_file_frame, FALSE, FALSE, 5);
-
-    dialog->archive_file_entry = gtk_entry_new();
-    gtk_entry_set_text(GTK_ENTRY(dialog->archive_file_entry)
-            , (const gchar *)g_par.archive_file);
-    gtk_box_pack_start(GTK_BOX(hbox)
-            , dialog->archive_file_entry, TRUE, TRUE, 5);
-    dialog->archive_file_open_button = gtk_button_new_from_stock("gtk-open");
-    gtk_box_pack_start(GTK_BOX(hbox)
-            , dialog->archive_file_open_button, FALSE, FALSE, 5);
-    dialog->archive_file_save_button = gtk_button_new_from_stock("gtk-save");
-    gtk_widget_set_sensitive(dialog->archive_file_save_button, FALSE);
-    gtk_box_pack_start(GTK_BOX(hbox)
-            , dialog->archive_file_save_button, FALSE, FALSE, 5);
-
-    g_signal_connect(G_OBJECT(dialog->archive_file_open_button), "clicked"
-            , G_CALLBACK(archive_file_open_button_clicked), dialog);
-    g_signal_connect(G_OBJECT(dialog->archive_file_entry), "changed"
-            , G_CALLBACK(archive_file_entry_changed), dialog);
-    g_signal_connect(G_OBJECT(dialog->archive_file_save_button), "clicked"
-            , G_CALLBACK(archive_file_save_button_clicked), dialog);
-#endif
 }
 
 Itf *create_parameter_dialog()
@@ -930,6 +701,8 @@
 {
     gchar *fpath;
     XfceRc *rc;
+    gint i;
+    gchar f_par[100];
 
     fpath = xfce_resource_save_location(XFCE_RESOURCE_CONFIG
             , ORAGE_DIR PARFILE, TRUE);
@@ -955,13 +728,20 @@
     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, "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);
-    xfce_rc_write_bool_entry(rc, "set ontop", g_par.set_ontop);
+    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);
+    xfce_rc_write_bool_entry(rc, "Set ontop", g_par.set_ontop);
     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_int_entry(rc, "Foreign file count", g_par.foreign_count);
+    for (i = g_par.foreign_count; i; i++) {
+        g_sprintf(f_par, "Foreign file %02d name", i);
+        xfce_rc_write_entry(rc, f_par, g_par.foreign_data[i].file);
+        g_sprintf(f_par, "Foreign file %02d read-only", i);
+        xfce_rc_write_bool_entry(rc, f_par, g_par.foreign_data[i].read_only);
+    }
 
     g_free(fpath);
     xfce_rc_close(rc);
@@ -971,6 +751,8 @@
 {
     gchar *fpath;
     XfceRc *rc;
+    gint i;
+    gchar f_par[100];
 
     fpath = xfce_resource_save_location(XFCE_RESOURCE_CONFIG
             , ORAGE_DIR PARFILE, TRUE);
@@ -1007,15 +789,25 @@
     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_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_visible = xfce_rc_read_bool_entry(rc, "Start visible", TRUE);
     g_par.start_minimized = 
-            xfce_rc_read_bool_entry(rc, "start minimized", FALSE);
-    g_par.set_stick = xfce_rc_read_bool_entry(rc, "set sticked", TRUE);
-    g_par.set_ontop = xfce_rc_read_bool_entry(rc, "set ontop", FALSE);
+            xfce_rc_read_bool_entry(rc, "Start minimized", FALSE);
+    g_par.set_stick = xfce_rc_read_bool_entry(rc, "Set sticked", TRUE);
+    g_par.set_ontop = xfce_rc_read_bool_entry(rc, "Set ontop", FALSE);
     g_par.icon_size_x = xfce_rc_read_int_entry(rc, "Dynamic icon X", 42);
     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.foreign_count = 
+            xfce_rc_read_int_entry(rc, "Foreign file count", 0);
+    for (i = g_par.foreign_count; i; i++) {
+        g_sprintf(f_par, "Foreign file %02d name", i);
+        g_par.foreign_data[i].file = 
+                g_strdup(xfce_rc_read_entry(rc, f_par, NULL));
+        g_sprintf(f_par, "Foreign file %02d read-only", i);
+        g_par.foreign_data[i].read_only = 
+                xfce_rc_read_bool_entry(rc, f_par, TRUE);
+    }
 
     g_free(fpath);
     xfce_rc_close(rc);

Modified: xfcalendar/trunk/src/parameters.h
===================================================================
--- xfcalendar/trunk/src/parameters.h   2007-02-20 19:48:12 UTC (rev 24999)
+++ xfcalendar/trunk/src/parameters.h   2007-02-20 21:47:23 UTC (rev 25000)
@@ -32,7 +32,13 @@
 #define ARCFILE  "orage_archive.ics"
 
 #define BORDER 5
+typedef struct _foreign_file
+{
+    char *file;
+    gboolean read_only;
+} foreign_file;
 
+
 typedef struct _parameters
 {
     /* main window settings */
@@ -58,6 +64,10 @@
     int archive_limit;
     char *archive_file;
 
+    /* foreign files */
+    int foreign_count;
+    foreign_file foreign_data[10];
+
     /* other */
     char *orage_file;
     char *sound_application;

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

Reply via email to