"main_menu.[ch]" -> "menus.[ch]"; it handles not only the main menu, but
[obnox/wireshark/wip.git] / gtk / fileset_dlg.c
index 1cb519604b661b60554462ade10a4786bc2f2403..07ba5e961112bc3caba9109d69c5f45dbfa9e333 100644 (file)
@@ -3,8 +3,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
 
 #include <gtk/gtk.h>
 
-#include "globals.h"
-
-
-#include "compat_macros.h"
-#include "simple_dialog.h"
-
-#include "gui_utils.h"
-#include "dlg_utils.h"
-
-#include "main.h"
-#include "menu.h"
-#include "help_dlg.h"
-
 #include <epan/filesystem.h>
 
-#include "fileset.h"
-#include "fileset_dlg.h"
+#include "../globals.h"
+#include "../simple_dialog.h"
+#include "../fileset.h"
+
+#include "gtk/gui_utils.h"
+#include "gtk/dlg_utils.h"
+#include "gtk/main.h"
+#include "gtk/menus.h"
+#include "gtk/help_dlg.h"
+#include "gtk/fileset_dlg.h"
 
 
 
@@ -67,6 +62,7 @@ static GtkWidget *fs_w;
 /* various widget related global data */
 int           row;
 GtkWidget     *fs_tb;
+GtkWidget     *fs_sw;
 GtkTooltips   *tooltips;
 GtkWidget     *fs_dir_lb;
 GtkWidget     *fs_first_rb;
