/[xlog]/xlog/src/gui_openlogdialog.c
ViewVC logotype

Diff of /xlog/src/gui_openlogdialog.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.20 by pa4tu, Sun May 8 21:20:19 2005 UTC revision 1.21 by pa4tu, Sat May 14 09:42:31 2005 UTC
# Line 44  extern GtkWidget *mainwindow; Line 44  extern GtkWidget *mainwindow;
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));
# Line 181  on_menu_open_activate (GtkMenuItem * men Line 86  on_menu_open_activate (GtkMenuItem * men
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);
# Line 205  on_menu_open_activate (GtkMenuItem * men Line 108  on_menu_open_activate (GtkMenuItem * men
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));
# Line 215  on_menu_open_activate (GtkMenuItem * men Line 118  on_menu_open_activate (GtkMenuItem * men
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)
# Line 228  on_menu_open_activate (GtkMenuItem * men Line 131  on_menu_open_activate (GtkMenuItem * men
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 ();
# Line 237  on_menu_open_activate (GtkMenuItem * men Line 140  on_menu_open_activate (GtkMenuItem * men
140                                  g_free (temp);                                  g_free (temp);
141                          }                          }
142                  }                  }
                 g_free (filen);  
143                  g_free (sellog);                  g_free (sellog);
144          }          }
145          else          else

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.21

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26