aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2009-10-09 08:52:36 +0000
committerAnders Broman <anders.broman@ericsson.com>2009-10-09 08:52:36 +0000
commit4d52b3aa832c65b2641e71321dcd89b8ae427045 (patch)
tree58b6b98da79e784361c05d287c812fd20bfbf942 /gtk
parent4d2e653901ab7bb17c9ed3269a930569d8ada5eb (diff)
From Didier Gautheron:
- Display number with a space as thousand separator. - Move functions use both by conversations and hostlist in gui_utils.c, they may be useful for other taps too. svn path=/trunk/; revision=30416
Diffstat (limited to 'gtk')
-rw-r--r--gtk/conversations_table.c77
-rw-r--r--gtk/gui_utils.c66
-rw-r--r--gtk/gui_utils.h20
3 files changed, 114 insertions, 49 deletions
diff --git a/gtk/conversations_table.c b/gtk/conversations_table.c
index 361af8a740..2150b5c72f 100644
--- a/gtk/conversations_table.c
+++ b/gtk/conversations_table.c
@@ -1053,30 +1053,6 @@ draw_ct_table_addresses(conversations_table *ct)
}
static void
-switch_to_fixed_col(conversations_table *ct)
-{
- gint size;
- GtkTreeViewColumn *column;
- GList *columns;
-
- ct->fixed_col = TRUE;
- columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(ct->table));
- while(columns) {
- column = columns->data;
- size = gtk_tree_view_column_get_width (column);
- gtk_tree_view_column_set_sizing(column,GTK_TREE_VIEW_COLUMN_FIXED);
- if (size > gtk_tree_view_column_get_fixed_width(column))
- gtk_tree_view_column_set_fixed_width(column, size);
- columns = g_list_next(columns);
- }
- g_list_free(columns);
-
-#if GTK_CHECK_VERSION(2,6,0)
- gtk_tree_view_set_fixed_height_mode(ct->table, TRUE);
-#endif
-}
-
-static void
draw_ct_table_data(conversations_table *ct)
{
guint32 i;
@@ -1185,7 +1161,9 @@ draw_ct_table_data(conversations_table *ct)
* let it run in autosize a little (1000 is arbitrary)
* and then switch to fixed width.
*/
- switch_to_fixed_col(ct);
+ ct->fixed_col = TRUE;
+
+ switch_to_fixed_col(ct->table);
}
gtk_tree_view_set_model(GTK_TREE_VIEW(ct->table), GTK_TREE_MODEL(store));
@@ -1321,19 +1299,6 @@ copy_as_csv_cb(GtkWindow *copy_bt, gpointer data _U_)
g_string_free(csv.CSV_str, TRUE); /* Free the memory */
}
-static gint get_default_col_size(GtkWidget *view, const gchar *str)
-{
- PangoLayout *layout;
- gint col_width;
-
- layout = gtk_widget_create_pango_layout(view, str);
- pango_layout_get_pixel_size(layout,
- &col_width, /* width */
- NULL); /* height */
- g_object_unref(G_OBJECT(layout));
- return col_width;
-}
-
static gint default_col_size[N_COLUMNS];
static void
@@ -1344,8 +1309,8 @@ init_default_col_size(GtkWidget *view)
default_col_size[DST_ADR_COLUMN] = default_col_size[SRC_ADR_COLUMN];
default_col_size[SRC_PORT_COLUMN] = get_default_col_size(view, "000000");
default_col_size[DST_PORT_COLUMN] = default_col_size[SRC_PORT_COLUMN];
- default_col_size[PACKETS_COLUMN] = get_default_col_size(view, "00000000");
- default_col_size[BYTES_COLUMN] = get_default_col_size(view, "0000000000");
+ default_col_size[PACKETS_COLUMN] = get_default_col_size(view, "00 000 000");
+ default_col_size[BYTES_COLUMN] = get_default_col_size(view, "0 000 000 000");
default_col_size[PKT_AB_COLUMN] = default_col_size[PACKETS_COLUMN];
default_col_size[PKT_BA_COLUMN] = default_col_size[PACKETS_COLUMN];
default_col_size[BYTES_AB_COLUMN] = default_col_size[BYTES_COLUMN];
@@ -1441,15 +1406,11 @@ init_ct_table_page(conversations_table *conversations, GtkWidget *vbox, gboolean
for (i = 0; i < N_COLUMNS -1; i++) {
renderer = gtk_cell_renderer_text_new ();
g_object_set(renderer, "ypad", 0, NULL);
- if (i >= 4) {
- /* right align numbers */
- g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL);
- column = gtk_tree_view_column_new_with_attributes (conversations->default_titles[i], renderer, "text",
- i, NULL);
- if (i >= 10)
- gtk_tree_sortable_set_sort_func(sortable, i, ct_sort_func, GINT_TO_POINTER(i), NULL);
- }
- else {
+ switch(i) {
+ case 0: /* addresses and ports */
+ case 1:
+ case 2:
+ case 3:
column = gtk_tree_view_column_new_with_attributes (conversations->default_titles[i], renderer, "text",
i, NULL);
if(hide_ports && (i == 1 || i == 3)){
@@ -1457,6 +1418,24 @@ init_ct_table_page(conversations_table *conversations, GtkWidget *vbox, gboolean
gtk_tree_view_column_set_visible(column, FALSE);
}
gtk_tree_sortable_set_sort_func(sortable, i, ct_sort_func, GINT_TO_POINTER(i), NULL);
+ break;
+ case 4: /* counts */
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9: /* right align numbers */
+ g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL);
+ column = gtk_tree_view_column_new_with_attributes (conversations->default_titles[i], renderer, NULL);
+ gtk_tree_view_column_set_cell_data_func(column, renderer, u64_data_func, GINT_TO_POINTER(i), NULL);
+ break;
+ default: /* times and bps */
+ g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL);
+ column = gtk_tree_view_column_new_with_attributes (conversations->default_titles[i], renderer, "text",
+ i, NULL);
+
+ gtk_tree_sortable_set_sort_func(sortable, i, ct_sort_func, GINT_TO_POINTER(i), NULL);
+ break;
}
gtk_tree_view_column_set_sort_column_id(column, i);
gtk_tree_view_column_set_resizable(column, TRUE);
diff --git a/gtk/gui_utils.c b/gtk/gui_utils.c
index 49740f025d..901c6c9d2c 100644
--- a/gtk/gui_utils.c
+++ b/gtk/gui_utils.c
@@ -1137,6 +1137,44 @@ tree_view_key_pressed_cb(GtkWidget *tree, GdkEventKey *event, gpointer user_data
return FALSE;
}
+void
+switch_to_fixed_col(GtkTreeView *view)
+{
+ gint size;
+ GtkTreeViewColumn *column;
+ GList *columns;
+
+ columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(view));
+ while(columns) {
+ column = columns->data;
+ size = gtk_tree_view_column_get_width (column);
+ gtk_tree_view_column_set_sizing(column,GTK_TREE_VIEW_COLUMN_FIXED);
+ if (size > gtk_tree_view_column_get_fixed_width(column))
+ gtk_tree_view_column_set_fixed_width(column, size);
+ columns = g_list_next(columns);
+ }
+ g_list_free(columns);
+
+#if GTK_CHECK_VERSION(2,6,0)
+ gtk_tree_view_set_fixed_height_mode(view, TRUE);
+#endif
+}
+
+gint
+get_default_col_size(GtkWidget *view, const gchar *str)
+{
+ PangoLayout *layout;
+ gint col_width;
+
+ layout = gtk_widget_create_pango_layout(view, str);
+ pango_layout_get_pixel_size(layout,
+ &col_width, /* width */
+ NULL); /* height */
+ g_object_unref(G_OBJECT(layout));
+ return col_width;
+}
+
+
/*
* This function can be called from gtk_tree_view_column_set_cell_data_func()
* the user data must be the colum number.
@@ -1197,6 +1235,34 @@ present_as_hex_func (GtkTreeViewColumn *column _U_,
g_object_set(renderer, "text", buf, NULL);
}
+void
+u64_data_func (GtkTreeViewColumn *column _U_,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
+ {
+ guint64 val;
+ int i = 0;
+ gchar *bp;
+ gchar buf[35];
+
+ /* the col to get data from is in userdata */
+ gint col = GPOINTER_TO_INT(user_data);
+
+ gtk_tree_model_get(model, iter, col, &val, -1);
+
+ bp = &buf[34];
+ *bp = 0;
+ do {
+ *--bp = (gchar)(val % 10) +'0';
+ if (!(++i % 3)) {
+ *--bp = ' ';
+ }
+ } while ((val /= 10) != 0 && bp > buf);
+ g_object_set(renderer, "text", bp, NULL);
+ }
+
/*
* This function can be called from gtk_tree_view_column_set_cell_data_func()
* the user data must be the colum number.
diff --git a/gtk/gui_utils.h b/gtk/gui_utils.h
index 289118ca22..cc288ccb0f 100644
--- a/gtk/gui_utils.h
+++ b/gtk/gui_utils.h
@@ -326,6 +326,17 @@ void float_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkT
*/
void present_as_hex_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data);
+/** Renders an unsigned 64 bits integer with space as thousand separator, called from gtk_tree_view_column_set_cell_data_func()
+ * The user data must be the colum number.
+ * Present value as hexadecimal.
+ * @param column A GtkTreeColumn
+ * @param renderer The GtkCellRenderer that is being rendered by tree_column
+ * @param model The GtkTreeModel being rendered
+ * @param iter A GtkTreeIter of the current row rendered
+ * @param user_data must be the colum number to fetch the data from
+ */
+void u64_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data);
+
/** This function can be called from gtk_tree_view_column_set_cell_data_func()
* the user data must be the colum number.
* Present value as hexadecimal.
@@ -351,6 +362,15 @@ gint str_ptr_sort_func(GtkTreeModel *model,
GtkTreeIter *b,
gpointer user_data);
+/** Switch a GtkTReeView to fixed columns (speed optimization)
+ * @param view A GtkTreeView
+ */
+void switch_to_fixed_col(GtkTreeView *view);
+/** Return the size in pixels of a string displayed with the GtkWidget's font.
+ * @param view A GtkWidget
+ * @param str UTF8 string
+ */
+gint get_default_col_size(GtkWidget *view, const gchar *str);
#endif /* __GTKGUIUI_UTIL_H__ */