aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2009-11-19 18:22:26 +0000
committerStig Bjørlykke <stig@bjorlykke.org>2009-11-19 18:22:26 +0000
commit9a7d0994d8b26f57eeadcb0f8459548c5c6d689c (patch)
treed0ed64fa0af5f63928e12fffa51fb07e5a307047 /gtk
parent2d2a1ef1cfbd040b7ac7c99c42265bfd8c4156b7 (diff)
downloadwireshark-9a7d0994d8b26f57eeadcb0f8459548c5c6d689c.tar.gz
wireshark-9a7d0994d8b26f57eeadcb0f8459548c5c6d689c.tar.bz2
wireshark-9a7d0994d8b26f57eeadcb0f8459548c5c6d689c.zip
Add a custom column from the packet details popup menu.
This fixes bug 4246. svn path=/trunk/; revision=31020
Diffstat (limited to 'gtk')
-rw-r--r--gtk/main.c14
-rw-r--r--gtk/main.h7
-rw-r--r--gtk/menus.c17
-rw-r--r--gtk/prefs_column.c22
-rw-r--r--gtk/prefs_column.h9
5 files changed, 61 insertions, 8 deletions
diff --git a/gtk/main.c b/gtk/main.c
index 7629de5c47..0e503a7cce 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -154,6 +154,7 @@
#include "gtk/capture_dlg.h"
#include "gtk/capture_if_dlg.h"
#include "gtk/tap_dfilter_dlg.h"
+#include "gtk/prefs_column.h"
#ifdef HAVE_LIBPCAP
#include "../image/wsicon16.xpm"
@@ -797,6 +798,19 @@ void expand_all_cb(GtkWidget *widget _U_, gpointer data _U_) {
expand_all_tree(cfile.edt->tree, tree_view);
}
+void apply_as_custom_column_cb (GtkWidget *widget _U_, gpointer data _U_)
+{
+ if (cfile.finfo_selected) {
+ column_prefs_add_custom(COL_CUSTOM, cfile.finfo_selected->hfinfo->name,
+ cfile.finfo_selected->hfinfo->abbrev);
+#ifndef NEW_PACKET_LIST
+ /* Recreate the packet list according to new preferences */
+ packet_list_recreate ();
+ cfile.cinfo.columns_changed = FALSE; /* Reset value */
+#endif
+ }
+}
+
void expand_tree_cb(GtkWidget *widget _U_, gpointer data _U_) {
GtkTreePath *path;
diff --git a/gtk/main.h b/gtk/main.h
index 25409682d3..5d9417d74a 100644
--- a/gtk/main.h
+++ b/gtk/main.h
@@ -241,6 +241,13 @@ extern void expand_tree_cb(GtkWidget *widget, gpointer data);
*/
extern void expand_all_cb(GtkWidget *widget, gpointer data);
+/** User requested "Apply as a custom column" by menu.
+ *
+ * @param widget parent widget (unused)
+ * @param data unused
+ */
+extern void apply_as_custom_column_cb(GtkWidget *widget, gpointer data);
+
/** User requested "Collapse All" by menu.
*
* @param widget parent widget (unused)
diff --git a/gtk/menus.c b/gtk/menus.c
index 4c1870f2ec..8885691443 100644
--- a/gtk/menus.c
+++ b/gtk/menus.c
@@ -388,7 +388,7 @@ colorize_conversation_cb(GtkWidget * w _U_, gpointer data _U_, int action)
if( (action>>8) == 255 ) {
color_filters_reset_tmp();
#ifdef NEW_PACKET_LIST
- new_packet_list_colorize_packets();
+ new_packet_list_colorize_packets();
#else
cf_colorize_packets(&cfile);
#endif
@@ -678,6 +678,9 @@ static GtkItemFactoryEntry menu_items[] =
0, "<StockItem>", WIRESHARK_STOCK_DISPLAY_FILTER,},
{"/Analyze/Display Filter _Macros...", NULL, GTK_MENU_FUNC(macros_dialog_cb), 0, NULL, NULL,},
{"/Analyze/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+#ifndef NEW_PACKET_LIST
+ {"/Analyze/Apply as Column", NULL, GTK_MENU_FUNC(apply_as_custom_column_cb), 0, NULL, NULL},
+#endif
{"/Analyze/Appl_y as Filter", NULL, NULL, 0, "<Branch>", NULL,},
{"/Analyze/Apply as Filter/_Selected", NULL, GTK_MENU_FUNC(match_selected_ptree_cb),
MATCH_SELECTED_REPLACE|MATCH_SELECTED_APPLY_NOW, NULL, NULL,},
@@ -987,6 +990,12 @@ static GtkItemFactoryEntry tree_view_menu_items[] =
{"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+#ifndef NEW_PACKET_LIST
+ {"/Apply as Column", NULL, GTK_MENU_FUNC(apply_as_custom_column_cb), 0, NULL, NULL},
+
+ {"/<separator>", NULL, NULL, 0, "<Separator>", NULL,},
+#endif
+
{"/Apply as Filter", NULL, NULL, 0, "<Branch>", NULL,},
{"/Apply as Filter/_Selected", NULL, GTK_MENU_FUNC(match_selected_ptree_cb),
MATCH_SELECTED_REPLACE|MATCH_SELECTED_APPLY_NOW, NULL, NULL,},
@@ -3173,8 +3182,12 @@ set_menus_for_selected_tree_row(capture_file *cf)
TRUE);
set_menu_sensitivity(tree_view_menu_factory, "/Copy/As Filter",
proto_can_match_selected(cf->finfo_selected, cf->edt));
+ set_menu_sensitivity(main_menu_factory, "/Analyze/Apply as Column",
+ hfinfo->type != FT_NONE);
set_menu_sensitivity(main_menu_factory, "/Analyze/Apply as Filter",
proto_can_match_selected(cf->finfo_selected, cf->edt));
+ set_menu_sensitivity(tree_view_menu_factory, "/Apply as Column",
+ hfinfo->type != FT_NONE);
set_menu_sensitivity(tree_view_menu_factory, "/Apply as Filter",
proto_can_match_selected(cf->finfo_selected, cf->edt));
set_menu_sensitivity(main_menu_factory, "/Analyze/Prepare a Filter",
@@ -3215,6 +3228,8 @@ set_menus_for_selected_tree_row(capture_file *cf)
set_menu_sensitivity(main_menu_factory, "/Edit/Copy/Value", FALSE);
set_menu_sensitivity(main_menu_factory, "/Edit/Copy/As Filter", FALSE);
set_menu_sensitivity(tree_view_menu_factory, "/Copy", FALSE);
+ set_menu_sensitivity(main_menu_factory, "/Analyze/Apply as Column", FALSE);
+ set_menu_sensitivity(tree_view_menu_factory, "/Apply as Column", FALSE);
set_menu_sensitivity(main_menu_factory, "/Analyze/Apply as Filter", FALSE);
set_menu_sensitivity(tree_view_menu_factory, "/Apply as Filter", FALSE);
set_menu_sensitivity(main_menu_factory, "/Analyze/Prepare a Filter", FALSE);
diff --git a/gtk/prefs_column.c b/gtk/prefs_column.c
index 11c7da1cf6..b5e5c36609 100644
--- a/gtk/prefs_column.c
+++ b/gtk/prefs_column.c
@@ -259,11 +259,23 @@ column_prefs_show(GtkWidget *prefs_window) {
}
+void
+column_prefs_add_custom(gint fmt, const gchar *title, const gchar *custom_field)
+{
+ fmt_data *cfmt;
+
+ cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
+ cfmt->title = g_strdup(title);
+ cfmt->fmt = g_strdup(col_format_to_string(fmt));
+ cfmt->custom_field = g_strdup(custom_field);
+
+ prefs.col_list = g_list_append(prefs.col_list, cfmt);
+}
+
/* To do: add input checking to each of these callbacks */
static void
column_list_new_cb(GtkWidget *w _U_, gpointer data) {
- fmt_data *cfmt;
gint cur_fmt;
const gchar *title = "New Column";
GtkTreeView *column_l = GTK_TREE_VIEW(data);
@@ -272,12 +284,8 @@ column_list_new_cb(GtkWidget *w _U_, gpointer data) {
GtkTreePath *path;
GtkTreeViewColumn *title_column;
- cur_fmt = COL_NUMBER; /* Set the default new column type */
- cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
- cfmt->title = g_strdup(title);
- cfmt->fmt = g_strdup(col_format_to_string(cur_fmt));
- cfmt->custom_field = NULL;
- prefs.col_list = g_list_append(prefs.col_list, cfmt);
+ cur_fmt = COL_NUMBER; /* Set the default new column type */
+ column_prefs_add_custom (cur_fmt, title, NULL);
model = gtk_tree_view_get_model(column_l);
gtk_list_store_append(GTK_LIST_STORE(model), &iter);
diff --git a/gtk/prefs_column.h b/gtk/prefs_column.h
index 210809bb5a..e725d8ca0f 100644
--- a/gtk/prefs_column.h
+++ b/gtk/prefs_column.h
@@ -55,4 +55,13 @@ void column_prefs_apply(GtkWidget *widget);
*/
void column_prefs_destroy(GtkWidget *widget);
+/** Add a custom column.
+ *
+ * @param fmt column format
+ * @param title column title
+ * @param custom_field column custom field
+ */
+void column_prefs_add_custom(gint fmt, const gchar *title,
+ const gchar *custom_field);
+
#endif