22 |
*/ |
*/ |
23 |
|
|
24 |
#include <gtk/gtk.h> |
#include <gtk/gtk.h> |
|
#include <gdk/gdkkeysyms.h> |
|
25 |
|
|
26 |
#include "callbacks_mainwindow.h" |
#include "callbacks_mainwindow.h" |
27 |
#include "interface.h" |
#include "interface.h" |
38 |
extern statetype state; |
extern statetype state; |
39 |
extern GList *logwindowlist; |
extern GList *logwindowlist; |
40 |
|
|
|
#if WANT_HAMLIB |
|
|
extern GdkPixmap *pixmap; |
|
|
#endif |
|
|
|
|
|
/* catch keys for the main window, so we can have shortcuts */ |
|
|
gboolean |
|
|
on_mainwindow_key_press_event (GtkWidget * widget, GdkEventKey * event, |
|
|
gpointer user_data) |
|
|
{ |
|
|
GtkWidget *abutton, *ubutton, *dbutton, *menubar, *save, *clear, *search, |
|
|
*new, *clickall; |
|
|
GtkAdjustment *adj; |
|
|
GList *selection; |
|
|
gint current_row; |
|
|
logtype *logwindow; |
|
|
|
|
|
|
|
|
switch (event->keyval) |
|
|
{ |
|
|
case GDK_Control_L: /* did we push the control key ? */ |
|
|
case GDK_Control_R: |
|
|
state.controlkey = TRUE; |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_a: /* control a = add a QSO */ |
|
|
if (state.controlkey) |
|
|
{ |
|
|
abutton = lookup_widget (mainwindow, "abutton"); |
|
|
gtk_signal_emit_by_name (GTK_OBJECT (abutton), "clicked"); |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_u: /* control u = update a selected QSO */ |
|
|
if (state.controlkey) |
|
|
{ |
|
|
ubutton = lookup_widget (mainwindow, "ubutton"); |
|
|
gtk_signal_emit_by_name (GTK_OBJECT (ubutton), "clicked"); |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_d: /* control d = delete a selected QSO from the log */ |
|
|
if (state.controlkey) |
|
|
{ |
|
|
dbutton = lookup_widget (mainwindow, "dbutton"); |
|
|
gtk_signal_emit_by_name (GTK_OBJECT (dbutton), "clicked"); |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_s: /* control s = save log */ |
|
|
if (state.controlkey) |
|
|
{ |
|
|
state.controlkey = FALSE; |
|
|
menubar = lookup_widget (mainwindow, "menubar"); |
|
|
save = lookup_widget (menubar, "save"); |
|
|
gtk_signal_emit_by_name (GTK_OBJECT (save), "activate"); |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_y: /* control y = clear qso frame */ |
|
|
if (state.controlkey) |
|
|
{ |
|
|
clear = lookup_widget (create_qsoframemenu (), "clearframe"); |
|
|
gtk_signal_emit_by_name (GTK_OBJECT (clear), "activate"); |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_k: /* control k = click all buttons */ |
|
|
if (state.controlkey) |
|
|
{ |
|
|
clickall = lookup_widget (create_qsoframemenu (), "clickall"); |
|
|
gtk_signal_emit_by_name (GTK_OBJECT (clickall), "activate"); |
|
|
} |
|
|
return TRUE; |
|
|
break; |
|
|
case GDK_f: /* control f = find QSO in the log */ |
|
|
if (state.controlkey) |
|
|
{ |
|
|
state.controlkey = FALSE; |
|
|
menubar = lookup_widget (mainwindow, "menubar"); |
|
|
search = lookup_widget (menubar, "search"); |
|
|
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; |
|
|
} |
|
|
return FALSE; |
|
|
} |
|
|
|
|
|
/* did we release the control key ? */ |
|
|
gboolean |
|
|
on_mainwindow_key_release_event (GtkWidget * widget, GdkEventKey * event, |
|
|
gpointer user_data) |
|
|
{ |
|
|
switch (event->keyval) |
|
|
{ |
|
|
case GDK_Control_L: |
|
|
case GDK_Control_R: |
|
|
state.controlkey = FALSE; |
|
|
return TRUE; |
|
|
break; |
|
|
default: |
|
|
break; |
|
|
} |
|
|
return FALSE; |
|
|
} |
|
|
|
|
41 |
/* capture the delete event and display a warning in case the log |
/* capture the delete event and display a warning in case the log |
42 |
* has not been saved */ |
* has not been saved */ |
43 |
gboolean |
gboolean |
66 |
else |
else |
67 |
{ |
{ |
68 |
save_windowsize_and_cleanup (); |
save_windowsize_and_cleanup (); |
69 |
gtk_exit (0); |
gtk_main_quit (); |
70 |
return (FALSE); |
return (FALSE); |
71 |
} |
} |
72 |
} |
} |