*
* $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 "config.h"
#endif
-#ifdef HAVE_IO_H
-#include <io.h>
-#endif
+#include <string.h>
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
-
#include <gtk/gtk.h>
-#include "globals.h"
-
-
-#include "compat_macros.h"
-#include "simple_dialog.h"
-
-#include "ui_util.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"
/* various widget related global data */
int row;
GtkWidget *fs_tb;
+GtkWidget *fs_sw;
GtkTooltips *tooltips;
GtkWidget *fs_dir_lb;
GtkWidget *fs_first_rb;
/* close the old and open the new file */
cf_close(&cfile);
if (cf_open(&cfile, fname, FALSE, &err) == CF_OK) {
- cf_read(&cfile);
+ cf_read(&cfile, FALSE);
}
g_free(fname);
}
+/* get creation date (converted from filename) */
+/* */
+static char *
+fileset_dlg_name2date_dup(const char * name) {
+ char *pfx;
+ char *filename;
+ size_t pos;
+
+
+ /* just to be sure ... */
+ if(!fileset_filename_match_pattern(name)) {
+ return NULL;
+ }
+
+ /* find char position behind the last underscore */
+ pfx = strrchr(name, '_');
+ pfx++;
+ pos = pfx - name;
+
+ /* start conversion behind that underscore */
+ filename = g_strdup_printf("%c%c%c%c.%c%c.%c%c %c%c:%c%c:%c%c",
+ /* year */ name[pos] , name[pos+1], name[pos+2], name[pos+3],
+ /* month */ name[pos+4], name[pos+5],
+ /* day */ name[pos+6], name[pos+7],
+ /* hour */ name[pos+8], name[pos+9],
+ /* min */ name[pos+10], name[pos+11],
+ /* second */ name[pos+12], name[pos+13]);
+
+ return filename;
+}
+
+
/* this file is a part of the current file set, add it to the dialog */
void
fileset_dlg_add_file(fileset_entry *entry) {
return;
}
- local = localtime(&entry->ctime);
- created = 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);
+ created = fileset_dlg_name2date_dup(entry->name);
+ if(!created) {
+ /* 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",
+ local->tm_year+1900, local->tm_mon+1, local->tm_mday,
+ local->tm_hour, local->tm_min, local->tm_sec);
+ }
+
local = localtime(&entry->mtime);
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;
}
}
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);
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);
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++;
}
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) {
return;
}
- fs_w = window_new(GTK_WINDOW_TOPLEVEL, "");
+ fs_w = dlg_window_new(""); /* transient_for top_level */
+ gtk_window_set_destroy_with_parent (GTK_WINDOW(fs_w), TRUE);
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();
}
-/* open the next file in the file set, or do nothing if already the first file */
+/* open the next file in the file set, or do nothing if already the last file */
void
fileset_next_cb(GtkWidget *w _U_, gpointer d _U_)
{
{
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);
/* 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 );
}