diff options
author | Anders Broman <anders.broman@ericsson.com> | 2009-10-09 08:52:36 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2009-10-09 08:52:36 +0000 |
commit | 4d52b3aa832c65b2641e71321dcd89b8ae427045 (patch) | |
tree | 58b6b98da79e784361c05d287c812fd20bfbf942 /gtk | |
parent | 4d2e653901ab7bb17c9ed3269a930569d8ada5eb (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.c | 77 | ||||
-rw-r--r-- | gtk/gui_utils.c | 66 | ||||
-rw-r--r-- | gtk/gui_utils.h | 20 |
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__ */ |