40 |
extern GList *logwindowlist; |
extern GList *logwindowlist; |
41 |
|
|
42 |
#if WANT_HAMLIB |
#if WANT_HAMLIB |
43 |
extern GdkPixmap *pixmap; |
extern GdkPixmap *pixmap; |
44 |
#endif |
#endif |
45 |
|
|
46 |
/* catch keys for the main window, so we can have shortcuts */ |
/* catch keys for the main window, so we can have shortcuts */ |
47 |
gboolean on_mainwindow_key_press_event (GtkWidget *widget, GdkEventKey *event, |
gboolean |
48 |
gpointer user_data) |
on_mainwindow_key_press_event (GtkWidget * widget, GdkEventKey * event, |
49 |
|
gpointer user_data) |
50 |
{ |
{ |
51 |
GtkWidget *abutton, *ubutton, *dbutton, *menubar, *save, *clear, *search, |
GtkWidget *abutton, *ubutton, *dbutton, *menubar, *save, *clear, *search, |
52 |
*new, *clickall; |
*new, *clickall; |
53 |
GtkAdjustment *adj; |
GtkAdjustment *adj; |
54 |
GList *selection; |
GList *selection; |
55 |
gint current_row; |
gint current_row; |
56 |
logtype *logwindow; |
logtype *logwindow; |
57 |
|
|
58 |
|
|
59 |
switch (event->keyval) |
switch (event->keyval) |
60 |
{ |
{ |
61 |
case GDK_Control_L: /* did we push the control key ?*/ |
case GDK_Control_L: /* did we push the control key ? */ |
62 |
case GDK_Control_R: |
case GDK_Control_R: |
63 |
state.controlkey = TRUE; |
state.controlkey = TRUE; |
64 |
return TRUE; |
return TRUE; |
65 |
break; |
break; |
66 |
case GDK_a: /* control a = add a QSO */ |
case GDK_a: /* control a = add a QSO */ |
67 |
if (state.controlkey) |
if (state.controlkey) |
68 |
{ |
{ |
69 |
abutton = lookup_widget(mainwindow, "abutton"); |
abutton = lookup_widget (mainwindow, "abutton"); |
70 |
gtk_signal_emit_by_name(GTK_OBJECT(abutton),"clicked"); |
gtk_signal_emit_by_name (GTK_OBJECT (abutton), "clicked"); |
71 |
} |
} |
72 |
return TRUE; |
return TRUE; |
73 |
break; |
break; |
74 |
case GDK_u: /* control u = update a selected QSO */ |
case GDK_u: /* control u = update a selected QSO */ |
75 |
if (state.controlkey) |
if (state.controlkey) |
76 |
{ |
{ |
77 |
ubutton = lookup_widget(mainwindow, "ubutton"); |
ubutton = lookup_widget (mainwindow, "ubutton"); |
78 |
gtk_signal_emit_by_name(GTK_OBJECT(ubutton),"clicked"); |
gtk_signal_emit_by_name (GTK_OBJECT (ubutton), "clicked"); |
79 |
} |
} |
80 |
return TRUE; |
return TRUE; |
81 |
break; |
break; |
82 |
case GDK_d: /* control d = delete a selected QSO from the log */ |
case GDK_d: /* control d = delete a selected QSO from the log */ |
83 |
if (state.controlkey) |
if (state.controlkey) |
84 |
{ |
{ |
85 |
dbutton = lookup_widget(mainwindow, "dbutton"); |
dbutton = lookup_widget (mainwindow, "dbutton"); |
86 |
gtk_signal_emit_by_name(GTK_OBJECT(dbutton),"clicked"); |
gtk_signal_emit_by_name (GTK_OBJECT (dbutton), "clicked"); |
87 |
} |
} |
88 |
return TRUE; |
return TRUE; |
89 |
break; |
break; |
90 |
case GDK_s: /* control s = save log */ |
case GDK_s: /* control s = save log */ |
91 |
if (state.controlkey) |
if (state.controlkey) |
92 |
{ |
{ |
93 |
state.controlkey = FALSE; |
state.controlkey = FALSE; |
94 |
menubar = lookup_widget(mainwindow, "menubar"); |
menubar = lookup_widget (mainwindow, "menubar"); |
95 |
save = lookup_widget(menubar, "save"); |
save = lookup_widget (menubar, "save"); |
96 |
gtk_signal_emit_by_name(GTK_OBJECT(save),"activate"); |
gtk_signal_emit_by_name (GTK_OBJECT (save), "activate"); |
97 |
} |
} |
98 |
return TRUE; |
return TRUE; |
99 |
break; |
break; |
100 |
case GDK_y: /* control y = clear qso frame */ |
case GDK_y: /* control y = clear qso frame */ |
101 |
if (state.controlkey) |
if (state.controlkey) |
102 |
{ |
{ |
103 |
clear = lookup_widget(create_qsoframemenu(), "clearframe"); |
clear = lookup_widget (create_qsoframemenu (), "clearframe"); |
104 |
gtk_signal_emit_by_name(GTK_OBJECT(clear),"activate"); |
gtk_signal_emit_by_name (GTK_OBJECT (clear), "activate"); |
105 |
} |
} |
106 |
return TRUE; |
return TRUE; |
107 |
break; |
break; |
108 |
case GDK_k: /* control k = click all buttons */ |
case GDK_k: /* control k = click all buttons */ |
109 |
if (state.controlkey) |
if (state.controlkey) |
110 |
{ |
{ |
111 |
clickall = lookup_widget(create_qsoframemenu(), "clickall"); |
clickall = lookup_widget (create_qsoframemenu (), "clickall"); |
112 |
gtk_signal_emit_by_name(GTK_OBJECT(clickall),"activate"); |
gtk_signal_emit_by_name (GTK_OBJECT (clickall), "activate"); |
113 |
} |
} |
114 |
return TRUE; |
return TRUE; |
115 |
break; |
break; |
116 |
case GDK_f: /* control f = find QSO in the log */ |
case GDK_f: /* control f = find QSO in the log */ |
117 |
if (state.controlkey) |
if (state.controlkey) |
118 |
{ |
{ |
119 |
state.controlkey = FALSE; |
state.controlkey = FALSE; |
120 |
menubar = lookup_widget(mainwindow, "menubar"); |
menubar = lookup_widget (mainwindow, "menubar"); |
121 |
search = lookup_widget(menubar, "search"); |
search = lookup_widget (menubar, "search"); |
122 |
gtk_signal_emit_by_name(GTK_OBJECT(search),"activate"); |
gtk_signal_emit_by_name (GTK_OBJECT (search), "activate"); |
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_n: /* control n = new log */ |
|
|
if (state.controlkey) |
|
|
{ |
|
|
menubar = lookup_widget(mainwindow, "menubar"); |
|
|
new = lookup_widget(menubar, "new"); |
|
|
gtk_signal_emit_by_name(GTK_OBJECT(new),"activate"); |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_Page_Up: /* PgUp can scroll the log */ |
|
|
case GDK_KP_Page_Up: |
|
|
logwindow = g_list_nth_data(logwindowlist, |
|
|
gtk_notebook_get_current_page(GTK_NOTEBOOK(mainnotebook))); |
|
|
selection = GTK_CLIST(logwindow->clist)->selection; |
|
|
if (selection) gtk_clist_unselect_all(GTK_CLIST(logwindow->clist)); |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_Page_Down: /* PgDn can scroll the log */ |
|
|
case GDK_KP_Page_Down: |
|
|
logwindow = g_list_nth_data(logwindowlist, |
|
|
gtk_notebook_get_current_page(GTK_NOTEBOOK(mainnotebook))); |
|
|
selection = GTK_CLIST(logwindow->clist)->selection; |
|
|
if (selection) gtk_clist_unselect_all(GTK_CLIST(logwindow->clist)); |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_Home: /* Go to beginning of the log */ |
|
|
case GDK_KP_Home: |
|
|
logwindow = g_list_nth_data(logwindowlist, |
|
|
gtk_notebook_get_current_page(GTK_NOTEBOOK(mainnotebook))); |
|
|
if(GTK_WIDGET_HAS_FOCUS(logwindow->clist)) |
|
|
{ |
|
|
selection = GTK_CLIST(logwindow->clist)->selection; |
|
|
if (selection) gtk_clist_unselect_all(GTK_CLIST(logwindow->clist)); |
|
|
adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW |
|
|
(logwindow->scrolledwindow)); |
|
|
gtk_adjustment_set_value(adj, adj->lower); |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_End: /* Go to end of the log */ |
|
|
case GDK_KP_End: |
|
|
logwindow = g_list_nth_data(logwindowlist, |
|
|
gtk_notebook_get_current_page(GTK_NOTEBOOK(mainnotebook))); |
|
|
if(GTK_WIDGET_HAS_FOCUS(logwindow->clist)) |
|
|
{ |
|
|
selection = GTK_CLIST(logwindow->clist)->selection; |
|
|
if (selection) gtk_clist_unselect_all(GTK_CLIST(logwindow->clist)); |
|
|
adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW |
|
|
(logwindow->scrolledwindow)); |
|
|
gtk_adjustment_set_value(adj, adj->upper - adj->page_size); |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_Up: /* Up Arrow, select previous QSO if clist has focus */ |
|
|
case GDK_KP_Up: |
|
|
logwindow = g_list_nth_data(logwindowlist, |
|
|
gtk_notebook_get_current_page(GTK_NOTEBOOK(mainnotebook))); |
|
|
if (GTK_WIDGET_HAS_FOCUS(logwindow->clist)) |
|
|
{ |
|
|
selection = GTK_CLIST(logwindow->clist)->selection; |
|
|
if (selection) |
|
|
{ |
|
|
current_row = (gint)selection->data; |
|
|
if (current_row > 0) |
|
|
{ |
|
|
if (gtk_clist_row_is_visible(GTK_CLIST(logwindow->clist), |
|
|
current_row - 1) != GTK_VISIBILITY_FULL) |
|
|
gtk_clist_moveto(GTK_CLIST(logwindow->clist), |
|
|
current_row - 1, -1, 0, 0); |
|
|
gtk_clist_select_row(GTK_CLIST(logwindow->clist), |
|
|
current_row - 1, 0); |
|
|
} |
|
|
} |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_Down: /* Down Arrow, select next QSO if clist has focus */ |
|
|
case GDK_KP_Down: |
|
|
logwindow = g_list_nth_data(logwindowlist, |
|
|
gtk_notebook_get_current_page(GTK_NOTEBOOK(mainnotebook))); |
|
|
if (GTK_WIDGET_HAS_FOCUS(logwindow->clist)) |
|
|
{ |
|
|
selection = GTK_CLIST(logwindow->clist)->selection; |
|
|
if (selection) |
|
|
{ |
|
|
current_row = (gint)selection->data; |
|
|
if (current_row < GTK_CLIST(logwindow->clist)->rows - 1) |
|
|
{ |
|
|
if (gtk_clist_row_is_visible(GTK_CLIST(logwindow->clist), |
|
|
current_row + 1) != GTK_VISIBILITY_FULL) |
|
|
gtk_clist_moveto(GTK_CLIST(logwindow->clist), |
|
|
current_row + 1, -1, 1, 0); |
|
|
gtk_clist_select_row(GTK_CLIST(logwindow->clist), |
|
|
current_row + 1, 0); |
|
|
} |
|
|
} |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
default: |
|
|
break; |
|
123 |
} |
} |
124 |
return FALSE; |
return TRUE; |
125 |
|
break; |
126 |
|
case GDK_n: /* control n = new log */ |
127 |
|
if (state.controlkey) |
128 |
|
{ |
129 |
|
menubar = lookup_widget (mainwindow, "menubar"); |
130 |
|
new = lookup_widget (menubar, "new"); |
131 |
|
gtk_signal_emit_by_name (GTK_OBJECT (new), "activate"); |
132 |
|
} |
133 |
|
return TRUE; |
134 |
|
break; |
135 |
|
case GDK_Page_Up: /* PgUp can scroll the log */ |
136 |
|
case GDK_KP_Page_Up: |
137 |
|
logwindow = g_list_nth_data (logwindowlist, |
138 |
|
gtk_notebook_get_current_page (GTK_NOTEBOOK |
139 |
|
(mainnotebook))); |
140 |
|
selection = GTK_CLIST (logwindow->clist)->selection; |
141 |
|
if (selection) |
142 |
|
gtk_clist_unselect_all (GTK_CLIST (logwindow->clist)); |
143 |
|
return TRUE; |
144 |
|
break; |
145 |
|
case GDK_Page_Down: /* PgDn can scroll the log */ |
146 |
|
case GDK_KP_Page_Down: |
147 |
|
logwindow = g_list_nth_data (logwindowlist, |
148 |
|
gtk_notebook_get_current_page (GTK_NOTEBOOK |
149 |
|
(mainnotebook))); |
150 |
|
selection = GTK_CLIST (logwindow->clist)->selection; |
151 |
|
if (selection) |
152 |
|
gtk_clist_unselect_all (GTK_CLIST (logwindow->clist)); |
153 |
|
return TRUE; |
154 |
|
break; |
155 |
|
case GDK_Home: /* Go to beginning of the log */ |
156 |
|
case GDK_KP_Home: |
157 |
|
logwindow = g_list_nth_data (logwindowlist, |
158 |
|
gtk_notebook_get_current_page (GTK_NOTEBOOK |
159 |
|
(mainnotebook))); |
160 |
|
if (GTK_WIDGET_HAS_FOCUS (logwindow->clist)) |
161 |
|
{ |
162 |
|
selection = GTK_CLIST (logwindow->clist)->selection; |
163 |
|
if (selection) |
164 |
|
gtk_clist_unselect_all (GTK_CLIST (logwindow->clist)); |
165 |
|
adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW |
166 |
|
(logwindow-> |
167 |
|
scrolledwindow)); |
168 |
|
gtk_adjustment_set_value (adj, adj->lower); |
169 |
|
} |
170 |
|
return TRUE; |
171 |
|
break; |
172 |
|
case GDK_End: /* Go to end of the log */ |
173 |
|
case GDK_KP_End: |
174 |
|
logwindow = g_list_nth_data (logwindowlist, |
175 |
|
gtk_notebook_get_current_page (GTK_NOTEBOOK |
176 |
|
(mainnotebook))); |
177 |
|
if (GTK_WIDGET_HAS_FOCUS (logwindow->clist)) |
178 |
|
{ |
179 |
|
selection = GTK_CLIST (logwindow->clist)->selection; |
180 |
|
if (selection) |
181 |
|
gtk_clist_unselect_all (GTK_CLIST (logwindow->clist)); |
182 |
|
adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW |
183 |
|
(logwindow-> |
184 |
|
scrolledwindow)); |
185 |
|
gtk_adjustment_set_value (adj, adj->upper - adj->page_size); |
186 |
|
} |
187 |
|
return TRUE; |
188 |
|
break; |
189 |
|
case GDK_Up: /* Up Arrow, select previous QSO if clist has focus */ |
190 |
|
case GDK_KP_Up: |
191 |
|
logwindow = g_list_nth_data (logwindowlist, |
192 |
|
gtk_notebook_get_current_page (GTK_NOTEBOOK |
193 |
|
(mainnotebook))); |
194 |
|
if (GTK_WIDGET_HAS_FOCUS (logwindow->clist)) |
195 |
|
{ |
196 |
|
selection = GTK_CLIST (logwindow->clist)->selection; |
197 |
|
if (selection) |
198 |
|
{ |
199 |
|
current_row = (gint) selection->data; |
200 |
|
if (current_row > 0) |
201 |
|
{ |
202 |
|
if (gtk_clist_row_is_visible (GTK_CLIST (logwindow->clist), |
203 |
|
current_row - 1) != |
204 |
|
GTK_VISIBILITY_FULL) |
205 |
|
gtk_clist_moveto (GTK_CLIST (logwindow->clist), |
206 |
|
current_row - 1, -1, 0, 0); |
207 |
|
gtk_clist_select_row (GTK_CLIST (logwindow->clist), |
208 |
|
current_row - 1, 0); |
209 |
|
} |
210 |
|
} |
211 |
|
} |
212 |
|
return TRUE; |
213 |
|
break; |
214 |
|
case GDK_Down: /* Down Arrow, select next QSO if clist has focus */ |
215 |
|
case GDK_KP_Down: |
216 |
|
logwindow = g_list_nth_data (logwindowlist, |
217 |
|
gtk_notebook_get_current_page (GTK_NOTEBOOK |
218 |
|
(mainnotebook))); |
219 |
|
if (GTK_WIDGET_HAS_FOCUS (logwindow->clist)) |
220 |
|
{ |
221 |
|
selection = GTK_CLIST (logwindow->clist)->selection; |
222 |
|
if (selection) |
223 |
|
{ |
224 |
|
current_row = (gint) selection->data; |
225 |
|
if (current_row < GTK_CLIST (logwindow->clist)->rows - 1) |
226 |
|
{ |
227 |
|
if (gtk_clist_row_is_visible (GTK_CLIST (logwindow->clist), |
228 |
|
current_row + 1) != |
229 |
|
GTK_VISIBILITY_FULL) |
230 |
|
gtk_clist_moveto (GTK_CLIST (logwindow->clist), |
231 |
|
current_row + 1, -1, 1, 0); |
232 |
|
gtk_clist_select_row (GTK_CLIST (logwindow->clist), |
233 |
|
current_row + 1, 0); |
234 |
|
} |
235 |
|
} |
236 |
|
} |
237 |
|
return TRUE; |
238 |
|
break; |
239 |
|
default: |
240 |
|
break; |
241 |
|
} |
242 |
|
return FALSE; |
243 |
} |
} |
244 |
|
|
245 |
/* did we release the control key ? */ |
/* did we release the control key ? */ |
246 |
gboolean on_mainwindow_key_release_event (GtkWidget *widget, GdkEventKey *event, |
gboolean |
247 |
gpointer user_data) |
on_mainwindow_key_release_event (GtkWidget * widget, GdkEventKey * event, |
248 |
|
gpointer user_data) |
249 |
{ |
{ |
250 |
switch (event->keyval) { |
switch (event->keyval) |
251 |
case GDK_Control_L: |
{ |
252 |
case GDK_Control_R: |
case GDK_Control_L: |
253 |
state.controlkey = FALSE; |
case GDK_Control_R: |
254 |
return TRUE; |
state.controlkey = FALSE; |
255 |
break; |
return TRUE; |
256 |
default: |
break; |
257 |
break; |
default: |
258 |
} |
break; |
259 |
return FALSE; |
} |
260 |
|
return FALSE; |
261 |
} |
} |
262 |
|
|
263 |
/* capture the delete event and display a warning in case the log |
/* capture the delete event and display a warning in case the log |
264 |
* has not been saved */ |
* has not been saved */ |
265 |
gboolean on_mainwindow_delete_event (GtkWidget *widget, GdkEvent *event, |
gboolean |
266 |
gpointer user_data) |
on_mainwindow_delete_event (GtkWidget * widget, GdkEvent * event, |
267 |
|
gpointer user_data) |
268 |
{ |
{ |
269 |
GtkWidget *savedialog; |
GtkWidget *savedialog; |
270 |
gint i; |
gint i; |
271 |
logtype *logwindow; |
logtype *logwindow; |
272 |
gboolean logchanged = FALSE; |
gboolean logchanged = FALSE; |
273 |
|
|
274 |
for (i = 0; i < g_list_length(logwindowlist); i++) |
for (i = 0; i < g_list_length (logwindowlist); i++) |
275 |
{ |
{ |
276 |
logwindow = g_list_nth_data(logwindowlist, i); |
logwindow = g_list_nth_data (logwindowlist, i); |
277 |
if (logwindow->logchanged) logchanged = TRUE; |
if (logwindow->logchanged) |
278 |
} |
logchanged = TRUE; |
279 |
|
} |
280 |
if (logchanged) { |
|
281 |
savedialog = create_savedialog(); |
if (logchanged) |
282 |
gtk_widget_set_sensitive(mainwindow, 0); |
{ |
283 |
gtk_widget_show(savedialog); |
savedialog = create_savedialog (); |
284 |
return(TRUE); |
gtk_widget_set_sensitive (mainwindow, 0); |
285 |
} |
gtk_widget_show (savedialog); |
286 |
else { |
return (TRUE); |
287 |
save_windowsize_and_cleanup(); |
} |
288 |
gtk_exit(0); |
else |
289 |
return(FALSE); |
{ |
290 |
} |
save_windowsize_and_cleanup (); |
291 |
|
gtk_exit (0); |
292 |
|
return (FALSE); |
293 |
|
} |
294 |
} |
} |
295 |
|
|
296 |
void on_mainnotebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, |
void |
297 |
gint page_num, gpointer user_data) |
on_mainnotebook_switch_page (GtkNotebook * notebook, GtkNotebookPage * page, |
298 |
|
gint page_num, gpointer user_data) |
299 |
{ |
{ |
300 |
logtype *logwindow = NULL; |
logtype *logwindow = NULL; |
301 |
|
|
302 |
while (page_num >= 0) |
while (page_num >= 0) |
303 |
{ |
{ |
304 |
logwindow = g_list_nth_data(logwindowlist, page_num); |
logwindow = g_list_nth_data (logwindowlist, page_num); |
305 |
if (logwindow) break; |
if (logwindow) |
306 |
page_num--; |
break; |
307 |
} |
page_num--; |
308 |
if (logwindow) set_qsoframe(logwindow); |
} |
309 |
|
if (logwindow) |
310 |
|
set_qsoframe (logwindow); |
311 |
} |
} |