@@ -125,7 +121,7 @@ static char *
 fileset_dlg_name2date_dup(const char * name) {
     char        *pfx;
     char        *filename;
-    int         pos;
+    size_t       pos;
 
 
     /* just to be sure ... */
@@ -169,7 +165,7 @@ fileset_dlg_add_file(fileset_entry *entry) {
 
     created = fileset_dlg_name2date_dup(entry->name);
        if(!created) {
-               /* if this file doesn't follow the fiel set pattern, */
+               /* if this file doesn't follow the file set pattern, */
                /* use the creation time of that file */
                local = localtime(&entry->ctime);
                created = g_strdup_printf("%04u.%02u.%02u %02u:%02u:%02u", 
@@ -181,9 +177,10 @@ fileset_dlg_add_file(fileset_entry *entry) {
     modified = g_strdup_printf("%04u.%02u.%02u %02u:%02u:%02u", 
         local->tm_year+1900, local->tm_mon+1, local->tm_mday,
         local->tm_hour, local->tm_min, local->tm_sec);
-    size = g_strdup_printf("%ld Bytes", entry->size);
+    size = g_strdup_printf("%" G_GINT64_MODIFIER "d Bytes", entry->size);
 
-    fs_rb = RADIO_BUTTON_NEW_WITH_LABEL(fs_first_rb, entry->name);
+    fs_rb = gtk_radio_button_new_with_label_from_widget(
+        fs_first_rb ? GTK_RADIO_BUTTON(fs_first_rb) : NULL, entry->name);
     if(row == 1) {
         fs_first_rb = fs_rb;
     }
@@ -192,7 +189,7 @@ fileset_dlg_add_file(fileset_entry *entry) {
     }
     gtk_tooltips_set_tip(tooltips, fs_rb, "Open this capture file", NULL);
     gtk_table_attach_defaults(GTK_TABLE(fs_tb), fs_rb, 0, 1, row, row+1);
-    SIGNAL_CONNECT(fs_rb, "toggled", fs_rb_cb, entry);
+    g_signal_connect(fs_rb, "toggled", G_CALLBACK(fs_rb_cb), entry);
     gtk_widget_show(fs_rb);
 
     fs_lb = gtk_label_new(created);
@@ -210,18 +207,32 @@ fileset_dlg_add_file(fileset_entry *entry) {
     gtk_widget_set_sensitive(fs_lb, entry->current);
     gtk_widget_show(fs_lb);
 
-    title = g_strdup_printf("Ethereal: %u File%s in Set", row, plurality(row, "", "s"));
+    title = g_strdup_printf("Wireshark: %u File%s in Set", row, plurality(row, "", "s"));
     gtk_window_set_title(GTK_WINDOW(fs_w), title);
     g_free(title);
 
     title = g_strdup_printf("... in directory: %s", fileset_get_dirname());
-    gtk_label_set(GTK_LABEL(fs_dir_lb), title);
+     gtk_label_set_text(GTK_LABEL(fs_dir_lb), title);
     g_free(title);
 
-    row++;
-    
     gtk_widget_show_all(fs_tb);
 
+    /* resize the table until we use 18 rows (fits well into 800*600), if it's bigger use a scrollbar */
+    /* XXX - I didn't found a way to automatically shrink the table size again */
+    if(row <= 18) {
+      GtkRequisition requisition;
+
+      gtk_widget_size_request(fs_tb, &requisition);
+      gtk_widget_set_size_request(fs_sw, -1, requisition.height);
+      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(fs_sw), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+    }
+    
+    if(row == 18) {
+      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(fs_sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+    }
+    
+    row++;
+
     g_free(created);
     g_free(modified);
     g_free(size);
@@ -244,22 +255,22 @@ fileset_init_table(GtkWidget *parent)
   fs_first_rb = NULL;
 
   fs_lb = gtk_label_new("Filename");
-  gtk_table_attach_defaults(GTK_TABLE(fs_tb), fs_lb, 0, 1, row, row+1);
+  gtk_table_attach(GTK_TABLE(fs_tb), fs_lb, 0, 1, row, row+1, GTK_EXPAND|GTK_FILL, 0, 0,0);
 
   fs_lb = gtk_label_new("Created");
-  gtk_table_attach_defaults(GTK_TABLE(fs_tb), fs_lb, 1, 2, row, row+1);
+  gtk_table_attach(GTK_TABLE(fs_tb), fs_lb, 1, 2, row, row+1, GTK_EXPAND|GTK_FILL, 0, 0,0);
 
   fs_lb = gtk_label_new("Last Modified");
-  gtk_table_attach_defaults(GTK_TABLE(fs_tb), fs_lb, 2, 3, row, row+1);
+  gtk_table_attach(GTK_TABLE(fs_tb), fs_lb, 2, 3, row, row+1, GTK_EXPAND|GTK_FILL, 0, 0,0);
 
   fs_lb = gtk_label_new("Size");
-  gtk_table_attach_defaults(GTK_TABLE(fs_tb), fs_lb, 3, 4, row, row+1);
+  gtk_table_attach(GTK_TABLE(fs_tb), fs_lb, 3, 4, row, row+1, GTK_EXPAND|GTK_FILL, 0, 0,0);
 
   gtk_widget_hide(fs_tb);
 
-  gtk_window_set_title(GTK_WINDOW(fs_w), "Ethereal: 0 Files in Set");
+  gtk_window_set_title(GTK_WINDOW(fs_w), "Wireshark: 0 Files in Set");
 
-  gtk_label_set(GTK_LABEL(fs_dir_lb), "No capture file loaded!");
+   gtk_label_set_text(GTK_LABEL(fs_dir_lb), "No capture file loaded!");
 
   row++;
 }
@@ -270,9 +281,6 @@ void
 fileset_cb(GtkWidget *w _U_, gpointer d _U_)
 {
   GtkWidget     *main_vb, *bbox, *close_bt, *help_bt;
-#if GTK_MAJOR_VERSION < 2
-  GtkAccelGroup *accel_group;
-#endif
 
 
   if (fs_w != NULL) {
@@ -285,48 +293,38 @@ fileset_cb(GtkWidget *w _U_, gpointer d _U_)
 
   tooltips = gtk_tooltips_new();
 
-#if GTK_MAJOR_VERSION < 2
-  /* Accelerator group for the accelerators (or, as they're called in
-     Windows and, I think, in Motif, "mnemonics"; Alt+<key> is a mnemonic,
-     Ctrl+<key> is an accelerator). */
-  accel_group = gtk_accel_group_new();
-  gtk_window_add_accel_group(GTK_WINDOW(fs_w), accel_group);
-#endif
-
   main_vb = gtk_vbox_new(FALSE, 5);
-  gtk_container_border_width(GTK_CONTAINER(main_vb), 5);
+  gtk_container_set_border_width(GTK_CONTAINER(main_vb), 5);
   gtk_container_add(GTK_CONTAINER(fs_w), main_vb);
 
+  fs_sw = gtk_scrolled_window_new(NULL, NULL);
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(fs_sw), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+  gtk_box_pack_start(GTK_BOX(main_vb), fs_sw, TRUE, TRUE, 0);
+
   /* add a dummy container, so we can replace the table later */
   fs_tb_vb = gtk_vbox_new(FALSE, 0);
-  gtk_container_add(GTK_CONTAINER(main_vb), fs_tb_vb);
+  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(fs_sw), fs_tb_vb);
 
   fs_dir_lb = gtk_label_new("");
-  gtk_container_add(GTK_CONTAINER(main_vb), fs_dir_lb);
+  gtk_box_pack_start(GTK_BOX(main_vb), fs_dir_lb, FALSE, FALSE, 0);
 
   fileset_init_table(fs_tb_vb);
 
-  /* Button row: close button */
-  if(topic_available(HELP_FILESET_DIALOG)) {
-    bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL);
-  } else {
-    bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL);
-  }
+  /* Button row: close and help button */
+  bbox = dlg_button_row_new(GTK_STOCK_CLOSE, GTK_STOCK_HELP, NULL);
   gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 5);
 
-  close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE);
+  close_bt = g_object_get_data(G_OBJECT(bbox), GTK_STOCK_CLOSE);
   window_set_cancel_button(fs_w, close_bt, window_cancel_button_cb);
   gtk_tooltips_set_tip(tooltips, close_bt, "Close this window.", NULL);
 
-  if(topic_available(HELP_FILESET_DIALOG)) {
-    help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP);
-    SIGNAL_CONNECT(help_bt, "clicked", topic_cb, HELP_FILESET_DIALOG);
-  }
+  help_bt = g_object_get_data(G_OBJECT(bbox), GTK_STOCK_HELP);
+  g_signal_connect(help_bt, "clicked", G_CALLBACK(topic_cb), (gpointer)HELP_FILESET_DIALOG);
 
   gtk_widget_grab_default(close_bt);
 
-  SIGNAL_CONNECT(fs_w, "delete_event", window_delete_event_cb, NULL);
-  SIGNAL_CONNECT(fs_w, "destroy", fs_destroy_cb, NULL);
+  g_signal_connect(fs_w, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
+  g_signal_connect(fs_w, "destroy", G_CALLBACK(fs_destroy_cb), NULL);
 
   /* init the dialog content */
   fileset_update_dlg();
@@ -384,7 +382,7 @@ fileset_file_closed(void)
 {
   if(fs_w) {
     /* reinit the table, title and alike */
-    gtk_widget_ref(fs_tb_vb);
+    g_object_ref(G_OBJECT(fs_tb_vb));
     gtk_widget_destroy(fs_tb);
     fileset_delete();
     fileset_init_table(fs_tb_vb);
@@ -395,6 +393,7 @@ fileset_file_closed(void)
 
   /* update the menu */
   set_menus_for_file_set(FALSE /* file_set */, 
-      fileset_get_previous() != NULL, fileset_get_next() != NULL );
+                         fileset_get_previous() != NULL,
+                         fileset_get_next() != NULL );
 }