Add some menu items related to the "frame mark" feature in
authorLaurent Deniel <laurent.deniel@free.fr>
Mon, 21 Aug 2000 19:36:19 +0000 (19:36 -0000)
committerLaurent Deniel <laurent.deniel@free.fr>
Mon, 21 Aug 2000 19:36:19 +0000 (19:36 -0000)
the Edit menu which allow you to:

- mark (or unmark) the currently selected frame
- mark all _displayed_ frames
- unmark all _displayed_ frames

Should I be more precise in the menu label ?
(e.g. "Mark All Displayed Frame" instead of "Mark All Frames"
  and "Mark Selected Frame" instead of "Mark Frame" ?)

svn path=/trunk/; revision=2325

AUTHORS
gtk/main.c
gtk/main.h
gtk/menu.c

diff --git a/AUTHORS b/AUTHORS
index 3a1348f995a85d305cffff9168cfc3b5fc047c99..c5fd09669eda025048a18adb0afe4030be2f4449 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -43,7 +43,8 @@ Laurent Deniel       <deniel@worldnet.fr> {
     GUI enhancements (about & help windows)
     Follow TCP stream for IPv6
     Protocol activation/deactivation (Edit:protocols)
-    "Properties..." menu item
+    Ability to mark the frames and associated features
+    "Protocol Properties..." menu item
     Miscellaneous enhancements and fixes
 }
 
