33 |
#if HAVE_DIRENT_H |
#if HAVE_DIRENT_H |
34 |
# include <dirent.h> |
# include <dirent.h> |
35 |
# define NAMLEN(dirent) strlen((dirent)->d_name) |
# define NAMLEN(dirent) strlen((dirent)->d_name) |
36 |
#else |
#else |
37 |
# define dirent direct |
# define dirent direct |
38 |
# define NAMLEN(dirent) (dirent)->d_namlen |
# define NAMLEN(dirent) (dirent)->d_namlen |
39 |
# if HAVE_SYS_NDIR_H |
# if HAVE_SYS_NDIR_H |
60 |
|
|
61 |
/* extracted name of the log from filename |
/* extracted name of the log from filename |
62 |
returned string should be free'd */ |
returned string should be free'd */ |
63 |
gchar *logname(gchar *filename) |
gchar * |
64 |
|
logname (gchar * filename) |
65 |
{ |
{ |
66 |
gchar *logname; |
gchar *logname; |
67 |
gchar **split = g_strsplit(filename, ".", 1); |
gchar **split = g_strsplit (filename, ".", 1); |
68 |
logname = g_strdup(split[0]); |
logname = g_strdup (split[0]); |
69 |
g_strfreev(split); |
g_strfreev (split); |
70 |
return(logname); |
return (logname); |
71 |
} |
} |
72 |
|
|
73 |
/* prepend qsos to the log */ |
/* prepend qsos to the log */ |
74 |
gint fillin_clist(LOGDB *handle, qso_t q[], gpointer arg) { |
gint |
75 |
logtype *logw = (logtype *)arg; |
fillin_clist (LOGDB * handle, qso_t q[], gpointer arg) |
76 |
gint newrow; |
{ |
77 |
|
logtype *logw = (logtype *) arg; |
78 |
state.qsos++; |
gint newrow; |
79 |
logw->qsos++; |
|
80 |
q[NR] = g_strdup_printf("%d", logw->qsos); |
state.qsos++; |
81 |
newrow = gtk_clist_prepend(GTK_CLIST(logw->clist), q); |
logw->qsos++; |
82 |
if (preferences.logcolor == 1) |
q[NR] = g_strdup_printf ("%d", logw->qsos); |
83 |
setcallstyle(logw->clist, newrow, preferences.themecolor, |
newrow = gtk_clist_prepend (GTK_CLIST (logw->clist), q); |
84 |
preferences.themefont); |
if (preferences.logcolor == 1) |
85 |
return 0; |
setcallstyle (logw->clist, newrow, preferences.themecolor, |
86 |
|
preferences.themefont); |
87 |
|
return 0; |
88 |
} |
} |
89 |
|
|
90 |
/* create a new struct for a log */ |
/* create a new struct for a log */ |
91 |
static logtype *new_logwindow(void) |
static logtype * |
92 |
|
new_logwindow (void) |
93 |
{ |
{ |
94 |
logtype *newlog; |
logtype *newlog; |
95 |
gint i; |
gint i; |
96 |
|
|
97 |
newlog = g_new0(struct logtype, 1); |
newlog = g_new0 (struct logtype, 1); |
98 |
newlog->scrolledwindow = NULL; |
newlog->scrolledwindow = NULL; |
99 |
newlog->clist = NULL; |
newlog->clist = NULL; |
100 |
newlog->label = NULL; |
newlog->label = NULL; |
101 |
newlog->logname = NULL; |
newlog->logname = NULL; |
102 |
newlog->logchanged = FALSE; |
newlog->logchanged = FALSE; |
103 |
newlog->qsos = 0; |
newlog->qsos = 0; |
104 |
newlog->columns = 0; |
newlog->columns = 0; |
105 |
for (i = 0; i < QSO_FIELDS; i++) |
for (i = 0; i < QSO_FIELDS; i++) |
106 |
newlog->logfields[i] = -1; |
newlog->logfields[i] = -1; |
107 |
return(newlog); |
return (newlog); |
108 |
} |
} |
109 |
|
|
110 |
/* open a log and return a struct */ |
/* open a log and return a struct */ |
111 |
logtype *openlog(LOGDB *lp, gchar *name, gint page) |
logtype * |
112 |
|
openlog (LOGDB * lp, gchar * name, gint page) |
113 |
{ |
{ |
114 |
logtype *logwindow; |
logtype *logwindow; |
115 |
gint i, j; |
gint i, j; |
116 |
GtkWidget *columnlabel; |
GtkWidget *columnlabel; |
117 |
gchar *logn; |
gchar *logn; |
118 |
|
|
119 |
logwindow = new_logwindow(); |
logwindow = new_logwindow (); |
120 |
logwindow->scrolledwindow = gtk_scrolled_window_new (NULL, NULL); |
logwindow->scrolledwindow = gtk_scrolled_window_new (NULL, NULL); |
121 |
gtk_widget_show(logwindow->scrolledwindow); |
gtk_widget_show (logwindow->scrolledwindow); |
122 |
gtk_container_add (GTK_CONTAINER (mainnotebook), logwindow->scrolledwindow); |
gtk_container_add (GTK_CONTAINER (mainnotebook), logwindow->scrolledwindow); |
123 |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(logwindow->scrolledwindow), |
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW |
124 |
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
(logwindow->scrolledwindow), |
125 |
logwindow->clist = gtk_clist_new(QSO_FIELDS); |
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
126 |
gtk_widget_show(logwindow->clist); |
logwindow->clist = gtk_clist_new (QSO_FIELDS); |
127 |
gtk_signal_connect (GTK_OBJECT(logwindow->clist), "select_row", |
gtk_widget_show (logwindow->clist); |
128 |
GTK_SIGNAL_FUNC (on_log_select_row), NULL); |
gtk_signal_connect (GTK_OBJECT (logwindow->clist), "select_row", |
129 |
gtk_container_add(GTK_CONTAINER(logwindow->scrolledwindow), logwindow->clist); |
GTK_SIGNAL_FUNC (on_log_select_row), NULL); |
130 |
|
gtk_container_add (GTK_CONTAINER (logwindow->scrolledwindow), |
131 |
logwindow->columns = lp->column_nr; |
logwindow->clist); |
132 |
for (j = 0; j < QSO_FIELDS; j++) |
|
133 |
|
logwindow->columns = lp->column_nr; |
134 |
|
for (j = 0; j < QSO_FIELDS; j++) |
135 |
|
{ |
136 |
|
gtk_clist_set_column_auto_resize (GTK_CLIST (logwindow->clist), j, |
137 |
|
TRUE); |
138 |
|
logwindow->logfields[j] = lp->column_fields[j]; |
139 |
|
} |
140 |
|
gtk_clist_column_titles_show (GTK_CLIST (logwindow->clist)); |
141 |
|
|
142 |
|
columnlabel = gtk_label_new ("NR"); |
143 |
|
gtk_clist_set_column_widget (GTK_CLIST (logwindow->clist), NR, columnlabel); |
144 |
|
gtk_clist_column_title_passive (GTK_CLIST (logwindow->clist), NR); |
145 |
|
|
146 |
|
/* see which fields are in the log and add a column label */ |
147 |
|
for (j = 1; j < QSO_FIELDS; j++) |
148 |
|
{ |
149 |
|
for (i = 0; i < lp->column_nr; i++) |
150 |
{ |
{ |
151 |
gtk_clist_set_column_auto_resize(GTK_CLIST(logwindow->clist), j, TRUE); |
if (j == lp->column_fields[i]) |
152 |
logwindow->logfields[j] = lp->column_fields[j]; |
break; |
|
} |
|
|
gtk_clist_column_titles_show (GTK_CLIST (logwindow->clist)); |
|
|
|
|
|
columnlabel = gtk_label_new("NR"); |
|
|
gtk_clist_set_column_widget(GTK_CLIST(logwindow->clist), NR, columnlabel); |
|
|
gtk_clist_column_title_passive(GTK_CLIST(logwindow->clist), NR); |
|
|
|
|
|
/* see which fields are in the log and add a column label */ |
|
|
for (j = 1; j < QSO_FIELDS; j++) |
|
|
{ |
|
|
for (i = 0; i < lp->column_nr; i++) |
|
|
{ |
|
|
if (j == lp->column_fields[i]) |
|
|
break; |
|
|
} |
|
|
if (j == U1) |
|
|
columnlabel = gtk_label_new(preferences.freefield1); |
|
|
else if (j == U2) |
|
|
columnlabel = gtk_label_new(preferences.freefield2); |
|
|
else |
|
|
columnlabel = gtk_label_new(strfield(j)); |
|
|
gtk_clist_set_column_widget(GTK_CLIST(logwindow->clist), j, columnlabel); |
|
|
gtk_clist_column_title_passive(GTK_CLIST(logwindow->clist), j); |
|
|
if (i == lp->column_nr) /* field not found, hide this column */ |
|
|
gtk_clist_set_column_visibility(GTK_CLIST(logwindow->clist), j, FALSE); |
|
153 |
} |
} |
154 |
|
if (j == U1) |
155 |
|
columnlabel = gtk_label_new (preferences.freefield1); |
156 |
|
else if (j == U2) |
157 |
|
columnlabel = gtk_label_new (preferences.freefield2); |
158 |
|
else |
159 |
|
columnlabel = gtk_label_new (strfield (j)); |
160 |
|
gtk_clist_set_column_widget (GTK_CLIST (logwindow->clist), j, |
161 |
|
columnlabel); |
162 |
|
gtk_clist_column_title_passive (GTK_CLIST (logwindow->clist), j); |
163 |
|
if (i == lp->column_nr) /* field not found, hide this column */ |
164 |
|
gtk_clist_set_column_visibility (GTK_CLIST (logwindow->clist), j, |
165 |
|
FALSE); |
166 |
|
} |
167 |
|
|
168 |
|
logn = logname (name); |
169 |
|
logwindow->label = gtk_label_new (logn); |
170 |
|
gtk_widget_show (logwindow->label); |
171 |
|
gtk_notebook_set_tab_label (GTK_NOTEBOOK (mainnotebook), |
172 |
|
gtk_notebook_get_nth_page (GTK_NOTEBOOK |
173 |
|
(mainnotebook), |
174 |
|
page), |
175 |
|
logwindow->label); |
176 |
|
gtk_misc_set_padding (GTK_MISC (logwindow->label), 10, 0); |
177 |
|
setlabelstyle (logwindow->label, preferences.themecolor, |
178 |
|
preferences.themefont); |
179 |
|
logwindow->logname = g_strdup (logn); |
180 |
|
|
181 |
logn = logname(name); |
g_free (logn); |
182 |
logwindow->label = gtk_label_new(logn); |
return (logwindow); |
|
gtk_widget_show(logwindow->label); |
|
|
gtk_notebook_set_tab_label(GTK_NOTEBOOK (mainnotebook), |
|
|
gtk_notebook_get_nth_page(GTK_NOTEBOOK (mainnotebook), page), logwindow->label); |
|
|
gtk_misc_set_padding(GTK_MISC(logwindow->label), 10, 0); |
|
|
setlabelstyle(logwindow->label, preferences.themecolor, preferences.themefont); |
|
|
logwindow->logname = g_strdup(logn); |
|
|
|
|
|
g_free(logn); |
|
|
return(logwindow); |
|
183 |
} |
} |
184 |
|
|
185 |
/* saving of the log */ |
/* saving of the log */ |
186 |
void savelog(gpointer arg, gchar *logfile, gint type) |
void |
187 |
|
savelog (gpointer arg, gchar * logfile, gint type) |
188 |
{ |
{ |
189 |
LOGDB *lp; |
LOGDB *lp; |
190 |
gint i, j; |
gint i, j; |
191 |
GtkWidget *widget; |
GtkWidget *widget; |
192 |
gchar *label, **item, *tmpu1, *tmpu2; |
gchar *label, **item, *tmpu1, *tmpu2; |
193 |
gint fields[QSO_FIELDS], widths[QSO_FIELDS]; |
gint fields[QSO_FIELDS], widths[QSO_FIELDS]; |
194 |
logtype *logw = (logtype *)arg; |
logtype *logw = (logtype *) arg; |
195 |
FILE *ifp, *ofp; |
FILE *ifp, *ofp; |
196 |
gchar buf[1024]; |
gchar buf[1024]; |
197 |
|
|
198 |
|
|
199 |
gtk_clist_freeze(GTK_CLIST(logw->clist)); |
gtk_clist_freeze (GTK_CLIST (logw->clist)); |
200 |
item = g_new0(gchar *, QSO_FIELDS); |
item = g_new0 (gchar *, QSO_FIELDS); |
201 |
|
|
202 |
/* how many columns do we have and what are the labels, skip first field */ |
/* how many columns do we have and what are the labels, skip first field */ |
203 |
/* ----> unknown fields have a fixed label */ |
/* ----> unknown fields have a fixed label */ |
204 |
for (i = 0; i < logw->columns; i++) |
for (i = 0; i < logw->columns; i++) |
205 |
|
{ |
206 |
|
widget = |
207 |
|
gtk_clist_get_column_widget (GTK_CLIST (logw->clist), |
208 |
|
logw->logfields[i]); |
209 |
|
gtk_label_get (GTK_LABEL (widget), &label); |
210 |
|
if (logw->logfields[i] == U1) |
211 |
|
fields[i] = U1; |
212 |
|
else if (logw->logfields[i] == U2) |
213 |
|
fields[i] = U2; |
214 |
|
else |
215 |
|
fields[i] = parse_field_name (label); |
216 |
|
widths[i] = parse_field_width (fields[i]); |
217 |
|
} |
218 |
|
|
219 |
|
if (type == TYPE_ADIF) |
220 |
|
lp = |
221 |
|
log_file_create ("/tmp/xlog.adi", type, logw->columns, fields, widths); |
222 |
|
else |
223 |
|
lp = log_file_create (logfile, type, logw->columns, fields, widths); |
224 |
|
|
225 |
|
if (lp) |
226 |
|
{ |
227 |
|
for (i = GTK_CLIST (logw->clist)->rows - 1; i >= 0; i--) |
228 |
{ |
{ |
229 |
widget = gtk_clist_get_column_widget(GTK_CLIST(logw->clist), logw->logfields[i]); |
for (j = 0; j < logw->columns; j++) |
230 |
gtk_label_get(GTK_LABEL(widget), &label); |
gtk_clist_get_text (GTK_CLIST (logw->clist), i, |
231 |
if (logw->logfields[i] == U1) |
logw->logfields[j], &item[fields[j]]); |
232 |
fields[i] = U1; |
log_file_qso_append (lp, item); |
|
else if (logw->logfields[i] == U2) |
|
|
fields[i] = U2; |
|
|
else |
|
|
fields[i] = parse_field_name(label); |
|
|
widths[i] = parse_field_width(fields[i]); |
|
233 |
} |
} |
234 |
|
log_file_close (lp); |
235 |
if (type == TYPE_ADIF) |
if (type == TYPE_ADIF) /* search and replace U1 and U2 when using ADIF */ |
|
lp = log_file_create("/tmp/xlog.adi", type, logw->columns, fields, widths); |
|
|
else |
|
|
lp = log_file_create(logfile, type, logw->columns, fields, widths); |
|
|
|
|
|
if (lp) |
|
236 |
{ |
{ |
237 |
for (i = GTK_CLIST(logw->clist)->rows - 1 ; i >= 0 ; i--) |
ifp = fopen ("/tmp/xlog.adi", "r"); |
238 |
{ |
ofp = fopen (logfile, "w"); |
239 |
for (j = 0; j < logw->columns; j++) |
if (ifp && ofp) |
240 |
gtk_clist_get_text(GTK_CLIST(logw->clist), i, logw->logfields[j], &item[fields[j]]); |
{ |
241 |
log_file_qso_append(lp, item); |
while (fgets (buf, 1024, ifp)) |
|
} |
|
|
log_file_close(lp); |
|
|
if (type == TYPE_ADIF) /* search and replace U1 and U2 when using ADIF */ |
|
242 |
{ |
{ |
243 |
ifp = fopen("/tmp/xlog.adi", "r"); |
tmpu1 = strreplace (buf, "U1", preferences.freefield1); |
244 |
ofp = fopen(logfile, "w"); |
tmpu2 = strreplace (tmpu1, "U2", preferences.freefield2); |
245 |
if (ifp && ofp) |
fputs (tmpu2, ofp); |
|
{ |
|
|
while (fgets(buf, 1024, ifp)) |
|
|
{ |
|
|
tmpu1 = strreplace(buf, "U1", preferences.freefield1); |
|
|
tmpu2 = strreplace(tmpu1, "U2", preferences.freefield2); |
|
|
fputs(tmpu2, ofp); |
|
|
} |
|
|
fclose(ifp); |
|
|
fclose(ofp); |
|
|
} |
|
246 |
} |
} |
247 |
|
fclose (ifp); |
248 |
|
fclose (ofp); |
249 |
|
} |
250 |
} |
} |
251 |
else |
} |
252 |
{ |
else |
253 |
update_statusbar(_("Creation of logfile failed")); |
{ |
254 |
} |
update_statusbar (_("Creation of logfile failed")); |
255 |
gtk_clist_thaw(GTK_CLIST(logw->clist)); |
} |
256 |
g_free(item); |
gtk_clist_thaw (GTK_CLIST (logw->clist)); |
257 |
|
g_free (item); |
258 |
} |
} |
259 |
|
|
260 |
|
|
261 |
/* look for logs in dir */ |
/* look for logs in dir */ |
262 |
GString *getlogs(gchar *path, gint filetype) |
GString * |
263 |
|
getlogs (gchar * path, gint filetype) |
264 |
{ |
{ |
265 |
DIR *directory; |
DIR *directory; |
266 |
struct dirent *dirEntry; |
struct dirent *dirEntry; |
267 |
gchar *filen; |
gchar *filen; |
268 |
GString *logs = g_string_new(""); |
GString *logs = g_string_new (""); |
269 |
|
|
270 |
directory = opendir(path); |
directory = opendir (path); |
271 |
while (NULL != (dirEntry = readdir(directory))) |
while (NULL != (dirEntry = readdir (directory))) |
272 |
|
{ |
273 |
|
filen = g_strdup (dirEntry->d_name); |
274 |
|
if (dirEntry->d_type == DT_REG) /* only regular files */ |
275 |
{ |
{ |
276 |
filen = g_strdup(dirEntry->d_name); |
if (filetype == 0) /* type xlog */ |
277 |
if (dirEntry->d_type == DT_REG) /* only regular files */ |
{ |
278 |
|
g_strreverse (filen); |
279 |
|
if (g_strncasecmp (filen, "golx.", 5) == 0) |
280 |
{ |
{ |
281 |
if (filetype == 0) /* type xlog */ |
g_string_append (logs, dirEntry->d_name); |
282 |
{ |
g_string_append_c (logs, '\n'); |
|
g_strreverse(filen); |
|
|
if (g_strncasecmp(filen, "golx.", 5) == 0) |
|
|
{ |
|
|
g_string_append(logs, dirEntry->d_name); |
|
|
g_string_append_c(logs, '\n'); |
|
|
} |
|
283 |
} |
} |
284 |
else /* other types */ |
} |
285 |
|
else /* other types */ |
286 |
|
{ |
287 |
|
if ((g_strcasecmp (filen, "..") != 0) |
288 |
|
&& (g_strcasecmp (filen, ".") != 0)) |
289 |
{ |
{ |
290 |
if ((g_strcasecmp(filen, "..") != 0) |
g_string_append (logs, dirEntry->d_name); |
291 |
&& (g_strcasecmp(filen, ".") != 0)) |
g_string_append_c (logs, '\n'); |
|
{ |
|
|
g_string_append(logs, dirEntry->d_name); |
|
|
g_string_append_c(logs, '\n'); |
|
|
} |
|
|
} |
|
292 |
} |
} |
293 |
|
} |
294 |
} |
} |
295 |
return (logs); |
} |
296 |
|
return (logs); |
297 |
} |
} |