merge_all_tap_menus() has been moved to menus.c.
[obnox/wireshark/wip.git] / gtk / gui_stat_util.c
index 81418cb89a642748fdd7d52bf1293dcb4e742682..eabc6d28358b4793cf0ce78aeacdf1a359a86b37 100644 (file)
@@ -4,8 +4,8 @@
  *
  * $Id$
  *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
  * Copyright 1998 Gerald Combs
  *
  * This program is free software; you can redistribute it and/or
 #ifdef HAVE_SYS_TYPES_H
 # include <sys/types.h>
 #endif
+#include <string.h>
 
 #include <gtk/gtk.h>
-#include <string.h>
-#include "gui_stat_util.h"
-#include "compat_macros.h"
+
 #include "../simple_dialog.h"
 #include "../file.h"
-#include "../globals.h"
+
+#include "gtk/gui_stat_util.h"
+
 
 /* insert a string into a GTK_TABLE at column x and row y*/
 #if 0
@@ -71,14 +72,14 @@ add_table_entry(gtk_table *tab, const char *str, int x, int y)
 }
 #endif
 
-/* init a main windowfor stats, set title and display used filter in window */
+/* init a main window for stats, set title and display used filter in window */
 
 void
 init_main_stat_window(GtkWidget *window, GtkWidget *mainbox, const char *title, const char *filter)
 {
        GtkWidget *main_label;
        GtkWidget *filter_label;
-       char filter_string[256];
+       char *filter_string;
 
 
        gtk_window_set_title(GTK_WINDOW(window), title);
@@ -91,37 +92,66 @@ init_main_stat_window(GtkWidget *window, GtkWidget *mainbox, const char *title,
        gtk_box_pack_start(GTK_BOX(mainbox), main_label, FALSE, FALSE, 0);
        gtk_widget_show(main_label);
 
-       g_snprintf(filter_string,255,"Filter:%s",filter?filter:"");
+       filter_string = g_strdup_printf("Filter: %s", filter ? filter : "");
        filter_label=gtk_label_new(filter_string);
+       g_free(filter_string);
+       gtk_label_set_line_wrap(GTK_LABEL(filter_label), TRUE);
        gtk_box_pack_start(GTK_BOX(mainbox), filter_label, FALSE, FALSE, 0);
        gtk_widget_show(filter_label);
 
 }
 
-/* create a table, using a scrollable gtkclist */
+/* create a table, using a scrollable GtkTreeView */
 
-GtkCList *
-create_stat_table(GtkWidget *scrolled_window, GtkWidget *vbox, int columns, const char *titles[])
+GtkTreeView *
+create_stat_table(GtkWidget *scrolled_window, GtkWidget *vbox, int columns, const stat_column *headers)
 {
-       GtkCList *table;
+       GtkTreeView *table;
+       GtkListStore *store;
+       GtkWidget *tree;
+       GtkTreeViewColumn *column;
+       GtkTreeSelection  *sel;
+       GtkCellRenderer *renderer;
+       GType *types;
        int i;
 
-       /* create table */
-       table = GTK_CLIST(gtk_clist_new_with_titles(columns, (gchar **) titles));
+       if (columns <= 0)
+               return NULL;
 
+       types = g_malloc(columns *sizeof(GType));
+       for (i = 0; i < columns; i++)
+               types[i] = headers[i].type;
+
+       store = gtk_list_store_newv (columns, types);
+       g_free(types);
+
+       /* create table */
+       tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
+       table = GTK_TREE_VIEW(tree);
+       g_object_unref (G_OBJECT (store));
+
+       for (i = 0; i < columns; i++) {
+               renderer = gtk_cell_renderer_text_new ();
+               if (headers[i].align == RIGHT) {
+                       /* right align */
+                       g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL);
+               }
+               g_object_set(renderer, "ypad", 0, NULL);
+               column = gtk_tree_view_column_new_with_attributes (headers[i].title, renderer, "text",
+                                       i, NULL);
+               gtk_tree_view_column_set_resizable(column, TRUE);
+               gtk_tree_view_append_column (table, column);
+       }
+       gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET (table));
        gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0);
 
-       /* configure clist */
-       gtk_clist_column_titles_passive(table);
-       gtk_clist_column_titles_show(table);
-       for (i = 0; i < columns; i++)
-           gtk_clist_set_column_auto_resize(table, i, TRUE);
-       gtk_clist_set_selection_mode(table, GTK_SELECTION_SINGLE);
+       /* configure TreeView */
+       gtk_tree_view_set_rules_hint(table, FALSE);
+       gtk_tree_view_set_headers_clickable(table, FALSE);
+
+       sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(table));
+       gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
 
-       /* Put clist into a scrolled window */
-       gtk_container_add(GTK_CONTAINER(scrolled_window),
-                          GTK_WIDGET(table));
-        gtk_widget_show(GTK_WIDGET(table));
        gtk_widget_show(scrolled_window);
 
        return table;