index 6d55de6b5c229cd062e3e3fe0c56c6c69327cdff..62023d62fb0077a73639be94df4aa4a186e1dd06 100644 (file)
@@ -1,6 +1,6 @@
 /* main.c
  *
- * $Id: main.c,v 1.145 2000/08/21 15:45:33 deniel Exp $
+ * $Id: main.c,v 1.146 2000/08/21 19:36:09 deniel Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
@@ -458,6 +458,18 @@ packet_list_click_column_cb(GtkCList *clist, gint column, gpointer data)
   gtk_clist_sort(clist);
 }
 
+/* mark packets */
+static void 
+set_frame_mark(gboolean set, frame_data *frame, gint row) {
+  if (frame == NULL || row == -1) return;
+  frame->flags.marked = set;
+  /* XXX need user-configurable colors here */
+  gtk_clist_set_background(GTK_CLIST(packet_list), row,
+                          (set) ? &BLACK : &WHITE);
+  gtk_clist_set_foreground(GTK_CLIST(packet_list), row, 
+                          (set) ? &WHITE : &BLACK); 
+}
+
 static void
 packet_list_button_pressed_cb(GtkWidget *w, GdkEvent *event, gpointer data) {
   
@@ -470,19 +482,39 @@ packet_list_button_pressed_cb(GtkWidget *w, GdkEvent *event, gpointer data) {
   if (event->type == GDK_BUTTON_PRESS && event_button->button == 2 &&
       gtk_clist_get_selection_info(GTK_CLIST(w), event_button->x, event_button->y,
                                   &row, &column)) {
-    frame_data *fdata;
-    fdata = (frame_data *) gtk_clist_get_row_data(GTK_CLIST(w), row);
-    if (fdata != NULL) {
-      fdata->flags.marked = !fdata->flags.marked;
-      /* XXX need user-configurable colors here */
-      gtk_clist_set_background(GTK_CLIST(packet_list), row,
-                              (fdata->flags.marked) ?&BLACK : &WHITE);
-      gtk_clist_set_foreground(GTK_CLIST(packet_list), row, 
-                              (fdata->flags.marked) ?&WHITE : &BLACK);
-    } 
+    frame_data *fdata = (frame_data *) gtk_clist_get_row_data(GTK_CLIST(w), row);
+    set_frame_mark(!fdata->flags.marked, fdata, row);
   }
 }
 
+void mark_frame_cb(GtkWidget *w, gpointer data) {
+  if (cfile.current_frame) {
+    /* XXX hum, should better have a "cfile->current_row" here ... */
+    set_frame_mark(!cfile.current_frame->flags.marked,
+                  cfile.current_frame, 
+                  gtk_clist_find_row_from_data(GTK_CLIST(packet_list), 
+                                               cfile.current_frame));
+  }
+}
+
+static void mark_all_frames(gboolean set) {
+  frame_data *fdata;
+  if (cfile.plist == NULL) return;
+  for (fdata = cfile.plist; fdata != NULL; fdata = fdata->next) {
+    set_frame_mark(set,
+                  fdata,
+                  gtk_clist_find_row_from_data(GTK_CLIST(packet_list), fdata));    
+  }
+}
+
+void mark_all_frames_cb(GtkWidget *w, gpointer data) {
+  mark_all_frames(TRUE);
+}
+
+void unmark_all_frames_cb(GtkWidget *w, gpointer data) {
+  mark_all_frames(FALSE);
+}
+
 /* What to do when a list item is selected/unselected */
 static void
 packet_list_select_cb(GtkWidget *w, gint row, gint col, gpointer evt) {
index bbc3b7f4f7913dc1074cc92d408dc1c3ffe25aa4..107b318554772fc93dceab58ae1856dea61db3d1 100644 (file)
@@ -1,7 +1,7 @@
 /* main.h
  * Global defines, etc.
  *
- * $Id: main.h,v 1.17 2000/08/20 07:53:45 guy Exp $
+ * $Id: main.h,v 1.18 2000/08/21 19:36:10 deniel Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
@@ -58,5 +58,8 @@ void tools_plugins_cmd_cb(GtkWidget *, gpointer);
 void expand_all_cb(GtkWidget *, gpointer);
 void collapse_all_cb(GtkWidget *, gpointer);
 void resolve_name_cb(GtkWidget *, gpointer);
+void mark_frame_cb(GtkWidget *, gpointer);
+void mark_all_frames_cb(GtkWidget *w, gpointer);
+void unmark_all_frames_cb(GtkWidget *w, gpointer);
 
 #endif /* __MAIN_H__ */
index 2bb17075b1c01517b1e74f0d25baec95dab0fe44..6c8b6b337764cbcdd3ecc5dcc7e4099c2dd192a5 100644 (file)
@@ -1,7 +1,7 @@
 /* menu.c
  * Menu routines
  *
- * $Id: menu.c,v 1.41 2000/08/21 12:33:21 deniel Exp $
+ * $Id: menu.c,v 1.42 2000/08/21 19:36:08 deniel Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
@@ -111,6 +111,10 @@ static GtkItemFactoryEntry menu_items[] =
   {"/Edit/_Find Frame...", "<control>F", GTK_MENU_FUNC(find_frame_cb), 0, NULL},
   {"/Edit/_Go To Frame...", "<control>G", GTK_MENU_FUNC(goto_frame_cb), 0, NULL},
   {"/Edit/<separator>", NULL, NULL, 0, "<Separator>"},
+  {"/Edit/Mark Frame", "<control>M", GTK_MENU_FUNC(mark_frame_cb), 0, NULL},
+  {"/Edit/Mark _All Frames", NULL, GTK_MENU_FUNC(mark_all_frames_cb), 0, NULL},
+  {"/Edit/_Unmark All Frames", NULL, GTK_MENU_FUNC(unmark_all_frames_cb), 0, NULL},
+  {"/Edit/<separator>", NULL, NULL, 0, "<Separator>"},
   {"/Edit/_Preferences...", NULL, GTK_MENU_FUNC(prefs_cb), 0, NULL},
   {"/Edit/_Filters...", NULL, GTK_MENU_FUNC(filter_dialog_cb), 0, NULL},
   {"/Edit/P_rotocols...", NULL, GTK_MENU_FUNC(proto_cb), 0, NULL},
@@ -355,6 +359,9 @@ void
 set_menus_for_selected_packet(gboolean have_selected_packet)
 {
   set_menu_sensitivity("/File/Print Packet", have_selected_packet);
+  set_menu_sensitivity("/Edit/Mark Frame", have_selected_packet);
+  set_menu_sensitivity("/Edit/Mark All Frames", have_selected_packet);
+  set_menu_sensitivity("/Edit/Unmark All Frames", have_selected_packet);
   set_menu_sensitivity("/Display/Collapse All", have_selected_packet);
   set_menu_sensitivity("/Display/Expand All", have_selected_packet);
   set_menu_sensitivity("/Display/Show Packet In New Window", have_selected_packet);