aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Fisher <steve@stephen-fisher.com>2009-07-20 06:21:35 +0000
committerStephen Fisher <steve@stephen-fisher.com>2009-07-20 06:21:35 +0000
commitedc8ae64f1b53aa87783cf067a7a7472d937f3ee (patch)
treecd4ac89962b19320a37704b37feb2ca2d9e15699
parent96be1a38dacd9dc24539251a01931b3dcb2167eb (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.c13
-rw-r--r--file.c7
-rw-r--r--gtk/menus.c2
-rw-r--r--gtk/new_packet_list.c40
-rw-r--r--ui_util.h1
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
diff --git a/file.c b/file.c
index 71ac4d1ba9..efa596bf23 100644
--- a/file.c
+++ b/file.c
@@ -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 */
diff --git a/ui_util.h b/ui_util.h
index 87d4c80152..5a7d6d2629 100644
--- a/ui_util.h
+++ b/ui_util.h
@@ -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);