diff options
author | Luis Ontanon <luis.ontanon@gmail.com> | 2005-02-21 03:06:41 +0000 |
---|---|---|
committer | Luis Ontanon <luis.ontanon@gmail.com> | 2005-02-21 03:06:41 +0000 |
commit | b4ffe0e024ecee55a36ba143f381618dd0a38761 (patch) | |
tree | 94be701940aeb1ec78fe2eba65a7366980725e55 /gtk | |
parent | 9ff6891a86e4d1489f6bdd0005a20b4e45379a58 (diff) | |
download | wireshark-b4ffe0e024ecee55a36ba143f381618dd0a38761.tar.gz |
From Alejandro Vaquero
Add support of mouse scroll wheel and directional keys
(Up, down, left, and right) in the Graph Analysis.
svn path=/trunk/; revision=13457
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/graph_analysis.c | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/gtk/graph_analysis.c b/gtk/graph_analysis.c index b9a45148ca..9cffe85729 100644 --- a/gtk/graph_analysis.c +++ b/gtk/graph_analysis.c @@ -38,6 +38,7 @@ /* in /gtk ... */ #include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> #include "gtkglobals.h" #include "dlg_utils.h" @@ -46,6 +47,8 @@ #include "compat_macros.h" #include "../color.h" +#include <string.h> + #ifdef HAVE_UNISTD_H #include <unistd.h> #endif @@ -647,6 +650,63 @@ static gint button_press_event(GtkWidget *widget, GdkEventButton *event _U_) } /****************************************************************************/ +static gint scroll_event(GtkWidget *widget, GdkEventButton *event _U_) +{ + graph_analysis_data_t *user_data; + + user_data=(graph_analysis_data_t *)OBJECT_GET_DATA(widget, "graph_analysis_data_t"); + + /* Up scroll */ + if (event->state == 0){ + if (user_data->dlg.first_item == 0) return TRUE; + user_data->dlg.first_item--; + + /* Down scroll */ + } else { + if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1 == user_data->num_items)) return TRUE; + user_data->dlg.first_item++; + } + dialog_graph_redraw(user_data); + + return TRUE; +} + +/****************************************************************************/ +static gint key_press_event(GtkWidget *widget, GdkEventKey *event _U_) +{ + graph_analysis_data_t *user_data; + + user_data=(graph_analysis_data_t *)OBJECT_GET_DATA(widget, "graph_analysis_data_t"); + + /* Up arrow */ + if (event->keyval == GDK_Up){ + if (user_data->dlg.selected_item == 0) return TRUE; + user_data->dlg.selected_item--; + if ( (user_data->dlg.selected_item<user_data->dlg.first_item) || (user_data->dlg.selected_item>user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size) ) + user_data->dlg.first_item = user_data->dlg.selected_item; + /* Down arrow */ + } else if (event->keyval == GDK_Down){ + if (user_data->dlg.selected_item == user_data->num_items-1) return TRUE; + user_data->dlg.selected_item++; + if ( (user_data->dlg.selected_item<user_data->dlg.first_item) || (user_data->dlg.selected_item>user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size) ) + user_data->dlg.first_item = (guint32)user_data->dlg.selected_item-(guint32)user_data->dlg.v_scrollbar_adjustment->page_size; + } else if (event->keyval == GDK_Left){ + if (user_data->dlg.first_node == 0) return TRUE; + user_data->dlg.first_node--; + } else if (event->keyval == GDK_Right){ + if ((user_data->dlg.first_node+user_data->dlg.h_scrollbar_adjustment->page_size+1 == user_data->num_nodes)) return TRUE; + user_data->dlg.first_node++; + } + + user_data->dlg.needs_redraw=TRUE; + dialog_graph_draw(user_data); + + cf_goto_frame(&cfile, user_data->dlg.items[user_data->dlg.selected_item-user_data->dlg.first_item].frame_num); + + return TRUE; +} + +/****************************************************************************/ static gint expose_event(GtkWidget *widget, GdkEventExpose *event) { graph_analysis_data_t *user_data; @@ -795,6 +855,9 @@ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box) user_data->dlg.draw_area=gtk_drawing_area_new(); + GTK_WIDGET_SET_FLAGS(user_data->dlg.draw_area, GTK_CAN_FOCUS); + gtk_widget_grab_focus(user_data->dlg.draw_area); + SIGNAL_CONNECT(user_data->dlg.draw_area, "destroy", quit, user_data); OBJECT_SET_DATA(user_data->dlg.draw_area, "graph_analysis_data_t", user_data); @@ -807,7 +870,9 @@ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box) gtk_widget_add_events (user_data->dlg.draw_area, GDK_BUTTON_PRESS_MASK); SIGNAL_CONNECT(user_data->dlg.draw_area, "button_press_event", button_press_event, user_data); - + SIGNAL_CONNECT(user_data->dlg.draw_area, "scroll_event", scroll_event, user_data); + SIGNAL_CONNECT(user_data->dlg.draw_area, "key_press_event", key_press_event, user_data); + gtk_widget_show(user_data->dlg.draw_area); gtk_box_pack_start(GTK_BOX(vbox), user_data->dlg.draw_area, TRUE, TRUE, 0); |