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