44 |
extern GtkWidget *mainnotebook; |
extern GtkWidget *mainnotebook; |
45 |
extern GList *logwindowlist; |
extern GList *logwindowlist; |
46 |
|
|
|
static GtkWidget *previewscrolledwindow; |
|
|
|
|
|
/* |
|
|
* in case we open a non-xlog file, we have to know the xlog filename |
|
|
*/ |
|
|
static gchar *find_logname (const gchar *selected) |
|
|
{ |
|
|
gchar *basen, *dirn, **split, *l; |
|
|
|
|
|
basen = g_path_get_basename (selected); |
|
|
dirn = g_path_get_dirname (selected); |
|
|
|
|
|
if (g_strrstr(basen, ".")) |
|
|
{ |
|
|
split = g_strsplit (basen, ".", 0); |
|
|
l = g_strconcat (dirn, G_DIR_SEPARATOR_S, split[0], ".xlog", 0); |
|
|
g_strfreev (split); |
|
|
} |
|
|
else |
|
|
{ |
|
|
l = g_strconcat (dirn, G_DIR_SEPARATOR_S, basen, ".xlog", 0); |
|
|
} |
|
|
g_free (basen); |
|
|
g_free (dirn); |
|
|
return l; |
|
|
} |
|
|
|
|
|
/* callback for the preview widget, read the first 10 lines */ |
|
|
static void |
|
|
cb (GtkFileChooser *chooser, gpointer data) |
|
|
{ |
|
|
GtkWidget *preview; |
|
|
gchar *filename, buf[80]; |
|
|
gboolean have_preview = FALSE; |
|
|
gint i; |
|
|
FILE *in; |
|
|
GtkTextBuffer *buffer; |
|
|
GtkTextIter start, end; |
|
|
|
|
|
preview = GTK_WIDGET (data); |
|
|
filename = gtk_file_chooser_get_preview_filename (chooser); |
|
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(preview)); |
|
|
gtk_text_buffer_get_bounds (buffer, &start, &end); |
|
|
gtk_text_buffer_delete (buffer, &start, &end); |
|
|
|
|
|
in = fopen (filename, "r"); |
|
|
if (in) |
|
|
{ |
|
|
have_preview = TRUE; |
|
|
for (i = 0; i < 10; i++) |
|
|
{ |
|
|
if (fgets (buf, 80, in) == NULL) |
|
|
break; |
|
|
else if (g_utf8_validate (buf, -1, NULL)) |
|
|
gtk_text_buffer_insert_with_tags_by_name |
|
|
(buffer, &start, buf, -1, "tiny", NULL); |
|
|
} |
|
|
} |
|
|
gtk_widget_set_size_request (previewscrolledwindow, 200, -1); |
|
|
gtk_file_chooser_set_preview_widget_active (chooser, have_preview); |
|
|
} |
|
|
|
|
47 |
void |
void |
48 |
on_menu_open_activate (GtkMenuItem * menuitem, gpointer user_data) |
on_menu_open_activate (GtkMenuItem * menuitem, gpointer user_data) |
49 |
{ |
{ |
50 |
GtkWidget *fileselection, *combobox, *hbox, *label, *preview; |
GtkWidget *fileselection; |
51 |
GtkTextBuffer *buffer; |
GtkFileFilter *filter; |
52 |
gchar *filen, *logn, *xlogbackupfile, *temp, *selection; |
gchar *logn, *xlogbackupfile, *temp, *selection; |
53 |
gchar *sellog; |
gchar *sellog; |
54 |
gboolean logexist = FALSE; |
gboolean logexist = FALSE; |
55 |
gint i, filetype, response; |
gint i, response; |
56 |
logtype *logwindow; |
logtype *logwindow; |
57 |
LOGDB *lp; |
LOGDB *lp; |
58 |
|
|
59 |
fileselection = gtk_file_chooser_dialog_new (_("xlog - select a log"), |
fileselection = gtk_file_chooser_dialog_new (_("xlog - open log"), |
60 |
GTK_WINDOW(mainwindow), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, |
GTK_WINDOW(mainwindow), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, |
61 |
GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); |
GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); |
|
|
|
|
/* optionmenu for the file types to be opened */ |
|
|
hbox = gtk_hbox_new (FALSE, 55); |
|
|
label = gtk_label_new (_("Type of log:")); |
|
|
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); |
|
|
combobox = gtk_combo_box_new_text (); |
|
|
gtk_box_pack_start (GTK_BOX (hbox), combobox, FALSE, FALSE, 0); |
|
|
|
|
|
/* Keep entries in same order as enum log_file_type in logfile/logfile.h */ |
|
|
gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), "xlog"); |
|
|
gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), "twlog"); |
|
|
gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), "adif"); |
|
|
gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), "cabrillo"); |
|
|
gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), "editest"); |
|
|
gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), "trlog"); |
|
|
gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), "EDI"); |
|
|
gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), "oh1aa"); |
|
|
gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0); |
|
|
gtk_widget_set_size_request (combobox, 105, -1); |
|
|
gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(fileselection), hbox); |
|
62 |
|
|
63 |
selection = g_strconcat (preferences.savedir, G_DIR_SEPARATOR_S, NULL); |
selection = g_strconcat (preferences.savedir, G_DIR_SEPARATOR_S, NULL); |
64 |
gtk_file_chooser_set_current_folder |
gtk_file_chooser_set_current_folder |
65 |
(GTK_FILE_CHOOSER (fileselection), selection); |
(GTK_FILE_CHOOSER (fileselection), selection); |
66 |
g_free (selection); |
g_free (selection); |
67 |
|
|
68 |
/* preview widget */ |
filter = gtk_file_filter_new (); |
69 |
previewscrolledwindow = gtk_scrolled_window_new (NULL, NULL); |
gtk_file_filter_add_pattern (filter, "*.xlog"); |
70 |
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (previewscrolledwindow), |
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (fileselection), filter); |
|
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); |
|
|
preview = gtk_text_view_new (); |
|
|
gtk_text_view_set_editable (GTK_TEXT_VIEW(preview), FALSE); |
|
|
gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW(preview), FALSE); |
|
|
gtk_container_add (GTK_CONTAINER (previewscrolledwindow), preview); |
|
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(preview)); |
|
|
gtk_text_buffer_create_tag (buffer, "tiny", "size", 8 * PANGO_SCALE, NULL); |
|
|
gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (fileselection), |
|
|
previewscrolledwindow); |
|
|
gtk_widget_set_size_request (previewscrolledwindow, 0, -1); |
|
|
gtk_widget_show_all (previewscrolledwindow); |
|
|
g_signal_connect |
|
|
(fileselection, "update-preview", G_CALLBACK (cb), preview); |
|
71 |
|
|
72 |
gtk_widget_show_all (fileselection); |
gtk_widget_show_all (fileselection); |
73 |
response = gtk_dialog_run (GTK_DIALOG(fileselection)); |
response = gtk_dialog_run (GTK_DIALOG(fileselection)); |
86 |
|
|
87 |
sellog = gtk_file_chooser_get_filename |
sellog = gtk_file_chooser_get_filename |
88 |
(GTK_FILE_CHOOSER (fileselection)); |
(GTK_FILE_CHOOSER (fileselection)); |
|
filetype = gtk_combo_box_get_active (GTK_COMBO_BOX (combobox)); |
|
89 |
|
|
90 |
/* destroy the dialog now we have all the information */ |
/* destroy the dialog now we have all the information */ |
91 |
gtk_widget_destroy (fileselection); |
gtk_widget_destroy (fileselection); |
92 |
|
|
93 |
/* check by filename and if log exist jump to the page in the notebook */ |
/* check by filename and if log exist jump to the page in the notebook */ |
|
filen = find_logname (sellog); |
|
94 |
for (i = 0; i < g_list_length (logwindowlist); i++) |
for (i = 0; i < g_list_length (logwindowlist); i++) |
95 |
{ |
{ |
96 |
logwindow = g_list_nth_data (logwindowlist, i); |
logwindow = g_list_nth_data (logwindowlist, i); |
97 |
if (g_ascii_strcasecmp (filen, logwindow->filename) == 0) |
if (g_ascii_strcasecmp (sellog, logwindow->filename) == 0) |
98 |
{ |
{ |
99 |
gtk_notebook_set_current_page (GTK_NOTEBOOK(mainnotebook), i); |
gtk_notebook_set_current_page (GTK_NOTEBOOK(mainnotebook), i); |
100 |
set_qsoframe (logwindow); |
set_qsoframe (logwindow); |
108 |
if (!logexist) |
if (!logexist) |
109 |
{ |
{ |
110 |
state.qsos = 0; |
state.qsos = 0; |
111 |
lp = log_file_open (sellog, filetype); |
lp = log_file_open (sellog, TYPE_FLOG); |
112 |
if (lp) |
if (lp) |
113 |
{ |
{ |
114 |
logn = logname (g_path_get_basename (sellog)); |
logn = logname (g_path_get_basename (sellog)); |
118 |
log_file_qso_foreach (lp, fillin_list, logwindow); |
log_file_qso_foreach (lp, fillin_list, logwindow); |
119 |
log_file_close (lp); |
log_file_close (lp); |
120 |
g_free (logn); |
g_free (logn); |
121 |
lp->type = filetype; |
lp->type = TYPE_FLOG; |
122 |
if ((lp->type) == TYPE_FLOG) |
if ((lp->type) == TYPE_FLOG) |
123 |
{ |
{ |
124 |
if (preferences.backup == 1) |
if (preferences.backup == 1) |
131 |
backuplog (sellog, xlogbackupfile); |
backuplog (sellog, xlogbackupfile); |
132 |
g_free (xlogbackupfile); |
g_free (xlogbackupfile); |
133 |
} |
} |
134 |
logwindow->filename = g_strdup (filen); |
logwindow->filename = g_strdup (sellog); |
135 |
logwindowlist = g_list_append (logwindowlist, logwindow); |
logwindowlist = g_list_append (logwindowlist, logwindow); |
136 |
set_qsoframe (logwindow); |
set_qsoframe (logwindow); |
137 |
set_tabs_menu (); |
set_tabs_menu (); |
140 |
g_free (temp); |
g_free (temp); |
141 |
} |
} |
142 |
} |
} |
|
g_free (filen); |
|
143 |
g_free (sellog); |
g_free (sellog); |
144 |
} |
} |
145 |
else |
else |