/*
 * Copyright (c) 2001 Fenris, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

/*
 * DO NOT EDIT THIS FILE - it is generated by Glade.
 */

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>

#include "callbacks.h"
#include "interface.h"
#include "support.h"

GtkWidget* create_gui (void)
{
    GtkWidget *gui;
    GtkWidget *vbox_main;
    GtkWidget *menubar;
    guint tmp_key;
    GtkWidget *filemenu;
    GtkWidget *filemenu_menu;
    GtkAccelGroup *filemenu_menu_accels;
    GtkWidget *file_options;
    GtkWidget *file_clear_dns;
    GtkWidget *separator5;
    GtkWidget *file_exit;
    GtkWidget *filtermenu;
    GtkWidget *filtermenu_menu;
    GtkAccelGroup *filtermenu_menu_accels;
    GtkWidget *f_arp;
    GtkWidget *f_arp_menu;
    GtkAccelGroup *f_arp_menu_accels;
    GtkWidget *f_arp_all;
    GtkWidget *f_ip;
    GtkWidget *f_ip_menu;
    GtkAccelGroup *f_ip_menu_accels;
    GtkWidget *f_ip_all;
    GtkWidget *f_ip_port;
    GtkWidget *separator1;
    GtkWidget *f_ip_icmp;
    GtkWidget *f_ip_icmp_menu;
    GtkAccelGroup *f_ip_icmp_menu_accels;
    GtkWidget *f_ip_icmp_all;
    GtkWidget *separator3;
    GtkWidget *f_ip_icmp_request;
    GtkWidget *f_ip_icmp_reply;
    GtkWidget *f_ip_icmp_pair;
    GtkWidget *f_ip_igmp;
    GtkWidget *f_ip_igmp_menu;
    GtkAccelGroup *f_ip_igmp_menu_accels;
    GtkWidget *f_ip_igmp_all;
    GtkWidget *f_ip_tcp;
    GtkWidget *f_ip_tcp_menu;
    GtkAccelGroup *f_ip_tcp_menu_accels;
    GtkWidget *f_ip_tcp_all;
    GtkWidget *f_ip_tcp_port;
    GtkWidget *separator4;
    GtkWidget *f_ip_tcp_http;
    GtkWidget *f_ip_tcp_ftp;
    GtkWidget *f_ip_tcp_ssh;
    GtkWidget *f_ip_udp;
    GtkWidget *f_ip_udp_menu;
    GtkAccelGroup *f_ip_udp_menu_accels;
    GtkWidget *f_ip_udp_all;
    GtkWidget *f_ip_udp_port;
    GtkWidget *hbox3;
    GtkWidget *help_pixmap;
    GtkWidget *scrolledwindow;
    GtkWidget *viewport;
    GtkWidget *area;
    GtkWidget *status_label;
    GtkWidget *f_all;
    GtkWidget *by_address;
    GtkWidget *separator6;
    GtkAccelGroup *accel_group;
    GtkWidget *vbox3;
    GtkWidget *max_label;
    GtkWidget *min_label;


    struct Options_Dialog_Context *options_dialog;
    struct IP_Filter_Dialog_Context *ip_filter_dialog; 

    add_pixmap_directory("."); 
    add_pixmap_directory(BINDIR);

    options_dialog = create_options_dialog();
    ip_filter_dialog = create_ip_filter_dialog();

    accel_group = gtk_accel_group_new ();

    gui = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_object_set_data (GTK_OBJECT (gui), "tvark", gui);
    gtk_window_set_title (GTK_WINDOW (gui), _("Tvark"));

    vbox_main = gtk_vbox_new (FALSE, 0);
    gtk_widget_ref (vbox_main);
    gtk_object_set_data_full (GTK_OBJECT (gui), "vbox_main", vbox_main,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vbox_main);
    gtk_container_add (GTK_CONTAINER (gui), vbox_main);

    menubar = gtk_menu_bar_new ();
    gtk_widget_ref (menubar);
    gtk_object_set_data_full (GTK_OBJECT (gui), "menubar", menubar,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (menubar);
    gtk_box_pack_start (GTK_BOX (vbox_main), menubar, FALSE, FALSE, 0);

    filemenu = gtk_menu_item_new_with_label ("");
    tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (filemenu)->child),
                                     _("_File"));
    gtk_widget_add_accelerator (filemenu, "activate_item", accel_group,
                                tmp_key, GDK_MOD1_MASK, 0);
    gtk_widget_ref (filemenu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "filemenu", filemenu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (filemenu);
    gtk_container_add (GTK_CONTAINER (menubar), filemenu);

    filemenu_menu = gtk_menu_new ();
    gtk_widget_ref (filemenu_menu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "filemenu_menu", filemenu_menu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (filemenu), filemenu_menu);
    filemenu_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (filemenu_menu));

    file_options = gtk_menu_item_new_with_label ("");
    tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (file_options)->child),
                                     _("_Options"));
    gtk_widget_add_accelerator (file_options, "activate_item", filemenu_menu_accels,
                                tmp_key, 0, 0);
    gtk_widget_ref (file_options);
    gtk_object_set_data_full (GTK_OBJECT (gui), "file_options", file_options,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (file_options);
    gtk_container_add (GTK_CONTAINER (filemenu_menu), file_options);

    file_clear_dns = gtk_menu_item_new_with_label("");
    tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(file_clear_dns)->child),
                                    _("_Clear DNS cache"));
    gtk_widget_add_accelerator(file_clear_dns, "activate_item",
                               filemenu_menu_accels, tmp_key, 0, 0);
    gtk_widget_ref(file_clear_dns);
    gtk_object_set_data_full (GTK_OBJECT (gui), "file_clear_dns", file_clear_dns,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (file_clear_dns);
    gtk_container_add (GTK_CONTAINER (filemenu_menu), file_clear_dns);

    separator5 = gtk_menu_item_new ();
    gtk_widget_ref (separator5);
    gtk_object_set_data_full (GTK_OBJECT (gui), "separator5", separator5,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (separator5);
    gtk_container_add (GTK_CONTAINER (filemenu_menu), separator5);
    gtk_widget_set_sensitive (separator5, FALSE);

    file_exit = gtk_menu_item_new_with_label ("");
    tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (file_exit)->child),
                                     _("E_xit"));
    gtk_widget_add_accelerator (file_exit, "activate_item", filemenu_menu_accels,
                                tmp_key, 0, 0);
    gtk_widget_ref (file_exit);
    gtk_object_set_data_full (GTK_OBJECT (gui), "file_exit", file_exit,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (file_exit);
    gtk_container_add (GTK_CONTAINER (filemenu_menu), file_exit);

    filtermenu = gtk_menu_item_new_with_label ("");
    tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (filtermenu)->child),
                                     _("F_ilter"));
    gtk_widget_add_accelerator (filtermenu, "activate_item", accel_group,
                                tmp_key, GDK_MOD1_MASK, 0);
    gtk_widget_ref (filtermenu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "filtermenu", filtermenu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (filtermenu);
    gtk_container_add (GTK_CONTAINER (menubar), filtermenu);

    filtermenu_menu = gtk_menu_new ();
    gtk_widget_ref (filtermenu_menu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "filtermenu_menu", filtermenu_menu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (filtermenu), filtermenu_menu);
    filtermenu_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (filtermenu_menu));

    f_all = gtk_menu_item_new_with_label (_("All traffic"));
    gtk_widget_ref (f_all);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_all", f_all,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_all);
    gtk_container_add (GTK_CONTAINER (filtermenu_menu), f_all);

    by_address = gtk_menu_item_new_with_label (_("By Address..."));
    gtk_widget_ref (by_address);
    gtk_object_set_data_full (GTK_OBJECT (gui), "by_address", by_address,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (by_address);
    gtk_container_add (GTK_CONTAINER (filtermenu_menu), by_address);

    separator6 = gtk_menu_item_new ();
    gtk_widget_ref (separator6);
    gtk_object_set_data_full (GTK_OBJECT (gui), "separator6", separator6,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (separator6);
    gtk_container_add (GTK_CONTAINER (filtermenu_menu), separator6);
    gtk_widget_set_sensitive (separator6, FALSE);



    f_arp = gtk_menu_item_new_with_label (_("ARP"));
    gtk_widget_ref (f_arp);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_arp", f_arp,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_arp);
    gtk_container_add (GTK_CONTAINER (filtermenu_menu), f_arp);

    f_arp_menu = gtk_menu_new ();
    gtk_widget_ref (f_arp_menu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_arp_menu", f_arp_menu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (f_arp), f_arp_menu);
    f_arp_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (f_arp_menu));

    f_arp_all = gtk_menu_item_new_with_label (_("All"));
    gtk_widget_ref (f_arp_all);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_arp_all", f_arp_all,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_arp_all);
    gtk_container_add (GTK_CONTAINER (f_arp_menu), f_arp_all);

    f_ip = gtk_menu_item_new_with_label (_("IP"));
    gtk_widget_ref (f_ip);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip", f_ip,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip);
    gtk_container_add (GTK_CONTAINER (filtermenu_menu), f_ip);

    f_ip_menu = gtk_menu_new ();
    gtk_widget_ref (f_ip_menu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_menu", f_ip_menu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (f_ip), f_ip_menu);
    f_ip_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (f_ip_menu));

    f_ip_all = gtk_menu_item_new_with_label (_("All"));
    gtk_widget_ref (f_ip_all);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_all", f_ip_all,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_all);
    gtk_container_add (GTK_CONTAINER (f_ip_menu), f_ip_all);
/*
    f_ip_port = gtk_menu_item_new_with_label (_("By port..."));
    gtk_widget_ref (f_ip_port);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_port", f_ip_port,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_port);
    gtk_container_add (GTK_CONTAINER (f_ip_menu), f_ip_port);
*/
    separator1 = gtk_menu_item_new ();
    gtk_widget_ref (separator1);
    gtk_object_set_data_full (GTK_OBJECT (gui), "separator1", separator1,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (separator1);
    gtk_container_add (GTK_CONTAINER (f_ip_menu), separator1);
    gtk_widget_set_sensitive (separator1, FALSE);

    f_ip_icmp = gtk_menu_item_new_with_label (_("ICMP"));
    gtk_widget_ref (f_ip_icmp);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_icmp", f_ip_icmp,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_icmp);
    gtk_container_add (GTK_CONTAINER (f_ip_menu), f_ip_icmp);

    f_ip_icmp_menu = gtk_menu_new ();
    gtk_widget_ref (f_ip_icmp_menu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_icmp_menu", f_ip_icmp_menu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (f_ip_icmp), f_ip_icmp_menu);
    f_ip_icmp_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (f_ip_icmp_menu));

    f_ip_icmp_all = gtk_menu_item_new_with_label (_("All"));
    gtk_widget_ref (f_ip_icmp_all);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_icmp_all", f_ip_icmp_all,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_icmp_all);
    gtk_container_add (GTK_CONTAINER (f_ip_icmp_menu), f_ip_icmp_all);

    separator3 = gtk_menu_item_new ();
    gtk_widget_ref (separator3);
    gtk_object_set_data_full (GTK_OBJECT (gui), "separator3", separator3,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (separator3);
    gtk_container_add (GTK_CONTAINER (f_ip_icmp_menu), separator3);
    gtk_widget_set_sensitive (separator3, FALSE);

    f_ip_icmp_request = gtk_menu_item_new_with_label (_("Request"));
    gtk_widget_ref (f_ip_icmp_request);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_icmp_request", f_ip_icmp_request,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_icmp_request);
    gtk_container_add (GTK_CONTAINER (f_ip_icmp_menu), f_ip_icmp_request);

    f_ip_icmp_reply = gtk_menu_item_new_with_label (_("Reply"));
    gtk_widget_ref (f_ip_icmp_reply);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_icmp_reply", f_ip_icmp_reply,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_icmp_reply);
    gtk_container_add (GTK_CONTAINER (f_ip_icmp_menu), f_ip_icmp_reply);

    f_ip_icmp_pair = gtk_menu_item_new_with_label (_("Pair"));
    gtk_widget_ref (f_ip_icmp_pair);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_icmp_pair", f_ip_icmp_pair,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_icmp_pair);
    gtk_container_add (GTK_CONTAINER (f_ip_icmp_menu), f_ip_icmp_pair);

    f_ip_igmp = gtk_menu_item_new_with_label (_("IGMP"));
    gtk_widget_ref (f_ip_igmp);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_igmp", f_ip_igmp,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_igmp);
    gtk_container_add (GTK_CONTAINER (f_ip_menu), f_ip_igmp);

    f_ip_igmp_menu = gtk_menu_new ();
    gtk_widget_ref (f_ip_igmp_menu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_igmp_menu", f_ip_igmp_menu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (f_ip_igmp), f_ip_igmp_menu);
    f_ip_igmp_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (f_ip_igmp_menu));

    f_ip_igmp_all = gtk_menu_item_new_with_label (_("All"));
    gtk_widget_ref (f_ip_igmp_all);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_igmp_all", f_ip_igmp_all,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_igmp_all);
    gtk_container_add (GTK_CONTAINER (f_ip_igmp_menu), f_ip_igmp_all);

    f_ip_tcp = gtk_menu_item_new_with_label (_("TCP"));
    gtk_widget_ref (f_ip_tcp);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_tcp", f_ip_tcp,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_tcp);
    gtk_container_add (GTK_CONTAINER (f_ip_menu), f_ip_tcp);

    f_ip_tcp_menu = gtk_menu_new ();
    gtk_widget_ref (f_ip_tcp_menu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_tcp_menu", f_ip_tcp_menu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (f_ip_tcp), f_ip_tcp_menu);
    f_ip_tcp_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (f_ip_tcp_menu));

    f_ip_tcp_all = gtk_menu_item_new_with_label (_("All"));
    gtk_widget_ref (f_ip_tcp_all);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_tcp_all", f_ip_tcp_all,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_tcp_all);
    gtk_container_add (GTK_CONTAINER (f_ip_tcp_menu), f_ip_tcp_all);
/*
    f_ip_tcp_port = gtk_menu_item_new_with_label (_("By port..."));
    gtk_widget_ref (f_ip_tcp_port);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_tcp_port", f_ip_tcp_port,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_tcp_port);
    gtk_container_add (GTK_CONTAINER (f_ip_tcp_menu), f_ip_tcp_port);
*/
    separator4 = gtk_menu_item_new ();
    gtk_widget_ref (separator4);
    gtk_object_set_data_full (GTK_OBJECT (gui), "separator4", separator4,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (separator4);
    gtk_container_add (GTK_CONTAINER (f_ip_tcp_menu), separator4);
    gtk_widget_set_sensitive (separator4, FALSE);

    f_ip_tcp_http = gtk_menu_item_new_with_label (_("http"));
    gtk_widget_ref (f_ip_tcp_http);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_tcp_http", f_ip_tcp_http,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_tcp_http);
    gtk_container_add (GTK_CONTAINER (f_ip_tcp_menu), f_ip_tcp_http);

    f_ip_tcp_ftp = gtk_menu_item_new_with_label (_("ftp"));
    gtk_widget_ref (f_ip_tcp_ftp);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_tcp_ftp", f_ip_tcp_ftp,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_tcp_ftp);
    gtk_container_add (GTK_CONTAINER (f_ip_tcp_menu), f_ip_tcp_ftp);

    f_ip_tcp_ssh = gtk_menu_item_new_with_label (_("ssh"));
    gtk_widget_ref (f_ip_tcp_ssh);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_tcp_ssh", f_ip_tcp_ssh,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_tcp_ssh);
    gtk_container_add (GTK_CONTAINER (f_ip_tcp_menu), f_ip_tcp_ssh);

    f_ip_udp = gtk_menu_item_new_with_label (_("UDP"));
    gtk_widget_ref (f_ip_udp);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_udp", f_ip_udp,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_udp);
    gtk_container_add (GTK_CONTAINER (f_ip_menu), f_ip_udp);

    f_ip_udp_menu = gtk_menu_new ();
    gtk_widget_ref (f_ip_udp_menu);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_udp_menu", f_ip_udp_menu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (f_ip_udp), f_ip_udp_menu);
    f_ip_udp_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (f_ip_udp_menu));

    f_ip_udp_all = gtk_menu_item_new_with_label (_("All"));
    gtk_widget_ref (f_ip_udp_all);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_udp_all", f_ip_udp_all,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_udp_all);
    gtk_container_add (GTK_CONTAINER (f_ip_udp_menu), f_ip_udp_all);
/*
    f_ip_udp_port = gtk_menu_item_new_with_label (_("By port..."));
    gtk_widget_ref (f_ip_udp_port);
    gtk_object_set_data_full (GTK_OBJECT (gui), "f_ip_udp_port", f_ip_udp_port,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (f_ip_udp_port);
    gtk_container_add (GTK_CONTAINER (f_ip_udp_menu), f_ip_udp_port);
*/
    hbox3 = gtk_hbox_new (FALSE, 0);
    gtk_widget_ref (hbox3);
    gtk_object_set_data_full (GTK_OBJECT (gui), "hbox3", hbox3,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hbox3);
    gtk_box_pack_start (GTK_BOX (vbox_main), hbox3, TRUE, TRUE, 0);

    vbox3 = gtk_vbox_new (FALSE, 0);
    gtk_widget_ref (vbox3);
    gtk_object_set_data_full (GTK_OBJECT (gui), "vbox3", vbox3,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vbox3);
    gtk_box_pack_start (GTK_BOX (hbox3), vbox3, FALSE, FALSE, 0);

    max_label = gtk_label_new (_("1 Kbps"));
    gtk_widget_ref (max_label);
    gtk_object_set_data_full (GTK_OBJECT (gui), "max_label", max_label,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (max_label);
    gtk_box_pack_start (GTK_BOX (vbox3), max_label, TRUE, TRUE, 0);
    gtk_misc_set_alignment (GTK_MISC (max_label), 0.5, 1);

    help_pixmap = create_pixmap (gui, "tvark-grad.xpm");
    gtk_widget_ref (help_pixmap);
    gtk_object_set_data_full (GTK_OBJECT (gui), "help_pixmap", help_pixmap,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (help_pixmap);
    gtk_box_pack_start (GTK_BOX (vbox3), help_pixmap, FALSE, FALSE, 2);
    gtk_misc_set_alignment (GTK_MISC (help_pixmap), 1, 0.5);
    gtk_misc_set_padding (GTK_MISC (help_pixmap), 1, 0);

    min_label = gtk_label_new (_("0 bps"));
    gtk_widget_ref (min_label);
    gtk_object_set_data_full (GTK_OBJECT (gui), "min_label", min_label,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (min_label);
    gtk_box_pack_start (GTK_BOX (vbox3), min_label, TRUE, TRUE, 0);
    gtk_misc_set_alignment (GTK_MISC (min_label), 0.5, 7.45058e-09);

    options_dialog->min_label = GTK_LABEL(min_label);
    options_dialog->max_label = GTK_LABEL(max_label);

    scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
    gtk_widget_ref (scrolledwindow);
    gtk_object_set_data_full (GTK_OBJECT (gui), "scrolledwindow", scrolledwindow,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (scrolledwindow);
    gtk_box_pack_start (GTK_BOX (hbox3), scrolledwindow, TRUE, TRUE, 0);
    gtk_widget_set_usize (scrolledwindow, 400, 500);
    gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow), 4);
    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

    viewport = gtk_viewport_new (NULL, NULL);
    gtk_widget_ref (viewport);
    gtk_object_set_data_full (GTK_OBJECT (gui), "viewport", viewport,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (viewport);
    gtk_container_add (GTK_CONTAINER (scrolledwindow), viewport);

    area = gtk_drawing_area_new ();
    gtk_widget_ref (area);
    gtk_object_set_data_full (GTK_OBJECT (gui), "area", area,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (area);
    gtk_container_add (GTK_CONTAINER (viewport), area);
    gtk_widget_set_usize (area, -2, 1000);

    status_label = gtk_label_new (_("Displaying all traffic."));
    gtk_widget_ref (status_label);
    gtk_object_set_data_full (GTK_OBJECT (gui), "status_label", status_label,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (status_label);
    gtk_box_pack_start (GTK_BOX (vbox_main), status_label, FALSE, FALSE, 0);
    gtk_label_set_justify (GTK_LABEL (status_label), GTK_JUSTIFY_LEFT);
    gtk_misc_set_alignment (GTK_MISC (status_label), 0.5, 0);
    gtk_misc_set_padding (GTK_MISC (status_label), 5, 1);

    statusbar = GTK_LABEL(status_label);

    gtk_signal_connect (GTK_OBJECT (gui), "destroy",
                        GTK_SIGNAL_FUNC (event_destroy),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (file_options), "activate",
                        GTK_SIGNAL_FUNC (on_file_options_activate),
                        options_dialog);
    gtk_signal_connect (GTK_OBJECT (file_clear_dns), "activate",
                        GTK_SIGNAL_FUNC (on_file_clear_dns_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (file_exit), "activate",
                        GTK_SIGNAL_FUNC (on_file_exit_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_all), "activate",
                        GTK_SIGNAL_FUNC (on_f_all_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (by_address), "activate",
                        GTK_SIGNAL_FUNC (on_by_address_activate),
                        ip_filter_dialog->dialog);
    gtk_signal_connect (GTK_OBJECT (f_arp_all), "activate",
                        GTK_SIGNAL_FUNC (on_f_arp_all_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_all), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_all_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_icmp_all), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_icmp_all_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_icmp_request), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_icmp_request_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_icmp_reply), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_icmp_reply_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_icmp_pair), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_icmp_pair_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_igmp_all), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_igmp_all_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_tcp_all), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_tcp_all_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_tcp_http), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_tcp_http_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_tcp_ftp), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_tcp_ftp_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_tcp_ssh), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_tcp_ssh_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (f_ip_udp_all), "activate",
                        GTK_SIGNAL_FUNC (on_f_ip_udp_all_activate),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (area), "configure_event",
                        GTK_SIGNAL_FUNC (event_configure),
                        NULL);
    gtk_signal_connect (GTK_OBJECT (area), "expose_event",
                        GTK_SIGNAL_FUNC (event_expose),
                        NULL);

    gtk_window_add_accel_group (GTK_WINDOW (gui), accel_group);

    gtk_timeout_add(1, draw_timer, (gpointer)area);

    return gui;
}



struct Options_Dialog_Context *create_options_dialog (void)
{
    GtkWidget *options_dialog;
    GtkWidget *vbox2;
    GtkWidget *table1;
    GtkWidget *label2;
    GtkWidget *label3;
    GtkWidget *label4;
    GtkWidget *min_entry;
    GtkWidget *min_optionmenu;
    GtkWidget *min_optionmenu_menu;
    GtkWidget *glade_menuitem;
    GtkWidget *max_entry;
    GtkWidget *max_optionmenu;
    GtkWidget *max_optionmenu_menu;
    GtkObject *buffer_spin_adj;
    GtkWidget *buffer_spin;
    GtkWidget *hbox7;
    GtkWidget *option_ok;
    GtkWidget *options_cancel;
    struct Options_Dialog_Context *context;

    options_dialog = gtk_window_new (GTK_WINDOW_DIALOG);
    gtk_object_set_data (GTK_OBJECT (options_dialog), "options_dialog", options_dialog);
    gtk_window_set_title (GTK_WINDOW (options_dialog), _("Options"));
    gtk_window_set_position (GTK_WINDOW (options_dialog), GTK_WIN_POS_CENTER);

    vbox2 = gtk_vbox_new (FALSE, 0);
    gtk_widget_ref (vbox2);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "vbox2", vbox2,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vbox2);
    gtk_container_add (GTK_CONTAINER (options_dialog), vbox2);

    table1 = gtk_table_new (3, 3, FALSE);
    gtk_widget_ref (table1);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "table1", table1,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (table1);
    gtk_box_pack_start (GTK_BOX (vbox2), table1, TRUE, TRUE, 0);
    gtk_container_set_border_width (GTK_CONTAINER (table1), 5);
    gtk_table_set_row_spacings (GTK_TABLE (table1), 5);
    gtk_table_set_col_spacings (GTK_TABLE (table1), 10);

    label2 = gtk_label_new (_("Buffer size (in seconds)"));
    gtk_widget_ref (label2);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "label2", label2,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (label2);
    gtk_table_attach (GTK_TABLE (table1), label2, 0, 1, 0, 1,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_misc_set_alignment (GTK_MISC (label2), 0, 0.5);

    label3 = gtk_label_new (_("Minimum rate"));
    gtk_widget_ref (label3);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "label3", label3,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (label3);
    gtk_table_attach (GTK_TABLE (table1), label3, 0, 1, 1, 2,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_misc_set_alignment (GTK_MISC (label3), 0, 0.5);

    label4 = gtk_label_new (_("Maximum rate"));
    gtk_widget_ref (label4);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "label4", label4,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (label4);
    gtk_table_attach (GTK_TABLE (table1), label4, 0, 1, 2, 3,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_misc_set_alignment (GTK_MISC (label4), 0, 0.5);

    min_optionmenu = gtk_option_menu_new ();
    gtk_widget_ref (min_optionmenu);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "min_optionmenu", min_optionmenu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (min_optionmenu);
    gtk_table_attach (GTK_TABLE (table1), min_optionmenu, 2, 3, 1, 2,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    min_optionmenu_menu = gtk_menu_new ();
    glade_menuitem = gtk_menu_item_new_with_label (_("bps"));
    gtk_widget_show (glade_menuitem);
    gtk_menu_append (GTK_MENU (min_optionmenu_menu), glade_menuitem);
    glade_menuitem = gtk_menu_item_new_with_label (_("Kbps"));
    gtk_widget_show (glade_menuitem);
    gtk_menu_append (GTK_MENU (min_optionmenu_menu), glade_menuitem);
    glade_menuitem = gtk_menu_item_new_with_label (_("Mbps"));
    gtk_widget_show (glade_menuitem);
    gtk_menu_append (GTK_MENU (min_optionmenu_menu), glade_menuitem);
    glade_menuitem = gtk_menu_item_new_with_label (_("Gbps"));
    gtk_widget_show (glade_menuitem);
    gtk_menu_append (GTK_MENU (min_optionmenu_menu), glade_menuitem);
    gtk_option_menu_set_menu (GTK_OPTION_MENU (min_optionmenu), min_optionmenu_menu);

    max_optionmenu = gtk_option_menu_new ();
    gtk_widget_ref (max_optionmenu);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "max_optionmenu", max_optionmenu,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (max_optionmenu);
    gtk_table_attach (GTK_TABLE (table1), max_optionmenu, 2, 3, 2, 3,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    max_optionmenu_menu = gtk_menu_new ();
    glade_menuitem = gtk_menu_item_new_with_label (_("bps"));
    gtk_widget_show (glade_menuitem);
    gtk_menu_append (GTK_MENU (max_optionmenu_menu), glade_menuitem);
    glade_menuitem = gtk_menu_item_new_with_label (_("Kbps"));
    gtk_widget_show (glade_menuitem);
    gtk_menu_append (GTK_MENU (max_optionmenu_menu), glade_menuitem);
    glade_menuitem = gtk_menu_item_new_with_label (_("Mbps"));
    gtk_widget_show (glade_menuitem);
    gtk_menu_append (GTK_MENU (max_optionmenu_menu), glade_menuitem);
    glade_menuitem = gtk_menu_item_new_with_label (_("Gbps"));
    gtk_widget_show (glade_menuitem);
    gtk_menu_append (GTK_MENU (max_optionmenu_menu), glade_menuitem);
    gtk_option_menu_set_menu (GTK_OPTION_MENU (max_optionmenu), max_optionmenu_menu);

    buffer_spin_adj = gtk_adjustment_new (10, 1, 30, 1, 5, 5);
    buffer_spin = gtk_spin_button_new (GTK_ADJUSTMENT (buffer_spin_adj), 1, 0);
    gtk_widget_ref (buffer_spin);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "buffer_spin", buffer_spin,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (buffer_spin);
    gtk_table_attach (GTK_TABLE (table1), buffer_spin, 1, 2, 0, 1,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_widget_set_usize (buffer_spin, 45, -2);
    gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (buffer_spin), TRUE);
  
    min_entry = gtk_entry_new ();
    gtk_widget_ref (min_entry);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "min_entry", min_entry,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (min_entry);
    gtk_table_attach (GTK_TABLE (table1), min_entry, 1, 2, 1, 2,
                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_widget_set_usize (min_entry, 50, -2);
  
    max_entry = gtk_entry_new ();
    gtk_widget_ref (max_entry);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "max_entry", max_entry,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (max_entry);
    gtk_table_attach (GTK_TABLE (table1), max_entry, 1, 2, 2, 3,
                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_widget_set_usize (max_entry, 50, -2);

    hbox7 = gtk_hbox_new (TRUE, 10);
    gtk_widget_ref (hbox7);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "hbox7", hbox7,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hbox7);
    gtk_box_pack_start (GTK_BOX (vbox2), hbox7, TRUE, FALSE, 0);

    option_ok = gtk_button_new_with_label (_("OK"));
    gtk_widget_ref (option_ok);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "option_ok", option_ok,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (option_ok);
    gtk_box_pack_start (GTK_BOX (hbox7), option_ok, FALSE, TRUE, 0);

    options_cancel = gtk_button_new_with_label (_("Cancel"));
    gtk_widget_ref (options_cancel);
    gtk_object_set_data_full (GTK_OBJECT (options_dialog), "options_cancel", options_cancel,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (options_cancel);
    gtk_box_pack_start (GTK_BOX (hbox7), options_cancel, FALSE, TRUE, 0);

    context = malloc(sizeof(struct Options_Dialog_Context));
    context->dialog = options_dialog;
    context->buf_size = GTK_SPIN_BUTTON(buffer_spin);
    context->min = GTK_ENTRY(min_entry);
    context->min_menu = GTK_MENU(min_optionmenu_menu);
    context->min_option = GTK_OPTION_MENU(min_optionmenu);
    context->max = GTK_ENTRY(max_entry);
    context->max_menu = GTK_MENU(max_optionmenu_menu);
    context->max_option = GTK_OPTION_MENU(max_optionmenu);

    gtk_signal_connect (GTK_OBJECT (option_ok), "clicked",
                        GTK_SIGNAL_FUNC (on_option_ok_clicked),
                        context);
    gtk_signal_connect (GTK_OBJECT (options_cancel), "clicked",
                        GTK_SIGNAL_FUNC (on_options_cancel_clicked),
                        options_dialog);

    return context;
}

struct IP_Filter_Dialog_Context* create_ip_filter_dialog (void) 
{

    GtkWidget *ip_filter_dialog;
    GtkWidget *vbox3;
    GtkWidget *addr_lbl;
    GtkWidget *hseparator1;
    GtkWidget *table2;
    GtkWidget *dst_filter_check;
    GtkWidget *hbox13;
    GtkWidget *src_1;
    GtkWidget *src_2;
    GtkWidget *src_3;
    GtkWidget *src_4;
    GtkWidget *hbox14;
    GtkWidget *dst_1;
    GtkWidget *dst_2;
    GtkWidget *dst_3;
    GtkWidget *dst_4;
    GtkWidget *vseparator1;
    GtkWidget *vseparator2;
    GtkWidget *src_filter_check;
    GtkWidget *hseparator2;
    GtkWidget *table4;
    GtkWidget *src_cidr;
    GtkWidget *hseparator7;
    GtkWidget *hseparator8;
    GtkWidget *hseparator9;
    GtkWidget *dst_cidr;
    GtkWidget *vseparator5;
    GtkWidget *vseparator4;
    GtkWidget *dst_cidr_lbl;
    GtkWidget *scr_cidr_lbl;
    GtkWidget *hbox8;
    GtkWidget *ok_button;
    GtkWidget *cancel_button;
    
    GtkWidget *table5;
    GtkWidget *src_ports;
    GtkWidget *dst_ports;
    GtkWidget *src_p_chk;
    GtkWidget *dst_p_chk;
    GtkWidget *vseparator6;   
    GtkWidget *vseparator7;   
    GtkWidget *hseparator10;  
    GtkWidget *hseparator11;  
    GtkWidget *hseparator12;
    GtkWidget *vbox4;
    GtkWidget *hbox15;
    GtkWidget *hbox16;
    


    struct IP_Filter_Dialog_Context *context;

    ip_filter_dialog = gtk_window_new (GTK_WINDOW_DIALOG);
    gtk_object_set_data (GTK_OBJECT (ip_filter_dialog), "ip_filter_dialog", ip_filter_dialog);
    gtk_container_set_border_width (GTK_CONTAINER (ip_filter_dialog), 5);
    gtk_window_set_title (GTK_WINDOW (ip_filter_dialog), _("IP Filter ..."));
    gtk_window_set_position (GTK_WINDOW (ip_filter_dialog), GTK_WIN_POS_MOUSE);

    vbox3 = gtk_vbox_new (FALSE, 0);
    gtk_widget_ref (vbox3);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "vbox3", vbox3,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vbox3);
    gtk_container_add (GTK_CONTAINER (ip_filter_dialog), vbox3);

    addr_lbl = gtk_label_new (_("Please check filter option, and enter IP address."));
    gtk_widget_ref (addr_lbl);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "addr_lbl", addr_lbl,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (addr_lbl);
    gtk_box_pack_start (GTK_BOX (vbox3), addr_lbl, FALSE, FALSE, 5);

    hseparator1 = gtk_hseparator_new ();
    gtk_widget_ref (hseparator1);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hseparator1", hseparator1,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hseparator1);
    gtk_box_pack_start (GTK_BOX (vbox3), hseparator1, TRUE, TRUE, 0);

    table2 = gtk_table_new (2, 3, FALSE);
    gtk_widget_ref (table2);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "table2", table2,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (table2);
    gtk_box_pack_start (GTK_BOX (vbox3), table2, TRUE, TRUE, 0);

    dst_filter_check = gtk_check_button_new_with_label (_("Filter on Destination Address"));
    gtk_widget_ref (dst_filter_check);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "dst_filter_check", dst_filter_check,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (dst_filter_check);
    gtk_table_attach (GTK_TABLE (table2), dst_filter_check, 2, 3, 0, 1,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_container_set_border_width (GTK_CONTAINER (dst_filter_check), 2);

    hbox13 = gtk_hbox_new (FALSE, 0);
    gtk_widget_ref (hbox13);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hbox13", hbox13,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hbox13);
    gtk_table_attach (GTK_TABLE (table2), hbox13, 0, 1, 1, 2,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (GTK_FILL), 0, 0);

    src_1 = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (src_1);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "src_1", src_1,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (src_1);
    gtk_box_pack_start (GTK_BOX (hbox13), src_1, TRUE, TRUE, 2);
    gtk_widget_set_usize (src_1, 30, -2);

    src_2 = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (src_2);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "src_2", src_2,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (src_2);
    gtk_box_pack_start (GTK_BOX (hbox13), src_2, TRUE, TRUE, 1);
    gtk_widget_set_usize (src_2, 30, -2);

    src_3 = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (src_3);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "src_3", src_3,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (src_3);
    gtk_box_pack_start (GTK_BOX (hbox13), src_3, TRUE, TRUE, 1);
    gtk_widget_set_usize (src_3, 30, -2);

    src_4 = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (src_4);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "src_4", src_4,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (src_4);
    gtk_box_pack_start (GTK_BOX (hbox13), src_4, TRUE, TRUE, 1);
    gtk_widget_set_usize (src_4, 30, -2);

    hbox14 = gtk_hbox_new (FALSE, 0);
    gtk_widget_ref (hbox14);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hbox14", hbox14,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hbox14);
    gtk_table_attach (GTK_TABLE (table2), hbox14, 2, 3, 1, 2,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (GTK_FILL), 0, 0);

    dst_1 = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (dst_1);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "dst_1", dst_1,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (dst_1);
    gtk_box_pack_start (GTK_BOX (hbox14), dst_1, TRUE, TRUE, 1);
    gtk_widget_set_usize (dst_1, 30, -2);

    dst_2 = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (dst_2);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "dst_2", dst_2,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (dst_2);
    gtk_box_pack_start (GTK_BOX (hbox14), dst_2, TRUE, TRUE, 1);
    gtk_widget_set_usize (dst_2, 30, -2);

    dst_3 = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (dst_3);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "dst_3", dst_3,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (dst_3);
    gtk_box_pack_start (GTK_BOX (hbox14), dst_3, TRUE, TRUE, 1);
    gtk_widget_set_usize (dst_3, 30, -2);

    dst_4 = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (dst_4);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "dst_4", dst_4,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (dst_4);
    gtk_box_pack_start (GTK_BOX (hbox14), dst_4, TRUE, TRUE, 1);
    gtk_widget_set_usize (dst_4, 30, -2);

    vseparator1 = gtk_vseparator_new ();
    gtk_widget_ref (vseparator1);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "vseparator1", vseparator1,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vseparator1);
    gtk_table_attach (GTK_TABLE (table2), vseparator1, 1, 2, 0, 1,
                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                      (GtkAttachOptions) (GTK_FILL), 0, 0);

    vseparator2 = gtk_vseparator_new ();
    gtk_widget_ref (vseparator2);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "vseparator2", vseparator2,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vseparator2);
    gtk_table_attach (GTK_TABLE (table2), vseparator2, 1, 2, 1, 2,
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL),
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL), 0, 0);

    src_filter_check = gtk_check_button_new_with_label (_("Filter on Source Address"));
    gtk_widget_ref (src_filter_check);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "src_filter_check", src_filter_check,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (src_filter_check);
    gtk_table_attach (GTK_TABLE (table2), src_filter_check, 0, 1, 0, 1,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 10, 0);
    gtk_container_set_border_width (GTK_CONTAINER (src_filter_check), 2);

    hseparator2 = gtk_hseparator_new ();
    gtk_widget_ref (hseparator2);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hseparator2", hseparator2,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hseparator2);
    gtk_box_pack_start (GTK_BOX (vbox3), hseparator2, TRUE, TRUE, 0);

    table4 = gtk_table_new (3, 3, FALSE);
    gtk_widget_ref (table4);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "table4", table4,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (table4);
    gtk_box_pack_start (GTK_BOX (vbox3), table4, TRUE, TRUE, 0);
    gtk_container_set_border_width (GTK_CONTAINER (table4), 1);

    src_cidr = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (src_cidr);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "src_cidr", src_cidr,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (src_cidr);
    gtk_table_attach (GTK_TABLE (table4), src_cidr, 0, 1, 1, 2,
                      (GtkAttachOptions) (0),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_widget_set_usize (src_cidr, 50, -2);

    hseparator7 = gtk_hseparator_new ();
    gtk_widget_ref (hseparator7);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hseparator7", hseparator7,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hseparator7);
    gtk_table_attach (GTK_TABLE (table4), hseparator7, 0, 1, 2, 3,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

    hseparator8 = gtk_hseparator_new ();
    gtk_widget_ref (hseparator8);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hseparator8", hseparator8,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hseparator8);
    gtk_table_attach (GTK_TABLE (table4), hseparator8, 1, 2, 2, 3,
                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                      (GtkAttachOptions) (GTK_FILL), 0, 0);

    hseparator9 = gtk_hseparator_new ();
    gtk_widget_ref (hseparator9);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hseparator9", hseparator9,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hseparator9);
    gtk_table_attach (GTK_TABLE (table4), hseparator9, 2, 3, 2, 3,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (GTK_FILL), 0, 0);

    dst_cidr = gtk_entry_new_with_max_length (3);
    gtk_widget_ref (dst_cidr);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "dst_cidr", dst_cidr,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (dst_cidr);
    gtk_table_attach (GTK_TABLE (table4), dst_cidr, 2, 3, 1, 2,
                      (GtkAttachOptions) (0),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_widget_set_usize (dst_cidr, 50, -2);

    vseparator5 = gtk_vseparator_new ();
    gtk_widget_ref (vseparator5);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "vseparator5", vseparator5,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vseparator5);
    gtk_table_attach (GTK_TABLE (table4), vseparator5, 1, 2, 1, 2,
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL),
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL), 0, 0);

    vseparator4 = gtk_vseparator_new ();
    gtk_widget_ref (vseparator4);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "vseparator4", vseparator4,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vseparator4);
    gtk_table_attach (GTK_TABLE (table4), vseparator4, 1, 2, 0, 1,
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL),
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL), 0, 0);

    dst_cidr_lbl = gtk_label_new (_("Destination CIDR netmask"));
    gtk_widget_ref (dst_cidr_lbl);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "dst_cidr_lbl", dst_cidr_lbl,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (dst_cidr_lbl);
    gtk_table_attach (GTK_TABLE (table4), dst_cidr_lbl, 2, 3, 0, 1,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 1, 1);
    gtk_label_set_justify (GTK_LABEL (dst_cidr_lbl), GTK_JUSTIFY_LEFT);
    gtk_misc_set_alignment (GTK_MISC (dst_cidr_lbl), 0, 0.5);
    gtk_misc_set_padding (GTK_MISC (dst_cidr_lbl), 5, 0);

    scr_cidr_lbl = gtk_label_new (_("Source CIDR netmask"));
    gtk_widget_ref (scr_cidr_lbl);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "scr_cidr_lbl", scr_cidr_lbl,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (scr_cidr_lbl);
    gtk_table_attach (GTK_TABLE (table4), scr_cidr_lbl, 0, 1, 0, 1,
                      (GtkAttachOptions) (0),
                      (GtkAttachOptions) (0), 1, 1);
    gtk_label_set_justify (GTK_LABEL (scr_cidr_lbl), GTK_JUSTIFY_RIGHT);
    gtk_misc_set_alignment (GTK_MISC (scr_cidr_lbl), 0, 0.5);
    gtk_misc_set_padding (GTK_MISC (scr_cidr_lbl), 15, 0);

    //  start table5 here
    table5 = gtk_table_new (3, 3, FALSE);
    gtk_widget_ref (table5);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "table5", table5,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (table5);
    gtk_box_pack_start (GTK_BOX (vbox3), table5, TRUE, TRUE, 0);
    gtk_container_set_border_width (GTK_CONTAINER (table5), 1);

    src_ports = gtk_entry_new_with_max_length (255);
    gtk_widget_ref (src_ports);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "src_ports", src_ports,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (src_ports);
    gtk_table_attach (GTK_TABLE (table5), src_ports, 0, 1, 1, 2,
                      (GtkAttachOptions) (0),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_widget_set_usize (src_ports, 50, -2);

    hseparator10 = gtk_hseparator_new ();
    gtk_widget_ref (hseparator10);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hseparator10", hseparator10,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hseparator10);
    gtk_table_attach (GTK_TABLE (table5), hseparator10, 0, 1, 2, 3,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

    hseparator11 = gtk_hseparator_new ();
    gtk_widget_ref (hseparator11);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hseparator11", hseparator11,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hseparator11);
    gtk_table_attach (GTK_TABLE (table5), hseparator11, 1, 2, 2, 3,
                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                      (GtkAttachOptions) (GTK_FILL), 0, 0);

    hseparator12 = gtk_hseparator_new ();
    gtk_widget_ref (hseparator12);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hseparator12", hseparator12,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hseparator12);
    gtk_table_attach (GTK_TABLE (table5), hseparator12, 2, 3, 2, 3,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (GTK_FILL), 0, 0);

    dst_ports = gtk_entry_new_with_max_length (255);
    gtk_widget_ref (dst_ports);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "dst_ports", dst_ports,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (dst_ports);
    gtk_table_attach (GTK_TABLE (table5), dst_ports, 2, 3, 1, 2,
                      (GtkAttachOptions) (0),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_widget_set_usize (dst_ports, 50, -2);

    vseparator6 = gtk_vseparator_new ();
    gtk_widget_ref (vseparator6);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "vseparator6", vseparator6,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vseparator6);
    gtk_table_attach (GTK_TABLE (table5), vseparator6, 1, 2, 1, 2,
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL),
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL), 0, 0);

    vseparator7 = gtk_vseparator_new ();
    gtk_widget_ref (vseparator7);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "vseparator7", vseparator7,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (vseparator7);
    gtk_table_attach (GTK_TABLE (table5), vseparator7, 1, 2, 0, 1,
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL),
                      (GtkAttachOptions) (GTK_SHRINK | GTK_FILL), 0, 0);
    
    src_p_chk = gtk_check_button_new_with_label (_("Filter on Source Ports"));
    gtk_widget_ref (src_p_chk);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "src_p_chk", src_p_chk,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (src_p_chk);
    gtk_table_attach (GTK_TABLE (table5), src_p_chk, 0, 1, 0, 1,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 10, 0);
    gtk_container_set_border_width (GTK_CONTAINER (src_p_chk), 2);

    dst_p_chk = gtk_check_button_new_with_label (_("Filter on Destination Ports"));
    gtk_widget_ref (dst_p_chk);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "dst_p_chk", dst_p_chk,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (dst_p_chk);
    gtk_table_attach (GTK_TABLE (table5), dst_p_chk, 2, 3, 0, 1,
                      (GtkAttachOptions) (GTK_FILL),
                      (GtkAttachOptions) (0), 0, 0);
    gtk_container_set_border_width (GTK_CONTAINER (dst_p_chk), 2);

    hbox8 = gtk_hbox_new (FALSE, 0);
    gtk_widget_ref (hbox8);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "hbox8", hbox8,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (hbox8);
    gtk_box_pack_start (GTK_BOX (vbox3), hbox8, TRUE, TRUE, 2);
    gtk_container_set_border_width (GTK_CONTAINER (hbox8), 1);

    ok_button = gtk_button_new_with_label (_("Ok"));
    gtk_widget_ref (ok_button);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "ok_button", ok_button,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (ok_button);
    gtk_box_pack_start (GTK_BOX (hbox8), ok_button, TRUE, FALSE, 1);
    gtk_widget_set_usize (ok_button, 50, -2);
    gtk_container_set_border_width (GTK_CONTAINER (ok_button), 1);

    cancel_button = gtk_button_new_with_label (_("Cancel"));
    gtk_widget_ref (cancel_button);
    gtk_object_set_data_full (GTK_OBJECT (ip_filter_dialog), "cancel_button", cancel_button,
                              (GtkDestroyNotify) gtk_widget_unref);
    gtk_widget_show (cancel_button);
    gtk_box_pack_start (GTK_BOX (hbox8), cancel_button, TRUE, FALSE, 1);
    gtk_widget_set_usize (cancel_button, 50, -2);
    gtk_container_set_border_width (GTK_CONTAINER (cancel_button), 1);

    context = malloc(sizeof(struct IP_Filter_Dialog_Context));
    context->dialog = ip_filter_dialog;
    /* XXX */
    context->src_chk = GTK_CHECK_BUTTON(src_filter_check);
    context->dst_chk = GTK_CHECK_BUTTON(dst_filter_check);
    context->src_entry_1 = GTK_ENTRY(src_1);
    context->src_entry_2 = GTK_ENTRY(src_2);
    context->src_entry_3 = GTK_ENTRY(src_3);
    context->src_entry_4 = GTK_ENTRY(src_4);
    context->dst_entry_1 = GTK_ENTRY(dst_1);
    context->dst_entry_2 = GTK_ENTRY(dst_2);
    context->dst_entry_3 = GTK_ENTRY(dst_3);
    context->dst_entry_4 = GTK_ENTRY(dst_4);
    context->src_cidr = GTK_ENTRY(src_cidr);
    context->dst_cidr = GTK_ENTRY(dst_cidr);
    context->src_port_chk = GTK_CHECK_BUTTON(src_p_chk);
    context->dst_port_chk = GTK_CHECK_BUTTON(dst_p_chk);
    context->src_port_entry = GTK_ENTRY(src_ports);
    context->dst_port_entry = GTK_ENTRY(dst_ports);

    gtk_signal_connect (GTK_OBJECT (ok_button), "clicked",
                        GTK_SIGNAL_FUNC (on_filter_ok_clicked),
                        context);
    gtk_signal_connect (GTK_OBJECT (cancel_button), "clicked",
                        GTK_SIGNAL_FUNC (on_filter_cancel_clicked),
                        ip_filter_dialog);


    return context;
}


syntax highlighted by Code2HTML, v. 0.9.1