diff options
author | Stephen Fisher <steve@stephen-fisher.com> | 2009-07-20 06:21:35 +0000 |
---|---|---|
committer | Stephen Fisher <steve@stephen-fisher.com> | 2009-07-20 06:21:35 +0000 |
commit | edc8ae64f1b53aa87783cf067a7a7472d937f3ee (patch) | |
tree | cd4ac89962b19320a37704b37feb2ca2d9e15699 | |
parent | 96be1a38dacd9dc24539251a01931b3dcb2167eb (diff) |
Introduce packet list coloring for the NEW_PACKET_LIST. One caveat: when
enabling/disabling the coloring of the packet list from the menus, the user
has to drag the mouse cursor over each displayed row to take away/add the
coloring. Dragging the scroll bar up or down will also take care of this as
only the displayed rows are colored.
svn path=/trunk/; revision=29142
-rw-r--r-- | color_filters.c | 13 | ||||
-rw-r--r-- | file.c | 7 | ||||
-rw-r--r-- | gtk/menus.c | 2 | ||||
-rw-r--r-- | gtk/new_packet_list.c | 40 | ||||
-rw-r--r-- | ui_util.h | 1 |
5 files changed, 53 insertions, 10 deletions
diff --git a/color_filters.c b/color_filters.c index 4076e22203..25761a7388 100644 --- a/color_filters.c +++ b/color_filters.c @@ -408,7 +408,11 @@ tmp_color_filters_used(void) void color_filters_enable(gboolean enable) { +#ifdef NEW_PACKET_LIST + new_packet_list_enable_color(enable); +#else filters_enabled = enable; +#endif } @@ -431,10 +435,11 @@ color_filters_prime_edt(epan_dissect_t *edt) g_slist_foreach(color_filter_list, prime_edt, edt); } -#ifndef NEW_PACKET_LIST -/* Colorize a single packet of the packet list */ +/* Colorize a single packet of the packet list (old packet list) + * (row is only _U_ for the NEW_PACKET_LIST case + * Return the color_t for later use (new packet list) */ color_filter_t * -color_filters_colorize_packet(gint row, epan_dissect_t *edt) +color_filters_colorize_packet(gint row _U_, epan_dissect_t *edt) { GSList *curr; color_filter_t *colorf; @@ -450,6 +455,7 @@ color_filters_colorize_packet(gint row, epan_dissect_t *edt) dfilter_apply_edt(colorf->c_colorfilter, edt)) { /* this is the filter to use, apply it to the packet list */ #ifndef NEW_PACKET_LIST + /* We'll do this in the column cell function instead. */ packet_list_set_colors(row, &(colorf->fg_color), &(colorf->bg_color)); #endif return colorf; @@ -460,7 +466,6 @@ color_filters_colorize_packet(gint row, epan_dissect_t *edt) return NULL; } -#endif /* NEW_PACKET_LIST */ /* read filters from the given file */ /* XXX - Would it make more sense to use GStrings here instead of reallocing @@ -1131,12 +1131,15 @@ add_packet_to_packet_list(frame_data *fdata, capture_file *cf, #endif #ifdef NEW_PACKET_LIST + /* This function returns the color_t that was applied to the packet (in + * the old packet list). Applying the color to the packet is only done + * in the following function when not using the new packet list. */ + fdata->color_filter = color_filters_colorize_packet(0, edt); + row = new_packet_list_append(cf->cinfo, fdata); #else row = packet_list_append(cf->cinfo.col_data, fdata); -#endif -#ifndef NEW_PACKET_LIST /* colorize packet: first apply color filters * then if packet is marked, use preferences to overwrite color * we do both to make sure that when a packet gets un-marked, the diff --git a/gtk/menus.c b/gtk/menus.c index d7817f7320..4ca981eb0c 100644 --- a/gtk/menus.c +++ b/gtk/menus.c @@ -2112,7 +2112,9 @@ menu_colorize_changed(gboolean packet_list_colorize) { if(packet_list_colorize != recent.packet_list_colorize) { recent.packet_list_colorize = packet_list_colorize; color_filters_enable(packet_list_colorize); +#ifndef NEW_PACKET_LIST cf_colorize_packets(&cfile); +#endif } } diff --git a/gtk/new_packet_list.c b/gtk/new_packet_list.c index 862f0392cc..a735486f6a 100644 --- a/gtk/new_packet_list.c +++ b/gtk/new_packet_list.c @@ -49,9 +49,14 @@ #include "gtk/recent.h" #include "gtk/keys.h" #include "gtk/menus.h" +#include "color.h" +#include "color_filters.h" +#include "gtk/color_utils.h" static PacketList *packetlist; +static gboolean enable_color; + static GtkWidget *create_view_and_model(void); static guint row_from_iter(GtkTreeIter *iter); static void new_packet_list_select_cb(GtkTreeView *tree_view, gpointer data _U_); @@ -125,13 +130,16 @@ create_view_and_model(void) gtk_tree_view_set_fixed_height_mode(GTK_TREE_VIEW(packetlist->view), TRUE); #endif + g_signal_connect(packetlist->view, "cursor-changed", G_CALLBACK(new_packet_list_select_cb), NULL); /* g_object_unref(packetlist); */ /* Destroy automatically with view for now */ /* XXX - Messes up freezing & thawing */ renderer = gtk_cell_renderer_text_new(); - g_object_set(renderer, "ypad", 0, "font-desc", user_font_get_regular(), + g_object_set(renderer, + "ypad", 0, + "font-desc", user_font_get_regular(), NULL); for(i = 0; i < cfile.cinfo.num_cols; i++) { @@ -141,7 +149,6 @@ create_view_and_model(void) show_cell_data_func, GINT_TO_POINTER(i), NULL); - gtk_tree_view_column_add_attribute(col, renderer, "text",i); gtk_tree_view_column_set_title(col, cfile.cinfo.col_title[i]); gtk_tree_view_column_set_sort_column_id(col, i); gtk_tree_view_column_set_resizable(col, TRUE); @@ -244,13 +251,38 @@ static void show_cell_data_func(GtkTreeViewColumn *col _U_, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { + guint row = row_from_iter(iter); + guint col_num = GPOINTER_TO_INT(data); + frame_data *fdata = new_packet_list_get_row_data(row); + color_filter_t *color_filter = fdata->color_filter; + color_t fg_color_t = color_filter->fg_color; + color_t bg_color_t = color_filter->bg_color; + GdkColor fg_gdk; + GdkColor bg_gdk; gchar *cell_text; - gtk_tree_model_get(model, iter, GPOINTER_TO_INT(data), &cell_text, -1); + gtk_tree_model_get(model, iter, + col_num, &cell_text, + -1); - g_object_set(renderer, "text", cell_text, NULL); + color_t_to_gdkcolor(&fg_gdk, &fg_color_t); + color_t_to_gdkcolor(&bg_gdk, &bg_color_t); + + g_object_set(renderer, + "text", cell_text, + "foreground-gdk", &fg_gdk, + "foreground-set", enable_color, + "background-gdk", &bg_gdk, + "background-set", enable_color, + NULL); g_free(cell_text); } +void +new_packet_list_enable_color(gboolean enable) +{ + enable_color = enable; +} + #endif /* NEW_PACKET_LIST */ @@ -61,6 +61,7 @@ void new_packet_list_next(void); void new_packet_list_prev(void); guint new_packet_list_append(column_info cinfo, frame_data *fdata); frame_data * new_packet_list_get_row_data(gint row); +void new_packet_list_enable_color(gboolean enable); #else /* packet list related functions */ void packet_list_clear(void); |