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

Diff of /xlog/src/main.c

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

revision 1.9 by pa4tu, Thu Nov 21 19:36:43 2002 UTC revision 1.10 by pa4tu, Thu Nov 21 19:57:46 2002 UTC
# Line 70  extern preferencestype preferences; Line 70  extern preferencestype preferences;
70  extern remotetype remote;  extern remotetype remote;
71    
72  #if WANT_HAMLIB  #if WANT_HAMLIB
73          GList *riglist = NULL;  GList *riglist = NULL;
74          gint hamlibtimer = -1;  gint hamlibtimer = -1;
75          RIG *myrig;  RIG *myrig;
76  #endif  #endif
77    
78  /* command line options */  /* command line options */
79  static void parsecommandline(int argc, char *argv[])  static void
80    parsecommandline (int argc, char *argv[])
81  {  {
82          gint i;    gint i;
83          gchar *versionstr;    gchar *versionstr;
84    
85          for (i = 1; i < argc; i++)    for (i = 1; i < argc; i++)
86          {      {
87                  if (g_strncasecmp(argv[i], "--version", 9) == 0)        if (g_strncasecmp (argv[i], "--version", 9) == 0)
88                  {          {
89                          if (betaversion == 0) versionstr = g_strdup_printf(_("%s version %s\n"),            if (betaversion == 0)
90                                  g_basename(argv[0]), VERSION);              versionstr = g_strdup_printf (_("%s version %s\n"),
91                          else versionstr = g_strdup_printf(_("%s version %s beta %d\n"),                                            g_basename (argv[0]), VERSION);
92                                  g_basename(argv[0]), VERSION, betaversion);            else
93                          g_print(versionstr);              versionstr = g_strdup_printf (_("%s version %s beta %d\n"),
94                          g_free(versionstr);                                            g_basename (argv[0]), VERSION,
95                          exit(0);                                            betaversion);
96                  }            g_print (versionstr);
97                  else if (g_strncasecmp(argv[i], "--help", 6) == 0)            g_free (versionstr);
98                  {            exit (0);
99                          g_print(_("Usage: %s [option]...\n"), g_basename(argv[0]));          }
100                          g_print(_("     --version     Output version information and exit\n"));        else if (g_strncasecmp (argv[i], "--help", 6) == 0)
101                          g_print(_("     --help        Display this help and exit\n"));          {
102                          exit(0);            g_print (_("Usage: %s [option]...\n"), g_basename (argv[0]));
103                  }            g_print (_
104                  else                     ("     --version     Output version information and exit\n"));
105                  {            g_print (_("     --help        Display this help and exit\n"));
106                          g_print(_("Unknown argument, type %s --help for a list of options\n"), g_basename(argv[0]));            exit (0);
107                          exit(1);          }
108                  }        else
109            {
110              g_print (_
111                       ("Unknown argument, type %s --help for a list of options\n"),
112                       g_basename (argv[0]));
113              exit (1);
114          }          }
115        }
116  }  }
117    
118  /* see if we can create the ~/.xlog directory */  /* see if we can create the ~/.xlog directory */
119  static gboolean xlogdircheck(void) {  static gboolean
120          GString *packagedir = g_string_new("");  xlogdircheck (void)
121          struct stat statdir;  {
122          gchar *labeltext;    GString *packagedir = g_string_new ("");
123          GtkWidget *setupdialog, *setuplabel;    struct stat statdir;
124      gchar *labeltext;
125          g_string_sprintf(packagedir, "%s.", G_DIR_SEPARATOR_S);    GtkWidget *setupdialog, *setuplabel;
126          g_string_append(packagedir, PACKAGE);  
127          setupdialog = create_setupdialog();    g_string_sprintf (packagedir, "%s.", G_DIR_SEPARATOR_S);
128          setuplabel = lookup_widget(setupdialog, "setuplabel");    g_string_append (packagedir, PACKAGE);
129      setupdialog = create_setupdialog ();
130          xlogdir = g_strconcat(g_get_home_dir(), packagedir->str, NULL);    setuplabel = lookup_widget (setupdialog, "setuplabel");
131          if (stat(xlogdir, &statdir) == -1)  
132      xlogdir = g_strconcat (g_get_home_dir (), packagedir->str, NULL);
133      if (stat (xlogdir, &statdir) == -1)
134        {
135          if (mkdir (xlogdir, S_IRUSR | S_IWUSR | S_IXUSR) == -1)
136            g_error (_("Creating ~%s directory."), packagedir->str);
137          else
138          {          {
139                  if (mkdir(xlogdir, S_IRUSR | S_IWUSR | S_IXUSR) == -1)            labeltext = g_strdup_printf (_("Xlog has created %s,\n\
                         g_error(_("Creating ~%s directory."), packagedir->str);  
                 else  
                 {  
                         labeltext = g_strdup_printf(_("Xlog has created %s,\n\  
140  this is the directory where your log will be saved.\n\n\  this is the directory where your log will be saved.\n\n\
141  You can change the default path for your logs\n\  You can change the default path for your logs\n\
142  in the preferences dialog."), xlogdir);  in the preferences dialog."), xlogdir);
143                          gtk_label_set_text(GTK_LABEL(setuplabel), labeltext);            gtk_label_set_text (GTK_LABEL (setuplabel), labeltext);
144                          g_free(labeltext);            g_free (labeltext);
145                          g_string_free(packagedir, TRUE);            g_string_free (packagedir, TRUE);
146                          gtk_widget_show(setupdialog);            gtk_widget_show (setupdialog);
147                          return(FALSE);            return (FALSE);
148                  }          }
149          }      }
150          else if (!S_ISDIR(statdir.st_mode))    else if (!S_ISDIR (statdir.st_mode))
151                  g_error(_("~%s is not a directory."), packagedir->str);      g_error (_("~%s is not a directory."), packagedir->str);
152          g_string_free(packagedir, TRUE);    g_string_free (packagedir, TRUE);
153          return(TRUE);    return (TRUE);
154  }  }
155    
156  /* defaults for program state */  /* defaults for program state */
157  static void setdefaultstate(void) {  static void
158          gchar **versionsplit;  setdefaultstate (void)
159    {
160      gchar **versionsplit;
161    
162          state.minorversion = 0;    state.minorversion = 0;
163          state.majorversion = 0;    state.majorversion = 0;
164          state.qsos = 0;    state.qsos = 0;
165          state.countries = 0;    state.countries = 0;
166          state.prefixes = 0;    state.prefixes = 0;
167          /* the default ham lives in the gulf of guinea */    /* the default ham lives in the gulf of guinea */
168          state.mylocation = g_strdup("0.0N0.0E");    state.mylocation = g_strdup ("0.0N0.0E");
169          state.controlkey = FALSE;    state.controlkey = FALSE;
170          state.rigfrequency = 0;    state.rigfrequency = 0;
171          state.rigmode = 0;    state.rigmode = 0;
172          state.rigrst = g_strdup("0");    state.rigrst = g_strdup ("0");
173          state.rigpower = 0;    state.rigpower = 0;
174          state.scounter = 0;    state.scounter = 0;
175          state.hlcounter = 0;    state.hlcounter = 0;
176          state.tx = FALSE;    state.tx = FALSE;
177          state.statustimer = FALSE;    state.statustimer = FALSE;
178          state.shmid = -1;    state.shmid = -1;
179          state.logwindows = 0;    state.logwindows = 0;
180          versionsplit = g_strsplit(preferences.version, ".", 0);    versionsplit = g_strsplit (preferences.version, ".", 0);
181          state.majorversion = atoi(versionsplit[0]);    state.majorversion = atoi (versionsplit[0]);
182          state.minorversion = atoi(versionsplit[1]);    state.minorversion = atoi (versionsplit[1]);
183          g_strfreev(versionsplit);    g_strfreev (versionsplit);
184          state.mylocation = setlocation(preferences.latitude, preferences.NS,    state.mylocation = setlocation (preferences.latitude, preferences.NS,
185                  preferences.longitude, preferences.EW);                                    preferences.longitude, preferences.EW);
186          state.searchqso = 0;    state.searchqso = 0;
187          state.searchlog = 0;    state.searchlog = 0;
188          state.dupecheck = 0;    state.dupecheck = 0;
189          state.notdupecheckmode = FALSE;    state.notdupecheckmode = FALSE;
190          state.notdupecheckband = FALSE;    state.notdupecheckband = FALSE;
191  }  }
192    
193  /* the fun starts here */  /* the fun starts here */
194  gint main (int argc, char *argv[]) {  gint
195          GtkWidget *bandoptionmenu, *modeoptionmenu, *dateentry, *qsoframe,  main (int argc, char *argv[])
196                  *dxccframe, *bandentry, *modeentry, *clockpixmap, *clocklabel,  {
197                  *clockhandlebox, * clockhbox, *mhzlabel, *mhzbutton,    GtkWidget *bandoptionmenu, *modeoptionmenu, *dateentry, *qsoframe,
198                  *frequencypixmap, *frequencylabel, *frequencyhbox,      *dxccframe, *bandentry, *modeentry, *clockpixmap, *clocklabel,
199                  *frequencyhandlebox, *modelabel, *modebutton, *rstlabel,      *clockhandlebox, *clockhbox, *mhzlabel, *mhzbutton,
200                  *rstbutton, *smeterhandlebox, *smeterhbox, *smeterdrawingarea,      *frequencypixmap, *frequencylabel, *frequencyhbox,
201                  *smeterpixmap, *hpaned, *powerlabel, *powerbutton,      *frequencyhandlebox, *modelabel, *modebutton, *rstlabel,
202                  *locatorframe, *unknownlabel1, *unknownlabel2, *myrstentry,      *rstbutton, *smeterhandlebox, *smeterhbox, *smeterdrawingarea,
203                  *rstentry, *powerentry, *unknownentry1, *unknownentry2,      *smeterpixmap, *hpaned, *powerlabel, *powerbutton,
204                  *remarksentry, *powerhbox, *unknown1hbox, *unknown2hbox,      *locatorframe, *unknownlabel1, *unknownlabel2, *myrstentry,
205                  *remarksvbox, *b4clist;      *rstentry, *powerentry, *unknownentry1, *unknownentry2,
206          GdkPixmap *icon_pixmap;      *remarksentry, *powerhbox, *unknown1hbox, *unknown2hbox,
207          GdkBitmap *mask;      *remarksvbox, *b4clist;
208          gchar *xlogfile, *xlogbackupfile, *temp, *rcpath, *logstoload, **loglist = NULL;    GdkPixmap *icon_pixmap;
209          gint i, ctyresult;    GdkBitmap *mask;
210          gboolean showmainwindow = TRUE, logsfromprefs = FALSE;    gchar *xlogfile, *xlogbackupfile, *temp, *rcpath, *logstoload, **loglist =
211          GtkStyle *mainwindowstyle;      NULL;
212          GString *logs;    gint i, ctyresult;
213          logtype *logwindow;    gboolean showmainwindow = TRUE, logsfromprefs = FALSE;
214          LOGDB *lp;    GtkStyle *mainwindowstyle;
215      GString *logs;
216      logtype *logwindow;
217      LOGDB *lp;
218    
219  #if WANT_HAMLIB  #if WANT_HAMLIB
220          gint rigid, retcode;    gint rigid, retcode;
221  #endif  #endif
222    
223          parsecommandline(argc, argv);    parsecommandline (argc, argv);
           
         gtk_set_locale();  
         gtk_init(&argc, &argv);  
   
         add_pixmap_directory(PACKAGE_DATA_DIR G_DIR_SEPARATOR_S "pixmaps");  
         add_pixmap_directory(PACKAGE_SOURCE_DIR G_DIR_SEPARATOR_S "pixmaps");  
   
         rcpath = g_strdup_printf("%s%sthemes%s%src",  
                 PACKAGE_DATA_DIR, G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S, PACKAGE);  
         gtk_rc_parse(rcpath);  
         g_free(rcpath);  
   
         mainwindow = create_mainwindow();  
         showmainwindow = xlogdircheck();  
   
         loadpreferences();  
         loadhistory();  
         setdefaultstate();  
         colormap = gdk_colormap_get_system();  
   
         /* defaults for remote data */  
         remote.version = 0;  
         remote.nr = 0;  
         remote.program = g_strdup("unknown");  
   
         ctyresult = readctydata ();  
         if (ctyresult) g_warning("could not read cty.dat\n");  
   
         qso = g_new0(gchar *, 20);  
         for (i = 0; i < 20; i++)  
                 qso[i] = g_new0(gchar, 100);  
   
         /* logging should always be in GMT, shouldn't it? */  
         putenv("TZ=GMT");  
         tzset();  
   
         /* update the date field */  
         temp = getdate();  
         dateentry = lookup_widget(mainwindow, "dateentry");  
         gtk_entry_set_text(GTK_ENTRY(dateentry), temp);  
         gtk_widget_grab_focus(GTK_WIDGET(dateentry));  
           
         /* check for defaults */  
         if (g_strcasecmp(preferences.defaultrxrst, "?"))  
         {  
                 myrstentry = lookup_widget(mainwindow, "myrstentry");  
                 gtk_entry_set_text(GTK_ENTRY(myrstentry),  
                         preferences.defaultrxrst);  
         }  
         bandentry = lookup_widget(mainwindow, "bandentry");  
         modeentry = lookup_widget(mainwindow, "modeentry");  
         if (preferences.hamlib == 0)  
         {  
                 if (g_strcasecmp(preferences.defaultmhz, "?"))  
                         gtk_entry_set_text(GTK_ENTRY(bandentry),  
                                 preferences.defaultmhz);  
                 if (g_strcasecmp(preferences.defaultmode, "?"))  
                         gtk_entry_set_text(GTK_ENTRY(modeentry),  
                                 preferences.defaultmode);  
                 if (g_strcasecmp(preferences.defaulttxrst, "?"))  
                 {  
                         rstentry = lookup_widget(mainwindow, "rstentry");  
                         gtk_entry_set_text(GTK_ENTRY(rstentry),  
                                 preferences.defaulttxrst);  
                 }  
                 powerhbox = lookup_widget(mainwindow, "powerhbox");  
                 if (GTK_WIDGET_VISIBLE(powerhbox)  
                         && g_strcasecmp(preferences.defaultpower, "?"))  
                 {  
                         powerentry = lookup_widget(mainwindow, "powerentry");  
                         gtk_entry_set_text(GTK_ENTRY(powerentry),  
                                 preferences.defaultpower);  
                 }  
         }  
         unknown1hbox = lookup_widget(mainwindow, "unknown1hbox");  
         if (GTK_WIDGET_VISIBLE(unknown1hbox)  
                 && g_strcasecmp(preferences.defaultfreefield1, "?"))  
         {  
                 unknownentry1 = lookup_widget(mainwindow, "unknownentry1");  
                 gtk_entry_set_text(GTK_ENTRY(unknownentry1),  
                         preferences.defaultfreefield1);  
         }  
         unknown2hbox = lookup_widget(mainwindow, "unknown2hbox");  
         if (GTK_WIDGET_VISIBLE(unknown2hbox)  
                 && g_strcasecmp(preferences.defaultfreefield2, "?"))  
         {  
                 unknownentry2 = lookup_widget(mainwindow, "unknownentry2");  
                 gtk_entry_set_text(GTK_ENTRY(unknownentry2),  
                         preferences.defaultfreefield2);  
         }  
         remarksvbox = lookup_widget(mainwindow, "remarksvbox");  
         if (GTK_WIDGET_VISIBLE(remarksvbox)  
                 && g_strcasecmp(preferences.defaultremarks, "?"))  
         {  
                 remarksentry = lookup_widget(mainwindow, "remarksentry");  
                 gtk_entry_set_text(GTK_ENTRY(remarksentry),  
                         preferences.defaultremarks);  
         }  
224    
225          /* read the logs */    gtk_set_locale ();
226          mainnotebook = gtk_notebook_new();    gtk_init (&argc, &argv);
         gtk_widget_show (mainnotebook);  
         hpaned = lookup_widget(mainwindow, "hpaned");  
         gtk_paned_pack2(GTK_PANED(hpaned), mainnotebook, TRUE, FALSE);  
   
         /* check for multiple *.xlog */  
         if (g_strncasecmp(preferences.logstoload, "*", 1) == 0)  
                 logs = getlogs(preferences.savedir, 0); /* read all logs of type xlog */  
         else  
         { /* read logs from preferences.logstoload */  
                 logstoload = g_strdup(preferences.logstoload);  
                 g_strdelimit(logstoload, ",", '\n');  
                 logs = g_string_new(logstoload);  
                 g_free(logstoload);  
                 logsfromprefs = TRUE;  
         }  
   
         if ((logs->len) > 0) /* flexible logs */  
                 loglist = g_strsplit(logs->str, "\n", 0);  
         else /* old log type */  
         {  
                 loglist = g_malloc0(3*sizeof(gchar));  
                 loglist[0] = g_strdup("log");  
         }  
227    
228          for (i = 0;; i++)    add_pixmap_directory (PACKAGE_DATA_DIR G_DIR_SEPARATOR_S "pixmaps");
229          {    add_pixmap_directory (PACKAGE_SOURCE_DIR G_DIR_SEPARATOR_S "pixmaps");
                 if (!loglist || (loglist[i] == NULL)) break;  
                 if (logsfromprefs)  
                         xlogfile = g_strconcat(preferences.savedir, G_DIR_SEPARATOR_S, loglist[i], ".xlog", NULL);  
                 else  
                         xlogfile = g_strconcat(preferences.savedir, G_DIR_SEPARATOR_S, loglist[i], NULL);  
                 if ((logs->len) > 0)  
                         lp = log_file_open(xlogfile, TYPE_FLOG);  
                 else  
                         lp = log_file_open(xlogfile, TYPE_OLD_LOG);  
                 if (!lp) /* create a new log */  
                         lp = log_file_create("log.xlog", TYPE_FLOG, qso_field_nr, qso_fields, qso_widths);  
                 if (lp)  
                 {  
                         logwindow = openlog(lp, loglist[i], i);  
                         log_file_qso_foreach(lp, fillin_clist, logwindow);  
                         log_file_close(lp);  
                         logwindowlist = g_list_append(logwindowlist, logwindow);  
                         /* backup */  
                         xlogbackupfile = g_strconcat(xlogfile, ".backup", NULL);  
                         savelog(logwindow, xlogbackupfile, TYPE_FLOG);  
                         g_free(xlogbackupfile);  
                 }  
                 g_free(xlogfile);  
         }  
         state.logwindows = i;  
         g_strfreev(loglist);  
         g_string_free(logs, TRUE);  
   
         gtk_signal_connect(GTK_OBJECT(mainnotebook), "switch_page",  
                 GTK_SIGNAL_FUNC(on_mainnotebook_switch_page), NULL);  
   
         /* first page has focus */  
         logwindow = g_list_nth_data(logwindowlist, 0);  
         set_qsoframe(logwindow);  
   
         /* we have to set the labels of the unknown fields, wether they are visible or not */  
         unknownlabel1 = lookup_widget(mainwindow, "unknownlabel1");  
         gtk_label_set_text(GTK_LABEL(unknownlabel1), preferences.freefield1);  
         unknownlabel2 = lookup_widget(mainwindow, "unknownlabel2");  
         gtk_label_set_text(GTK_LABEL(unknownlabel2), preferences.freefield2);  
   
         /* update the statusbar with some information */  
         temp = g_strdup_printf(_("%d QSO's, %d countries and %d prefixes loaded"),  
                 state.qsos, state.countries, state.prefixes);  
         update_statusbar(temp);  
   
         bandsplit = g_strsplit(preferences.bands, ",", 0);  
         modesplit = g_strsplit(preferences.modes, ",", 0);  
         /* clean up modes and bands, don't want any spaces */  
         deletespaces(bandsplit);  
         deletespaces(modesplit);  
         bandoptionmenu = lookup_widget(mainwindow, "bandoptionmenu");  
         /* set the menu strings for the bandoption menu */  
         updateoptionmenu(bandoptionmenu, bandsplit);  
         modeoptionmenu = lookup_widget(mainwindow, "modeoptionmenu");  
         /* set the menu strings for the modeoption menu */  
         updateoptionmenu(modeoptionmenu, modesplit);  
   
         /* either hide the editbox or the optionmenu */  
         if (preferences.modeseditbox == 0) gtk_widget_hide(modeentry);  
         else gtk_widget_hide(modeoptionmenu);  
         if (preferences.bandseditbox == 0) gtk_widget_hide(bandentry);  
         else gtk_widget_hide(bandoptionmenu);  
   
         /* set clock appearance */  
         clockpixmap = lookup_widget(mainwindow, "clockpixmap");  
         clocklabel = lookup_widget(mainwindow, "clocklabel");  
         clockhbox = lookup_widget(mainwindow, "clockhbox");  
         clockhandlebox = lookup_widget(mainwindow, "clockhandlebox");  
         setlabelstyle(clocklabel, preferences.themecolor, preferences.themefont);  
         if (preferences.clock == 0) { /* no clock */  
                 gtk_widget_hide(clocklabel);  
                 gtk_widget_hide(clockpixmap);  
                 gtk_widget_hide(clockhbox);  
                 gtk_widget_hide(clockhandlebox);  
         }  
         else { /* clock on statusbar */  
                 gtk_widget_show(clocklabel);  
                 gtk_widget_show(clockpixmap);  
                 gtk_widget_show(clockhbox);  
                 gtk_widget_show(clockhandlebox);  
                 clocktimer = gtk_timeout_add(1000, (GtkFunction)updateclock, NULL);  
         }  
230    
231          /* set appearance of the QSO, DXCC and locator frame */    rcpath = g_strdup_printf ("%s%sthemes%s%src",
232          dxccframe = lookup_widget(mainwindow, "dxccframe");                              PACKAGE_DATA_DIR, G_DIR_SEPARATOR_S,
233          setframestyle(dxccframe, preferences.themecolor, preferences.themefont);                              G_DIR_SEPARATOR_S, PACKAGE);
234          qsoframe = lookup_widget(mainwindow, "qsoframe");    gtk_rc_parse (rcpath);
235          setframestyle(qsoframe, preferences.themecolor, preferences.themefont);    g_free (rcpath);
236          locatorframe = lookup_widget(mainwindow, "locatorframe");  
237          setframestyle(locatorframe, preferences.themecolor, preferences.themefont);    mainwindow = create_mainwindow ();
238      showmainwindow = xlogdircheck ();
239          /* set up the message queue for remote data */  
240          msgid = msgget((key_t)1238, 0666 | IPC_CREAT);    loadpreferences ();
241          if (msgid == -1) {    loadhistory ();
242                  temp = g_strdup_printf(_("Msgget failed: %s"), g_strerror(errno));    setdefaultstate ();
243                  update_statusbar(temp);    colormap = gdk_colormap_get_system ();
244          }  
245          else /* check for a message twice a second */    /* defaults for remote data */
246                  remotetimer = gtk_timeout_add(500, (GtkFunction)remote_entry, NULL);    remote.version = 0;
247      remote.nr = 0;
248          /* hamlib stuff */    remote.program = g_strdup ("unknown");
249          mhzlabel = lookup_widget(mainwindow, "mhzlabel");  
250          mhzbutton = lookup_widget(mainwindow, "mhzbutton");    ctyresult = readctydata ();
251          modelabel = lookup_widget(mainwindow, "modelabel");    if (ctyresult)
252          modebutton = lookup_widget(mainwindow, "modebutton");      g_warning ("could not read cty.dat\n");
253          rstlabel = lookup_widget(mainwindow, "rstlabel");  
254          rstbutton = lookup_widget(mainwindow, "rstbutton");    qso = g_new0 (gchar *, 20);
255          frequencypixmap = lookup_widget(mainwindow, "frequencypixmap");    for (i = 0; i < 20; i++)
256          frequencylabel = lookup_widget(mainwindow, "frequencylabel");      qso[i] = g_new0 (gchar, 100);
257          frequencyhbox = lookup_widget(mainwindow, "frequencyhbox");  
258          frequencyhandlebox = lookup_widget(mainwindow, "frequencyhandlebox");    /* logging should always be in GMT, shouldn't it? */
259          smeterhandlebox = lookup_widget(mainwindow, "smeterhandlebox");    putenv ("TZ=GMT");
260          smeterhbox = lookup_widget(mainwindow, "smeterhbox");    tzset ();
261          smeterdrawingarea = lookup_widget(mainwindow, "smeterdrawingarea");  
262          smeterpixmap = lookup_widget(mainwindow, "smeterpixmap");    /* update the date field */
263          powerlabel = lookup_widget(mainwindow, "powerlabel");    temp = getdate ();
264          powerbutton = lookup_widget(mainwindow, "powerbutton");    dateentry = lookup_widget (mainwindow, "dateentry");
265      gtk_entry_set_text (GTK_ENTRY (dateentry), temp);
266      gtk_widget_grab_focus (GTK_WIDGET (dateentry));
267    
268      /* check for defaults */
269      if (g_strcasecmp (preferences.defaultrxrst, "?"))
270        {
271          myrstentry = lookup_widget (mainwindow, "myrstentry");
272          gtk_entry_set_text (GTK_ENTRY (myrstentry), preferences.defaultrxrst);
273        }
274      bandentry = lookup_widget (mainwindow, "bandentry");
275      modeentry = lookup_widget (mainwindow, "modeentry");
276      if (preferences.hamlib == 0)
277        {
278          if (g_strcasecmp (preferences.defaultmhz, "?"))
279            gtk_entry_set_text (GTK_ENTRY (bandentry), preferences.defaultmhz);
280          if (g_strcasecmp (preferences.defaultmode, "?"))
281            gtk_entry_set_text (GTK_ENTRY (modeentry), preferences.defaultmode);
282          if (g_strcasecmp (preferences.defaulttxrst, "?"))
283            {
284              rstentry = lookup_widget (mainwindow, "rstentry");
285              gtk_entry_set_text (GTK_ENTRY (rstentry), preferences.defaulttxrst);
286            }
287          powerhbox = lookup_widget (mainwindow, "powerhbox");
288          if (GTK_WIDGET_VISIBLE (powerhbox)
289              && g_strcasecmp (preferences.defaultpower, "?"))
290            {
291              powerentry = lookup_widget (mainwindow, "powerentry");
292              gtk_entry_set_text (GTK_ENTRY (powerentry),
293                                  preferences.defaultpower);
294            }
295        }
296      unknown1hbox = lookup_widget (mainwindow, "unknown1hbox");
297      if (GTK_WIDGET_VISIBLE (unknown1hbox)
298          && g_strcasecmp (preferences.defaultfreefield1, "?"))
299        {
300          unknownentry1 = lookup_widget (mainwindow, "unknownentry1");
301          gtk_entry_set_text (GTK_ENTRY (unknownentry1),
302                              preferences.defaultfreefield1);
303        }
304      unknown2hbox = lookup_widget (mainwindow, "unknown2hbox");
305      if (GTK_WIDGET_VISIBLE (unknown2hbox)
306          && g_strcasecmp (preferences.defaultfreefield2, "?"))
307        {
308          unknownentry2 = lookup_widget (mainwindow, "unknownentry2");
309          gtk_entry_set_text (GTK_ENTRY (unknownentry2),
310                              preferences.defaultfreefield2);
311        }
312      remarksvbox = lookup_widget (mainwindow, "remarksvbox");
313      if (GTK_WIDGET_VISIBLE (remarksvbox)
314          && g_strcasecmp (preferences.defaultremarks, "?"))
315        {
316          remarksentry = lookup_widget (mainwindow, "remarksentry");
317          gtk_entry_set_text (GTK_ENTRY (remarksentry),
318                              preferences.defaultremarks);
319        }
320    
321      /* read the logs */
322      mainnotebook = gtk_notebook_new ();
323      gtk_widget_show (mainnotebook);
324      hpaned = lookup_widget (mainwindow, "hpaned");
325      gtk_paned_pack2 (GTK_PANED (hpaned), mainnotebook, TRUE, FALSE);
326    
327      /* check for multiple *.xlog */
328      if (g_strncasecmp (preferences.logstoload, "*", 1) == 0)
329        logs = getlogs (preferences.savedir, 0);    /* read all logs of type xlog */
330      else
331        {                           /* read logs from preferences.logstoload */
332          logstoload = g_strdup (preferences.logstoload);
333          g_strdelimit (logstoload, ",", '\n');
334          logs = g_string_new (logstoload);
335          g_free (logstoload);
336          logsfromprefs = TRUE;
337        }
338    
339      if ((logs->len) > 0)          /* flexible logs */
340        loglist = g_strsplit (logs->str, "\n", 0);
341      else                          /* old log type */
342        {
343          loglist = g_malloc0 (3 * sizeof (gchar));
344          loglist[0] = g_strdup ("log");
345        }
346    
347      for (i = 0;; i++)
348        {
349          if (!loglist || (loglist[i] == NULL))
350            break;
351          if (logsfromprefs)
352            xlogfile =
353              g_strconcat (preferences.savedir, G_DIR_SEPARATOR_S, loglist[i],
354                           ".xlog", NULL);
355          else
356            xlogfile =
357              g_strconcat (preferences.savedir, G_DIR_SEPARATOR_S, loglist[i],
358                           NULL);
359          if ((logs->len) > 0)
360            lp = log_file_open (xlogfile, TYPE_FLOG);
361          else
362            lp = log_file_open (xlogfile, TYPE_OLD_LOG);
363          if (!lp)                  /* create a new log */
364            lp =
365              log_file_create ("log.xlog", TYPE_FLOG, qso_field_nr, qso_fields,
366                               qso_widths);
367          if (lp)
368            {
369              logwindow = openlog (lp, loglist[i], i);
370              log_file_qso_foreach (lp, fillin_clist, logwindow);
371              log_file_close (lp);
372              logwindowlist = g_list_append (logwindowlist, logwindow);
373              /* backup */
374              xlogbackupfile = g_strconcat (xlogfile, ".backup", NULL);
375              savelog (logwindow, xlogbackupfile, TYPE_FLOG);
376              g_free (xlogbackupfile);
377            }
378          g_free (xlogfile);
379        }
380      state.logwindows = i;
381      g_strfreev (loglist);
382      g_string_free (logs, TRUE);
383    
384      gtk_signal_connect (GTK_OBJECT (mainnotebook), "switch_page",
385                          GTK_SIGNAL_FUNC (on_mainnotebook_switch_page), NULL);
386    
387      /* first page has focus */
388      logwindow = g_list_nth_data (logwindowlist, 0);
389      set_qsoframe (logwindow);
390    
391      /* we have to set the labels of the unknown fields, wether they are visible or not */
392      unknownlabel1 = lookup_widget (mainwindow, "unknownlabel1");
393      gtk_label_set_text (GTK_LABEL (unknownlabel1), preferences.freefield1);
394      unknownlabel2 = lookup_widget (mainwindow, "unknownlabel2");
395      gtk_label_set_text (GTK_LABEL (unknownlabel2), preferences.freefield2);
396    
397      /* update the statusbar with some information */
398      temp = g_strdup_printf (_("%d QSO's, %d countries and %d prefixes loaded"),
399                              state.qsos, state.countries, state.prefixes);
400      update_statusbar (temp);
401    
402      bandsplit = g_strsplit (preferences.bands, ",", 0);
403      modesplit = g_strsplit (preferences.modes, ",", 0);
404      /* clean up modes and bands, don't want any spaces */
405      deletespaces (bandsplit);
406      deletespaces (modesplit);
407      bandoptionmenu = lookup_widget (mainwindow, "bandoptionmenu");
408      /* set the menu strings for the bandoption menu */
409      updateoptionmenu (bandoptionmenu, bandsplit);
410      modeoptionmenu = lookup_widget (mainwindow, "modeoptionmenu");
411      /* set the menu strings for the modeoption menu */
412      updateoptionmenu (modeoptionmenu, modesplit);
413    
414      /* either hide the editbox or the optionmenu */
415      if (preferences.modeseditbox == 0)
416        gtk_widget_hide (modeentry);
417      else
418        gtk_widget_hide (modeoptionmenu);
419      if (preferences.bandseditbox == 0)
420        gtk_widget_hide (bandentry);
421      else
422        gtk_widget_hide (bandoptionmenu);
423    
424      /* set clock appearance */
425      clockpixmap = lookup_widget (mainwindow, "clockpixmap");
426      clocklabel = lookup_widget (mainwindow, "clocklabel");
427      clockhbox = lookup_widget (mainwindow, "clockhbox");
428      clockhandlebox = lookup_widget (mainwindow, "clockhandlebox");
429      setlabelstyle (clocklabel, preferences.themecolor, preferences.themefont);
430      if (preferences.clock == 0)
431        {                           /* no clock */
432          gtk_widget_hide (clocklabel);
433          gtk_widget_hide (clockpixmap);
434          gtk_widget_hide (clockhbox);
435          gtk_widget_hide (clockhandlebox);
436        }
437      else
438        {                           /* clock on statusbar */
439          gtk_widget_show (clocklabel);
440          gtk_widget_show (clockpixmap);
441          gtk_widget_show (clockhbox);
442          gtk_widget_show (clockhandlebox);
443          clocktimer = gtk_timeout_add (1000, (GtkFunction) updateclock, NULL);
444        }
445    
446      /* set appearance of the QSO, DXCC and locator frame */
447      dxccframe = lookup_widget (mainwindow, "dxccframe");
448      setframestyle (dxccframe, preferences.themecolor, preferences.themefont);
449      qsoframe = lookup_widget (mainwindow, "qsoframe");
450      setframestyle (qsoframe, preferences.themecolor, preferences.themefont);
451      locatorframe = lookup_widget (mainwindow, "locatorframe");
452      setframestyle (locatorframe, preferences.themecolor, preferences.themefont);
453    
454      /* set up the message queue for remote data */
455      msgid = msgget ((key_t) 1238, 0666 | IPC_CREAT);
456      if (msgid == -1)
457        {
458          temp = g_strdup_printf (_("Msgget failed: %s"), g_strerror (errno));
459          update_statusbar (temp);
460        }
461      else                          /* check for a message twice a second */
462        remotetimer = gtk_timeout_add (500, (GtkFunction) remote_entry, NULL);
463    
464      /* hamlib stuff */
465      mhzlabel = lookup_widget (mainwindow, "mhzlabel");
466      mhzbutton = lookup_widget (mainwindow, "mhzbutton");
467      modelabel = lookup_widget (mainwindow, "modelabel");
468      modebutton = lookup_widget (mainwindow, "modebutton");
469      rstlabel = lookup_widget (mainwindow, "rstlabel");
470      rstbutton = lookup_widget (mainwindow, "rstbutton");
471      frequencypixmap = lookup_widget (mainwindow, "frequencypixmap");
472      frequencylabel = lookup_widget (mainwindow, "frequencylabel");
473      frequencyhbox = lookup_widget (mainwindow, "frequencyhbox");
474      frequencyhandlebox = lookup_widget (mainwindow, "frequencyhandlebox");
475      smeterhandlebox = lookup_widget (mainwindow, "smeterhandlebox");
476      smeterhbox = lookup_widget (mainwindow, "smeterhbox");
477      smeterdrawingarea = lookup_widget (mainwindow, "smeterdrawingarea");
478      smeterpixmap = lookup_widget (mainwindow, "smeterpixmap");
479      powerlabel = lookup_widget (mainwindow, "powerlabel");
480      powerbutton = lookup_widget (mainwindow, "powerbutton");
481  #if WANT_HAMLIB  #if WANT_HAMLIB
482          /* need this to set popdown strings in prefs dialog */    /* need this to set popdown strings in prefs dialog */
483          rig_set_debug(RIG_DEBUG_ERR);    rig_set_debug (RIG_DEBUG_ERR);
484          riglist = riglist_get_list();    riglist = riglist_get_list ();
485    
486          setlabelstyle(frequencylabel, preferences.themecolor, preferences.themefont);    setlabelstyle (frequencylabel, preferences.themecolor,
487          /* clickable buttons and events for hamlib */                   preferences.themefont);
488          gtk_signal_connect(GTK_OBJECT(mhzbutton), "clicked",    /* clickable buttons and events for hamlib */
489                  GTK_SIGNAL_FUNC(on_mhzbutton_clicked), NULL);    gtk_signal_connect (GTK_OBJECT (mhzbutton), "clicked",
490          gtk_signal_connect(GTK_OBJECT(modebutton), "clicked",                        GTK_SIGNAL_FUNC (on_mhzbutton_clicked), NULL);
491                  GTK_SIGNAL_FUNC(on_modebutton_clicked), NULL);    gtk_signal_connect (GTK_OBJECT (modebutton), "clicked",
492          gtk_signal_connect(GTK_OBJECT(rstbutton), "clicked",                        GTK_SIGNAL_FUNC (on_modebutton_clicked), NULL);
493                  GTK_SIGNAL_FUNC(on_rstbutton_clicked), NULL);    gtk_signal_connect (GTK_OBJECT (rstbutton), "clicked",
494          gtk_signal_connect(GTK_OBJECT(powerbutton), "clicked",                        GTK_SIGNAL_FUNC (on_rstbutton_clicked), NULL);
495                  GTK_SIGNAL_FUNC(on_powerbutton_clicked), NULL);    gtk_signal_connect (GTK_OBJECT (powerbutton), "clicked",
496          gtk_signal_connect(GTK_OBJECT(smeterdrawingarea), "configure_event",                        GTK_SIGNAL_FUNC (on_powerbutton_clicked), NULL);
497                  GTK_SIGNAL_FUNC(on_smeterdrawingarea_configure_event), NULL);    gtk_signal_connect (GTK_OBJECT (smeterdrawingarea), "configure_event",
498          gtk_signal_connect(GTK_OBJECT(smeterdrawingarea), "expose_event",                        GTK_SIGNAL_FUNC (on_smeterdrawingarea_configure_event),
499                  GTK_SIGNAL_FUNC(on_smeterdrawingarea_expose_event), NULL);                        NULL);
500          gtk_signal_connect(GTK_OBJECT(mainwindow), "show",    gtk_signal_connect (GTK_OBJECT (smeterdrawingarea), "expose_event",
501                  GTK_SIGNAL_FUNC(on_mainwindow_show), NULL);                        GTK_SIGNAL_FUNC (on_smeterdrawingarea_expose_event),
502                          NULL);
503          /* init rig if hamlib is enabled and show/hide some widgets */    gtk_signal_connect (GTK_OBJECT (mainwindow), "show",
504          if (preferences.hamlib > 0)                        GTK_SIGNAL_FUNC (on_mainwindow_show), NULL);
505          {  
506                  rigid = get_rigid(preferences.radio);    /* init rig if hamlib is enabled and show/hide some widgets */
507                  myrig = rig_init(rigid);    if (preferences.hamlib > 0)
508                  strncpy(myrig->state.rigport.pathname, preferences.device, FILPATHLEN);      {
509                  retcode = rig_open(myrig);        rigid = get_rigid (preferences.radio);
510                  /* check if the rig was opened OK */        myrig = rig_init (rigid);
511                  if (retcode != RIG_OK)        strncpy (myrig->state.rigport.pathname, preferences.device, FILPATHLEN);
512                  {        retcode = rig_open (myrig);
513                          temp = g_strdup_printf (_("An error occured while opening port %s: %s"),        /* check if the rig was opened OK */
514                          myrig->state.rigport.pathname, rigerror(retcode));        if (retcode != RIG_OK)
515                          update_statusbar(temp);          {
516                  }            temp =
517                  else /* timeout for hamlib is 200ms, so have to give the timer a bigger value */              g_strdup_printf (_("An error occured while opening port %s: %s"),
518                          hamlibtimer = gtk_timeout_add(350, (GtkFunction)get_riginfo, NULL);                               myrig->state.rigport.pathname,
519          }                               rigerror (retcode));
520          sethamlibwidgets(preferences.hamlib);            update_statusbar (temp);
521            }
522          else                      /* timeout for hamlib is 200ms, so have to give the timer a bigger value */
523            hamlibtimer = gtk_timeout_add (350, (GtkFunction) get_riginfo, NULL);
524        }
525      sethamlibwidgets (preferences.hamlib);
526    
527  #else  #else
528          gtk_widget_show(mhzlabel);    gtk_widget_show (mhzlabel);
529          gtk_widget_show(modelabel);    gtk_widget_show (modelabel);
530          gtk_widget_show(rstlabel);    gtk_widget_show (rstlabel);
531          gtk_widget_hide(mhzbutton);    gtk_widget_hide (mhzbutton);
532          gtk_widget_hide(modebutton);    gtk_widget_hide (modebutton);
533          gtk_widget_hide(rstbutton);    gtk_widget_hide (rstbutton);
534          gtk_widget_hide(frequencypixmap);    gtk_widget_hide (frequencypixmap);
535          gtk_widget_hide(frequencyhbox);    gtk_widget_hide (frequencyhbox);
536          gtk_widget_hide(frequencyhandlebox);    gtk_widget_hide (frequencyhandlebox);
537          gtk_widget_hide(frequencylabel);    gtk_widget_hide (frequencylabel);
538          gtk_widget_hide(smeterhandlebox);    gtk_widget_hide (smeterhandlebox);
539          gtk_widget_hide(smeterhbox);    gtk_widget_hide (smeterhbox);
540          gtk_widget_hide(smeterdrawingarea);    gtk_widget_hide (smeterdrawingarea);
541          gtk_widget_hide(smeterpixmap);    gtk_widget_hide (smeterpixmap);
542  #endif  #endif
543    
544          if (preferences.autosave > 0)    if (preferences.autosave > 0)
545                  savetimer = gtk_timeout_add(preferences.autosave*60*1000,      savetimer = gtk_timeout_add (preferences.autosave * 60 * 1000,
546                          (GtkFunction)autosave, NULL);                                   (GtkFunction) autosave, NULL);
547    
548          /* set icon */    /* set icon */
549          gtk_widget_realize(mainwindow);    gtk_widget_realize (mainwindow);
550          mainwindowstyle = gtk_widget_get_style(mainwindow);    mainwindowstyle = gtk_widget_get_style (mainwindow);
551          icon_pixmap = gdk_pixmap_create_from_xpm_d(mainwindow->window, &mask,    icon_pixmap = gdk_pixmap_create_from_xpm_d (mainwindow->window, &mask,
552                   &mainwindowstyle->bg[GTK_STATE_NORMAL], (gchar **) &xlog_xpm);                                                &mainwindowstyle->
553          gdk_window_set_icon(mainwindow->window, NULL, icon_pixmap, mask);                                                bg[GTK_STATE_NORMAL],
554                                                  (gchar **) & xlog_xpm);
555          g_free(temp);    gdk_window_set_icon (mainwindow->window, NULL, icon_pixmap, mask);
556    
557          /* create wkd B4 dialog and set some options */    g_free (temp);
558          b4dialog = create_b4dialog();  
559          b4clist = lookup_widget(b4dialog, "b4clist");    /* create wkd B4 dialog and set some options */
560          gtk_clist_set_sort_column(GTK_CLIST(b4clist), 4);    b4dialog = create_b4dialog ();
561          gtk_clist_set_auto_sort(GTK_CLIST(b4clist), TRUE);    b4clist = lookup_widget (b4dialog, "b4clist");
562          gtk_clist_set_column_width (GTK_CLIST (b4clist), 0, 60);    gtk_clist_set_sort_column (GTK_CLIST (b4clist), 4);
563          gtk_clist_set_column_width (GTK_CLIST (b4clist), 1, 40);    gtk_clist_set_auto_sort (GTK_CLIST (b4clist), TRUE);
564          gtk_clist_set_column_width (GTK_CLIST (b4clist), 2, 100);    gtk_clist_set_column_width (GTK_CLIST (b4clist), 0, 60);
565          gtk_clist_set_column_width (GTK_CLIST (b4clist), 3, 40);    gtk_clist_set_column_width (GTK_CLIST (b4clist), 1, 40);
566          gtk_clist_set_column_width (GTK_CLIST (b4clist), 4, 100);    gtk_clist_set_column_width (GTK_CLIST (b4clist), 2, 100);
567          gtk_clist_set_column_width (GTK_CLIST (b4clist), 5, 80);    gtk_clist_set_column_width (GTK_CLIST (b4clist), 3, 40);
568          gtk_clist_set_column_width (GTK_CLIST (b4clist), 6, 60);    gtk_clist_set_column_width (GTK_CLIST (b4clist), 4, 100);
569      gtk_clist_set_column_width (GTK_CLIST (b4clist), 5, 80);
570          if (showmainwindow)    gtk_clist_set_column_width (GTK_CLIST (b4clist), 6, 60);
571          {  
572                  gtk_widget_show(mainwindow);    if (showmainwindow)
573                  /* position the main window */      {
574                  gdk_window_move_resize(mainwindow->window, preferences.x, preferences.y,        gtk_widget_show (mainwindow);
575                  preferences.width, preferences.height);        /* position the main window */
576          }        gdk_window_move_resize (mainwindow->window, preferences.x,
577                                  preferences.y, preferences.width,
578                                  preferences.height);
579        }
580    
581          gtk_main();    gtk_main ();
582          return 0;    return 0;
583  }  }

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

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