added selection of different main window pane layouts,
also added some preferences and a new preference page for this svn path=/trunk/; revision=10729
This commit is contained in:
parent
9cd7838304
commit
414b631700
|
@ -1,7 +1,7 @@
|
|||
# Makefile.am
|
||||
# Automake file for the GTK interface routines for Ethereal
|
||||
#
|
||||
# $Id: Makefile.am,v 1.95 2004/04/23 02:00:13 gerald Exp $
|
||||
# $Id: Makefile.am,v 1.96 2004/04/29 17:03:27 ulfl Exp $
|
||||
#
|
||||
# Ethereal - Network traffic analyzer
|
||||
# By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -59,6 +59,7 @@ noinst_HEADERS = \
|
|||
help_dlg.h \
|
||||
hostlist_table.h \
|
||||
keys.h \
|
||||
layout_prefs.h \
|
||||
main.h \
|
||||
menu.h \
|
||||
mtp3_stat.h \
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# a) common to both files and
|
||||
# b) portable between both files
|
||||
#
|
||||
# $Id: Makefile.common,v 1.11 2004/04/22 21:29:34 ulfl Exp $
|
||||
# $Id: Makefile.common,v 1.12 2004/04/29 17:03:27 ulfl Exp $
|
||||
#
|
||||
# Ethereal - Network traffic analyzer
|
||||
# By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -52,6 +52,7 @@ ETHEREAL_GTK_SRC = \
|
|||
gui_prefs.c \
|
||||
help_dlg.c \
|
||||
hostlist_table.c \
|
||||
layout_prefs.c \
|
||||
main.c \
|
||||
menu.c \
|
||||
nameres_prefs.c \
|
||||
|
|
|
@ -0,0 +1,385 @@
|
|||
/* layout_prefs.c
|
||||
* Dialog box for layout preferences
|
||||
*
|
||||
* $Id: layout_prefs.c,v 1.1 2004/04/29 17:03:27 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
* Copyright 1998 Gerald Combs
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "globals.h"
|
||||
#include "layout_prefs.h"
|
||||
#include "gtkglobals.h"
|
||||
/*#include <epan/resolv.h>*/
|
||||
#include "prefs.h"
|
||||
/*#include "prefs_dlg.h"*/
|
||||
/*#include "ui_util.h"*/
|
||||
#include "main.h"
|
||||
#include "compat_macros.h"
|
||||
/*#include "dlg_utils.h"*/
|
||||
|
||||
#include "../image/icon_layout_1.xpm"
|
||||
#include "../image/icon_layout_2.xpm"
|
||||
#include "../image/icon_layout_3.xpm"
|
||||
#include "../image/icon_layout_4.xpm"
|
||||
#include "../image/icon_layout_5.xpm"
|
||||
#include "../image/icon_layout_6.xpm"
|
||||
|
||||
#define LAYOUT_QTY 6
|
||||
|
||||
|
||||
static void layout_validate_cb(GtkWidget *w _U_, gpointer data);
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
layout_type_e type;
|
||||
layout_pane_content_e content[3];
|
||||
} layout_t;
|
||||
|
||||
|
||||
#define LAYOUT_TYPE_BUTTONS_KEY "layout_type_buttons"
|
||||
|
||||
#define LAYOUT_NONE_RB_KEY "layout_none_radio_button"
|
||||
#define LAYOUT_PLIST_RB_KEY "layout_plist_radio_button"
|
||||
#define LAYOUT_PDETAILS_RB_KEY "layout_pdetails_radio_button"
|
||||
#define LAYOUT_PBYTES_RB_KEY "layout_pbytes_radio_button"
|
||||
|
||||
#define LAYOUT_CONTENT1_VB_KEY "layout_content1_vbox"
|
||||
#define LAYOUT_CONTENT2_VB_KEY "layout_content2_vbox"
|
||||
#define LAYOUT_CONTENT3_VB_KEY "layout_content3_vbox"
|
||||
|
||||
|
||||
/* be sure to use a parent widget which is already being displayed */
|
||||
static GtkWidget *xpm_to_widget(GtkWidget *parent, const char ** xpm) {
|
||||
#if GTK_MAJOR_VERSION < 2
|
||||
GdkPixmap *icon;
|
||||
GdkBitmap * mask;
|
||||
|
||||
|
||||
icon = gdk_pixmap_create_from_xpm_d(parent->window, &mask, &parent->style->white, (char **) xpm);
|
||||
return gtk_pixmap_new(icon, mask);
|
||||
#else
|
||||
GdkPixbuf * pixbuf;
|
||||
GdkPixmap * pixmap;
|
||||
GdkBitmap * bitmap;
|
||||
|
||||
|
||||
pixbuf = gdk_pixbuf_new_from_xpm_data(xpm);
|
||||
gdk_pixbuf_render_pixmap_and_mask_for_colormap (pixbuf, gtk_widget_get_colormap(parent), &pixmap, &bitmap, 128);
|
||||
|
||||
return gtk_image_new_from_pixmap (pixmap, bitmap);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static GtkWidget *layout_content_radio_vbox(GtkWidget *main_vb, GtkTooltips *tooltips, int i, layout_pane_content_e content) {
|
||||
GtkWidget *radio_vb, *radio_lb;
|
||||
GtkWidget *radio_none_rb, *radio_plist_rb, *radio_pdetails_rb, *radio_pbytes_rb;
|
||||
char buf[64];
|
||||
|
||||
|
||||
/* radio vbox */
|
||||
radio_vb = gtk_vbox_new(FALSE, 0);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(radio_vb), 6);
|
||||
|
||||
g_snprintf (buf, sizeof(buf), "Pane %d:", i);
|
||||
radio_lb = gtk_label_new(buf);
|
||||
gtk_misc_set_alignment(GTK_MISC(radio_lb), 0.0, 0.5);
|
||||
gtk_container_add(GTK_CONTAINER(radio_vb), radio_lb);
|
||||
|
||||
radio_none_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(NULL, "None", NULL);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(radio_none_rb), content == layout_pane_content_none);
|
||||
gtk_tooltips_set_tip (tooltips, radio_none_rb, "Put nothing in this pane.", NULL);
|
||||
gtk_container_add(GTK_CONTAINER(radio_vb), radio_none_rb);
|
||||
|
||||
radio_plist_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(radio_none_rb, "Packet List", NULL);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(radio_plist_rb), content == layout_pane_content_plist);
|
||||
gtk_tooltips_set_tip (tooltips, radio_plist_rb, "Put the packet list in this pane.", NULL);
|
||||
gtk_container_add(GTK_CONTAINER(radio_vb), radio_plist_rb);
|
||||
|
||||
radio_pdetails_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(radio_none_rb, "Packet Details", NULL);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(radio_pdetails_rb), content == layout_pane_content_pdetails);
|
||||
gtk_tooltips_set_tip (tooltips, radio_pdetails_rb, "Put the packet details tree in this pane.", NULL);
|
||||
gtk_container_add(GTK_CONTAINER(radio_vb), radio_pdetails_rb);
|
||||
|
||||
radio_pbytes_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(radio_none_rb, "Packet Bytes", NULL);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(radio_pbytes_rb), content == layout_pane_content_pbytes);
|
||||
gtk_tooltips_set_tip (tooltips, radio_pbytes_rb, "Put the packet bytes hexdump in this pane.", NULL);
|
||||
gtk_container_add(GTK_CONTAINER(radio_vb), radio_pbytes_rb);
|
||||
|
||||
OBJECT_SET_DATA(radio_vb, LAYOUT_NONE_RB_KEY, radio_none_rb);
|
||||
OBJECT_SET_DATA(radio_vb, LAYOUT_PLIST_RB_KEY, radio_plist_rb);
|
||||
OBJECT_SET_DATA(radio_vb, LAYOUT_PDETAILS_RB_KEY, radio_pdetails_rb);
|
||||
OBJECT_SET_DATA(radio_vb, LAYOUT_PBYTES_RB_KEY, radio_pbytes_rb);
|
||||
|
||||
SIGNAL_CONNECT(radio_none_rb, "toggled", layout_validate_cb, main_vb);
|
||||
SIGNAL_CONNECT(radio_plist_rb, "toggled", layout_validate_cb, main_vb);
|
||||
SIGNAL_CONNECT(radio_pdetails_rb, "toggled", layout_validate_cb, main_vb);
|
||||
SIGNAL_CONNECT(radio_pbytes_rb, "toggled", layout_validate_cb, main_vb);
|
||||
|
||||
return radio_vb;
|
||||
}
|
||||
|
||||
static void
|
||||
layout_type_changed_cb (GtkToggleButton * togglebutton, gpointer user_data)
|
||||
{
|
||||
GtkWidget ** layout_type_buttons = (GtkWidget**) user_data;
|
||||
static gboolean dampen_feedback_loop = FALSE;
|
||||
|
||||
if (!dampen_feedback_loop) {
|
||||
int i;
|
||||
dampen_feedback_loop = TRUE;
|
||||
for (i=0; i<LAYOUT_QTY; ++i) {
|
||||
GtkToggleButton * tb = GTK_TOGGLE_BUTTON(layout_type_buttons[i]);
|
||||
gboolean active = togglebutton==tb;
|
||||
if (gtk_toggle_button_get_active(tb) != active)
|
||||
gtk_toggle_button_set_active (tb, active);
|
||||
}
|
||||
dampen_feedback_loop = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static layout_pane_content_e layout_pane_get_content(GtkWidget * radio_vb) {
|
||||
|
||||
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(radio_vb, LAYOUT_NONE_RB_KEY))))
|
||||
return layout_pane_content_none;
|
||||
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(radio_vb, LAYOUT_PLIST_RB_KEY))))
|
||||
return layout_pane_content_plist;
|
||||
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(radio_vb, LAYOUT_PDETAILS_RB_KEY))))
|
||||
return layout_pane_content_pdetails;
|
||||
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(radio_vb, LAYOUT_PBYTES_RB_KEY))))
|
||||
return layout_pane_content_pbytes;
|
||||
|
||||
g_assert_not_reached();
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void layout_pane_set_content(GtkWidget * radio_vb, layout_pane_content_e pane_content) {
|
||||
|
||||
|
||||
switch(pane_content) {
|
||||
case(layout_pane_content_none):
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(radio_vb, LAYOUT_NONE_RB_KEY)), TRUE);
|
||||
break;
|
||||
case(layout_pane_content_plist):
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(radio_vb, LAYOUT_PLIST_RB_KEY)), TRUE);
|
||||
break;
|
||||
case(layout_pane_content_pdetails):
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(radio_vb, LAYOUT_PDETAILS_RB_KEY)), TRUE);
|
||||
break;
|
||||
case(layout_pane_content_pbytes):
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(OBJECT_GET_DATA(radio_vb, LAYOUT_PBYTES_RB_KEY)), TRUE);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void layout_set(GtkWidget * main_vb, layout_t *layout) {
|
||||
GtkWidget *radio_vb;
|
||||
GtkWidget ** layout_type_buttons = OBJECT_GET_DATA(main_vb, LAYOUT_TYPE_BUTTONS_KEY);
|
||||
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(layout_type_buttons[layout->type - 1]), TRUE);
|
||||
|
||||
radio_vb = OBJECT_GET_DATA(main_vb, LAYOUT_CONTENT1_VB_KEY);
|
||||
layout_pane_set_content(radio_vb, layout->content[0]);
|
||||
radio_vb = OBJECT_GET_DATA(main_vb, LAYOUT_CONTENT2_VB_KEY);
|
||||
layout_pane_set_content(radio_vb, layout->content[1]);
|
||||
radio_vb = OBJECT_GET_DATA(main_vb, LAYOUT_CONTENT3_VB_KEY);
|
||||
layout_pane_set_content(radio_vb, layout->content[2]);
|
||||
}
|
||||
|
||||
static void layout_get(GtkWidget * main_vb, layout_t *layout_out) {
|
||||
GtkWidget *radio_vb;
|
||||
GtkWidget ** layout_type_buttons = OBJECT_GET_DATA(main_vb, LAYOUT_TYPE_BUTTONS_KEY);
|
||||
int i;
|
||||
|
||||
for (i=0; i<LAYOUT_QTY; ++i) {
|
||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(layout_type_buttons[i]))) {
|
||||
layout_out->type = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
radio_vb = OBJECT_GET_DATA(main_vb, LAYOUT_CONTENT1_VB_KEY);
|
||||
layout_out->content[0] = layout_pane_get_content(radio_vb);
|
||||
radio_vb = OBJECT_GET_DATA(main_vb, LAYOUT_CONTENT2_VB_KEY);
|
||||
layout_out->content[1] = layout_pane_get_content(radio_vb);
|
||||
radio_vb = OBJECT_GET_DATA(main_vb, LAYOUT_CONTENT3_VB_KEY);
|
||||
layout_out->content[2] = layout_pane_get_content(radio_vb);
|
||||
}
|
||||
|
||||
static void layout_validate(layout_t *layout) {
|
||||
|
||||
if(layout->content[1] == layout->content[0]) {
|
||||
layout->content[1] = layout_pane_content_none;
|
||||
}
|
||||
if(layout->content[2] == layout->content[0] || layout->content[2] == layout->content[1]) {
|
||||
layout->content[2] = layout_pane_content_none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void layout_validate_cb(GtkWidget *w _U_, gpointer data) {
|
||||
layout_t layout;
|
||||
|
||||
layout_get(data, &layout);
|
||||
layout_validate(&layout);
|
||||
layout_set(data, &layout);
|
||||
}
|
||||
|
||||
static void
|
||||
layout_defaults_cb (GtkWidget * w _U_, gpointer data _U_)
|
||||
{
|
||||
layout_t default_layout = {
|
||||
layout_type_5,
|
||||
layout_pane_content_plist,
|
||||
layout_pane_content_pdetails,
|
||||
layout_pane_content_pbytes
|
||||
};
|
||||
|
||||
layout_set(data, &default_layout);
|
||||
}
|
||||
|
||||
|
||||
GtkWidget*
|
||||
layout_prefs_show(void)
|
||||
{
|
||||
#if GTK_MAJOR_VERSION < 2
|
||||
GtkAccelGroup *accel_group;
|
||||
#endif
|
||||
GtkTooltips *tooltips;
|
||||
|
||||
GtkWidget *main_vb, *button_hb, *type_tb;
|
||||
GtkWidget *radio_hb, *radio_vb;
|
||||
GtkWidget *default_vb, *default_bt;
|
||||
|
||||
const guint8 ** inline_txt [LAYOUT_QTY] = {
|
||||
icon_layout_5_xpm, icon_layout_2_xpm, icon_layout_1_xpm,
|
||||
icon_layout_4_xpm, icon_layout_3_xpm, icon_layout_6_xpm };
|
||||
GtkWidget ** layout_type_buttons = g_malloc (sizeof(GtkWidget*) * LAYOUT_QTY);
|
||||
|
||||
int i;
|
||||
|
||||
|
||||
/* main vertical box */
|
||||
main_vb = gtk_vbox_new(FALSE, 7);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(main_vb), 5);
|
||||
|
||||
#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(main_win), accel_group);*/
|
||||
#endif
|
||||
|
||||
/* Enable tooltips */
|
||||
tooltips = gtk_tooltips_new();
|
||||
|
||||
|
||||
/* button hbox */
|
||||
button_hb = gtk_hbox_new(FALSE, 0);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(button_hb), 6);
|
||||
gtk_box_pack_start (GTK_BOX(main_vb), button_hb, FALSE, FALSE, 0);
|
||||
|
||||
/* pane layout */
|
||||
for (i=0; i<LAYOUT_QTY; ++i)
|
||||
{
|
||||
type_tb = gtk_toggle_button_new ();
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(type_tb), (i + 1) == prefs.gui_layout_type);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER(type_tb), xpm_to_widget(top_level, inline_txt[i]));
|
||||
|
||||
SIGNAL_CONNECT(type_tb, "toggled", layout_type_changed_cb, layout_type_buttons);
|
||||
layout_type_buttons[i] = type_tb;
|
||||
gtk_box_pack_start (GTK_BOX(button_hb), type_tb, TRUE, FALSE, 0);
|
||||
}
|
||||
|
||||
OBJECT_SET_DATA(main_vb, LAYOUT_TYPE_BUTTONS_KEY, layout_type_buttons);
|
||||
|
||||
/* radio hbox */
|
||||
radio_hb = gtk_hbox_new(FALSE, 0);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(radio_hb), 6);
|
||||
gtk_box_pack_start (GTK_BOX(main_vb), radio_hb, FALSE, FALSE, 0);
|
||||
|
||||
radio_vb = layout_content_radio_vbox(main_vb, tooltips, 1, prefs.gui_layout_content_1);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(radio_vb), 6);
|
||||
gtk_box_pack_start (GTK_BOX(radio_hb), radio_vb, FALSE, FALSE, 0);
|
||||
OBJECT_SET_DATA(main_vb, LAYOUT_CONTENT1_VB_KEY, radio_vb);
|
||||
|
||||
radio_vb = layout_content_radio_vbox(main_vb, tooltips, 2, prefs.gui_layout_content_2);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(radio_vb), 6);
|
||||
gtk_box_pack_start (GTK_BOX(radio_hb), radio_vb, FALSE, FALSE, 0);
|
||||
OBJECT_SET_DATA(main_vb, LAYOUT_CONTENT2_VB_KEY, radio_vb);
|
||||
|
||||
radio_vb = layout_content_radio_vbox(main_vb, tooltips, 3, prefs.gui_layout_content_3);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(radio_vb), 6);
|
||||
gtk_box_pack_start (GTK_BOX(radio_hb), radio_vb, FALSE, FALSE, 0);
|
||||
OBJECT_SET_DATA(main_vb, LAYOUT_CONTENT3_VB_KEY, radio_vb);
|
||||
|
||||
default_vb = gtk_vbox_new(FALSE, 0);
|
||||
default_bt = gtk_button_new_with_label("Defaults");
|
||||
gtk_tooltips_set_tip (tooltips, default_bt, "Reset the pane layout settings to default values.", NULL);
|
||||
SIGNAL_CONNECT(default_bt, "clicked", layout_defaults_cb, main_vb);
|
||||
gtk_box_pack_end(GTK_BOX(default_vb), default_bt, FALSE, FALSE, 0);
|
||||
gtk_box_pack_end(GTK_BOX(radio_hb), default_vb, FALSE, FALSE, 0);
|
||||
|
||||
/* Show 'em what we got */
|
||||
gtk_widget_show_all(main_vb);
|
||||
|
||||
return(main_vb);
|
||||
}
|
||||
|
||||
void
|
||||
layout_prefs_fetch(GtkWidget *w)
|
||||
{
|
||||
layout_t layout_fetched;
|
||||
|
||||
layout_get(w, &layout_fetched);
|
||||
|
||||
prefs.gui_layout_type = layout_fetched.type;
|
||||
prefs.gui_layout_content_1 = layout_fetched.content[0];
|
||||
prefs.gui_layout_content_2 = layout_fetched.content[1];
|
||||
prefs.gui_layout_content_3 = layout_fetched.content[2];
|
||||
}
|
||||
|
||||
void
|
||||
layout_prefs_apply(GtkWidget *w _U_)
|
||||
{
|
||||
main_widgets_rearrange();
|
||||
}
|
||||
|
||||
void
|
||||
layout_prefs_destroy(GtkWidget *main_vb)
|
||||
{
|
||||
GtkWidget ** layout_type_buttons = OBJECT_GET_DATA(main_vb, LAYOUT_TYPE_BUTTONS_KEY);
|
||||
|
||||
g_free(layout_type_buttons);
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
/* layout_prefs.h
|
||||
* Definitions for layout preferences window
|
||||
*
|
||||
* $Id: layout_prefs.h,v 1.1 2004/04/29 17:03:27 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
* Copyright 1998 Gerald Combs
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __LAYOUT_PREFS_H__
|
||||
#define __LAYOUT_PREFS_H__
|
||||
|
||||
typedef enum {
|
||||
layout_unused, /* entry currently unused */
|
||||
layout_type_5,
|
||||
layout_type_2,
|
||||
layout_type_1,
|
||||
layout_type_4,
|
||||
layout_type_3,
|
||||
layout_type_6
|
||||
} layout_type_e;
|
||||
|
||||
typedef enum {
|
||||
layout_pane_content_none,
|
||||
layout_pane_content_plist,
|
||||
layout_pane_content_pdetails,
|
||||
layout_pane_content_pbytes
|
||||
} layout_pane_content_e;
|
||||
|
||||
|
||||
GtkWidget *layout_prefs_show(void);
|
||||
void layout_prefs_fetch(GtkWidget *w);
|
||||
void layout_prefs_apply(GtkWidget *w);
|
||||
void layout_prefs_destroy(GtkWidget *w);
|
||||
|
||||
#endif
|
172
gtk/main.c
172
gtk/main.c
|
@ -1,6 +1,6 @@
|
|||
/* main.c
|
||||
*
|
||||
* $Id: main.c,v 1.426 2004/04/27 19:16:11 ulfl Exp $
|
||||
* $Id: main.c,v 1.427 2004/04/29 17:03:27 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -89,6 +89,7 @@
|
|||
#include "color_filters.h"
|
||||
#include "color_utils.h"
|
||||
#include "filter_prefs.h"
|
||||
#include "layout_prefs.h"
|
||||
#include "file_dlg.h"
|
||||
#include "column.h"
|
||||
#include "print.h"
|
||||
|
@ -131,7 +132,8 @@
|
|||
capture_file cfile;
|
||||
GtkWidget *main_display_filter_widget=NULL;
|
||||
GtkWidget *top_level = NULL, *tree_view, *byte_nb_ptr, *tv_scrollw;
|
||||
GtkWidget *main_upper_pane, *main_lower_pane;
|
||||
GtkWidget *none_lb, *main_pane_v1, *main_pane_v2, *main_pane_h1, *main_pane_h2;
|
||||
GtkWidget *main_first_pane, *main_second_pane;
|
||||
GtkWidget *status_pane;
|
||||
GtkWidget *menubar, *main_vbox, *main_tb, *pkt_scrollw, *stat_hbox, *filter_tb;
|
||||
static GtkWidget *info_bar;
|
||||
|
@ -1287,12 +1289,13 @@ main_load_window_geometry(GtkWidget *widget
|
|||
}
|
||||
}
|
||||
|
||||
/* XXX - rename recent settings? */
|
||||
if (recent.gui_geometry_main_upper_pane)
|
||||
gtk_paned_set_position(GTK_PANED(main_upper_pane), recent.gui_geometry_main_upper_pane);
|
||||
gtk_paned_set_position(GTK_PANED(main_first_pane), recent.gui_geometry_main_upper_pane);
|
||||
if (recent.gui_geometry_main_lower_pane)
|
||||
gtk_paned_set_position(GTK_PANED(main_lower_pane), recent.gui_geometry_main_lower_pane);
|
||||
gtk_paned_set_position(GTK_PANED(main_second_pane), recent.gui_geometry_main_lower_pane);
|
||||
if (recent.gui_geometry_status_pane)
|
||||
gtk_paned_set_position(GTK_PANED(status_pane), recent.gui_geometry_status_pane);
|
||||
gtk_paned_set_position(GTK_PANED(status_pane), recent.gui_geometry_status_pane);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1348,8 +1351,8 @@ main_save_window_geometry(GtkWidget *widget)
|
|||
recent.gui_geometry_main_maximized = (state == GDK_WINDOW_STATE_MAXIMIZED);
|
||||
}
|
||||
|
||||
recent.gui_geometry_main_upper_pane = gtk_paned_get_position(GTK_PANED(main_upper_pane));
|
||||
recent.gui_geometry_main_lower_pane = gtk_paned_get_position(GTK_PANED(main_lower_pane));
|
||||
recent.gui_geometry_main_upper_pane = gtk_paned_get_position(GTK_PANED(main_first_pane));
|
||||
recent.gui_geometry_main_lower_pane = gtk_paned_get_position(GTK_PANED(main_second_pane));
|
||||
recent.gui_geometry_status_pane = gtk_paned_get_position(GTK_PANED(status_pane));
|
||||
#endif
|
||||
}
|
||||
|
@ -3524,12 +3527,34 @@ void foreach_remove_a_child(GtkWidget *widget, gpointer data) {
|
|||
gtk_container_remove(GTK_CONTAINER(data), widget);
|
||||
}
|
||||
|
||||
GtkWidget *main_widget_layout(gint layout_content)
|
||||
{
|
||||
switch(layout_content) {
|
||||
case(layout_pane_content_none):
|
||||
return none_lb;
|
||||
break;
|
||||
case(layout_pane_content_plist):
|
||||
return pkt_scrollw;
|
||||
break;
|
||||
case(layout_pane_content_pdetails):
|
||||
return tv_scrollw;
|
||||
break;
|
||||
case(layout_pane_content_pbytes):
|
||||
return byte_nb_ptr;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Rearrange the main window widgets
|
||||
*/
|
||||
void main_widgets_rearrange(void) {
|
||||
gint widgets = 0;
|
||||
GtkWidget *w[10];
|
||||
GtkWidget *pane_content[3];
|
||||
gboolean filter_toolbar_show_in_statusbar = prefs.filter_toolbar_show_in_statusbar;
|
||||
|
||||
/* be a bit faster */
|
||||
|
@ -3542,19 +3567,24 @@ void main_widgets_rearrange(void) {
|
|||
gtk_widget_ref(pkt_scrollw);
|
||||
gtk_widget_ref(tv_scrollw);
|
||||
gtk_widget_ref(byte_nb_ptr);
|
||||
gtk_widget_ref(main_upper_pane);
|
||||
gtk_widget_ref(main_lower_pane);
|
||||
gtk_widget_ref(stat_hbox);
|
||||
gtk_widget_ref(info_bar);
|
||||
gtk_widget_ref(packets_bar);
|
||||
gtk_widget_ref(status_pane);
|
||||
gtk_widget_ref(none_lb);
|
||||
gtk_widget_ref(main_pane_v1);
|
||||
gtk_widget_ref(main_pane_v2);
|
||||
gtk_widget_ref(main_pane_h1);
|
||||
gtk_widget_ref(main_pane_h2);
|
||||
|
||||
/* empty all containers participating */
|
||||
gtk_container_foreach(GTK_CONTAINER(main_vbox), foreach_remove_a_child, main_vbox);
|
||||
gtk_container_foreach(GTK_CONTAINER(main_upper_pane), foreach_remove_a_child, main_upper_pane);
|
||||
gtk_container_foreach(GTK_CONTAINER(main_lower_pane), foreach_remove_a_child, main_lower_pane);
|
||||
gtk_container_foreach(GTK_CONTAINER(main_vbox), foreach_remove_a_child, main_vbox);
|
||||
gtk_container_foreach(GTK_CONTAINER(stat_hbox), foreach_remove_a_child, stat_hbox);
|
||||
gtk_container_foreach(GTK_CONTAINER(status_pane), foreach_remove_a_child, status_pane);
|
||||
gtk_container_foreach(GTK_CONTAINER(status_pane), foreach_remove_a_child, status_pane);
|
||||
gtk_container_foreach(GTK_CONTAINER(main_pane_v1), foreach_remove_a_child, main_pane_v1);
|
||||
gtk_container_foreach(GTK_CONTAINER(main_pane_v2), foreach_remove_a_child, main_pane_v2);
|
||||
gtk_container_foreach(GTK_CONTAINER(main_pane_h1), foreach_remove_a_child, main_pane_h1);
|
||||
gtk_container_foreach(GTK_CONTAINER(main_pane_h2), foreach_remove_a_child, main_pane_h2);
|
||||
|
||||
/* add the menubar always at the top */
|
||||
gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, TRUE, 0);
|
||||
|
@ -3569,39 +3599,85 @@ void main_widgets_rearrange(void) {
|
|||
gtk_box_pack_start(GTK_BOX(main_vbox), filter_tb, FALSE, TRUE, 1);
|
||||
}
|
||||
|
||||
/* get the info, which and how many of the main widgets should be shown */
|
||||
/* get the corresponding widgets to the content setting */
|
||||
pane_content[0] = main_widget_layout(prefs.gui_layout_content_1);
|
||||
pane_content[1] = main_widget_layout(prefs.gui_layout_content_2);
|
||||
pane_content[2] = main_widget_layout(prefs.gui_layout_content_3);
|
||||
|
||||
/* fill the main layout panes */
|
||||
switch(prefs.gui_layout_type) {
|
||||
case(layout_type_5):
|
||||
main_first_pane = main_pane_v1;
|
||||
main_second_pane = main_pane_v2;
|
||||
gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
|
||||
gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
|
||||
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
|
||||
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
|
||||
break;
|
||||
case(layout_type_2):
|
||||
main_first_pane = main_pane_v1;
|
||||
main_second_pane = main_pane_h1;
|
||||
gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
|
||||
gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
|
||||
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
|
||||
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
|
||||
break;
|
||||
case(layout_type_1):
|
||||
main_first_pane = main_pane_v1;
|
||||
main_second_pane = main_pane_h1;
|
||||
gtk_paned_add1(GTK_PANED(main_first_pane), main_second_pane);
|
||||
gtk_paned_add2(GTK_PANED(main_first_pane), pane_content[2]);
|
||||
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[0], TRUE, TRUE);
|
||||
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[1], FALSE, FALSE);
|
||||
break;
|
||||
case(layout_type_4):
|
||||
main_first_pane = main_pane_h1;
|
||||
main_second_pane = main_pane_v1;
|
||||
gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
|
||||
gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
|
||||
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
|
||||
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
|
||||
break;
|
||||
case(layout_type_3):
|
||||
main_first_pane = main_pane_h1;
|
||||
main_second_pane = main_pane_v1;
|
||||
gtk_paned_add1(GTK_PANED(main_first_pane), main_second_pane);
|
||||
gtk_paned_add2(GTK_PANED(main_first_pane), pane_content[2]);
|
||||
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[0], TRUE, TRUE);
|
||||
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[1], FALSE, FALSE);
|
||||
break;
|
||||
case(layout_type_6):
|
||||
main_first_pane = main_pane_h1;
|
||||
main_second_pane = main_pane_h2;
|
||||
gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
|
||||
gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
|
||||
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
|
||||
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(main_vbox), main_first_pane);
|
||||
|
||||
/* hide widgets on users recent settings */
|
||||
/* XXX - do we still need this? */
|
||||
if (recent.packet_list_show) {
|
||||
w[widgets++] = pkt_scrollw;
|
||||
gtk_widget_show(pkt_scrollw);
|
||||
} else {
|
||||
gtk_widget_hide(pkt_scrollw);
|
||||
}
|
||||
|
||||
if (recent.tree_view_show) {
|
||||
w[widgets++] = tv_scrollw;
|
||||
gtk_widget_show(tv_scrollw);
|
||||
} else {
|
||||
gtk_widget_hide(tv_scrollw);
|
||||
}
|
||||
|
||||
if (recent.byte_view_show) {
|
||||
w[widgets++] = byte_nb_ptr;
|
||||
}
|
||||
|
||||
/* show the main widgets, depending on their number */
|
||||
switch(widgets) {
|
||||
case(0):
|
||||
break;
|
||||
case(1):
|
||||
gtk_container_add(GTK_CONTAINER(main_vbox), w[0]);
|
||||
break;
|
||||
case(2):
|
||||
gtk_container_add(GTK_CONTAINER(main_vbox), main_upper_pane);
|
||||
gtk_paned_pack1(GTK_PANED(main_upper_pane), w[0], TRUE, TRUE);
|
||||
gtk_paned_pack2(GTK_PANED(main_upper_pane), w[1], FALSE, FALSE);
|
||||
break;
|
||||
case(3):
|
||||
gtk_container_add(GTK_CONTAINER(main_vbox), main_upper_pane);
|
||||
gtk_paned_add1(GTK_PANED(main_upper_pane), w[0]);
|
||||
gtk_paned_add2(GTK_PANED(main_upper_pane), main_lower_pane);
|
||||
|
||||
gtk_paned_pack1(GTK_PANED(main_lower_pane), w[1], TRUE, TRUE);
|
||||
gtk_paned_pack2(GTK_PANED(main_lower_pane), w[2], FALSE, FALSE);
|
||||
break;
|
||||
gtk_widget_show(byte_nb_ptr);
|
||||
} else {
|
||||
gtk_widget_hide(byte_nb_ptr);
|
||||
}
|
||||
|
||||
/* statusbar hbox */
|
||||
|
@ -3624,6 +3700,7 @@ void main_widgets_rearrange(void) {
|
|||
gtk_widget_show(main_vbox);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
|
||||
{
|
||||
|
@ -3712,13 +3789,16 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
|
|||
|
||||
|
||||
/* Panes for the packet list, tree, and byte view */
|
||||
main_lower_pane = gtk_vpaned_new();
|
||||
gtk_paned_gutter_size(GTK_PANED(main_lower_pane), (GTK_PANED(main_lower_pane))->handle_size);
|
||||
gtk_widget_show(main_lower_pane);
|
||||
none_lb = gtk_label_new("None");
|
||||
|
||||
main_upper_pane = gtk_vpaned_new();
|
||||
gtk_paned_gutter_size(GTK_PANED(main_upper_pane), (GTK_PANED(main_upper_pane))->handle_size);
|
||||
gtk_widget_show(main_upper_pane);
|
||||
main_pane_v1 = gtk_vpaned_new();
|
||||
gtk_widget_show(main_pane_v1);
|
||||
main_pane_v2 = gtk_vpaned_new();
|
||||
gtk_widget_show(main_pane_v2);
|
||||
main_pane_h1 = gtk_hpaned_new();
|
||||
gtk_widget_show(main_pane_h1);
|
||||
main_pane_h2 = gtk_hpaned_new();
|
||||
gtk_widget_show(main_pane_h2);
|
||||
|
||||
/* filter toolbar */
|
||||
#if GTK_MAJOR_VERSION < 2
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* prefs_dlg.c
|
||||
* Routines for handling preferences
|
||||
*
|
||||
* $Id: prefs_dlg.c,v 1.80 2004/03/13 15:15:25 ulfl Exp $
|
||||
* $Id: prefs_dlg.c,v 1.81 2004/04/29 17:03:27 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -42,6 +42,7 @@
|
|||
#include "print_prefs.h"
|
||||
#include "stream_prefs.h"
|
||||
#include "gui_prefs.h"
|
||||
#include "layout_prefs.h"
|
||||
#include "capture_prefs.h"
|
||||
#include "nameres_prefs.h"
|
||||
#include "ui_util.h"
|
||||
|
@ -71,6 +72,7 @@ static void prefs_tree_select_cb(GtkTreeSelection *, gpointer);
|
|||
#endif
|
||||
|
||||
#define E_GUI_PAGE_KEY "gui_options_page"
|
||||
#define E_GUI_LAYOUT_PAGE_KEY "gui_layout_page"
|
||||
#define E_GUI_COLUMN_PAGE_KEY "gui_column_options_page"
|
||||
#define E_GUI_FONT_PAGE_KEY "gui_font_options_page"
|
||||
#define E_GUI_STREAM_PAGE_KEY "gui_tcp_stream_options_page"
|
||||
|
@ -338,7 +340,7 @@ prefs_cb(GtkWidget *w _U_, gpointer dummy _U_)
|
|||
{
|
||||
GtkWidget *top_hb, *bbox, *prefs_nb, *ct_sb, *frame,
|
||||
*ok_bt, *apply_bt, *save_bt, *cancel_bt;
|
||||
GtkWidget *gui_pg, *gui_font_pg, *gui_column_pg, *gui_stream_pg;
|
||||
GtkWidget *gui_pg, *gui_layout_pg, *gui_font_pg, *gui_column_pg, *gui_stream_pg;
|
||||
#ifdef HAVE_LIBPCAP
|
||||
GtkWidget *capture_pg;
|
||||
#endif
|
||||
|
@ -465,6 +467,27 @@ prefs_cb(GtkWidget *w _U_, gpointer dummy _U_)
|
|||
#endif
|
||||
cts.page++;
|
||||
|
||||
/* GUI layout prefs */
|
||||
frame = gtk_frame_new("Layout");
|
||||
gtk_widget_show(GTK_WIDGET(frame));
|
||||
gui_layout_pg = layout_prefs_show();
|
||||
gtk_container_add(GTK_CONTAINER(frame), gui_layout_pg);
|
||||
OBJECT_SET_DATA(prefs_w, E_GUI_LAYOUT_PAGE_KEY, gui_layout_pg);
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK(prefs_nb), frame, NULL);
|
||||
strcpy(label_str, "Layout");
|
||||
#if GTK_MAJOR_VERSION < 2
|
||||
ct_node = gtk_ctree_insert_node(GTK_CTREE(cts.tree), ct_base_node, NULL,
|
||||
&label_ptr, 5, NULL, NULL, NULL, NULL, TRUE, TRUE);
|
||||
gtk_ctree_node_set_row_data(GTK_CTREE(cts.tree), ct_node,
|
||||
GINT_TO_POINTER(cts.page));
|
||||
#else
|
||||
gtk_tree_store_append(store, &iter, &base_iter);
|
||||
gtk_tree_store_set(store, &iter, 0, label_str, 1, cts.page, -1);
|
||||
/* expand the parent */
|
||||
gtk_tree_view_expand_all(GTK_TREE_VIEW(cts.tree));
|
||||
#endif
|
||||
cts.page++;
|
||||
|
||||
/* GUI Column prefs */
|
||||
frame = gtk_frame_new("Columns");
|
||||
gtk_widget_show(GTK_WIDGET(frame));
|
||||
|
@ -481,8 +504,6 @@ prefs_cb(GtkWidget *w _U_, gpointer dummy _U_)
|
|||
#else
|
||||
gtk_tree_store_append(store, &iter, &base_iter);
|
||||
gtk_tree_store_set(store, &iter, 0, label_str, 1, cts.page, -1);
|
||||
/* expand the parent */
|
||||
gtk_tree_view_expand_all(GTK_TREE_VIEW(cts.tree));
|
||||
#endif
|
||||
cts.page++;
|
||||
|
||||
|
@ -1007,6 +1028,7 @@ prefs_main_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
|
|||
column_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_COLUMN_PAGE_KEY));
|
||||
stream_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_STREAM_PAGE_KEY));
|
||||
gui_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_PAGE_KEY));
|
||||
layout_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_LAYOUT_PAGE_KEY));
|
||||
#ifdef HAVE_LIBPCAP
|
||||
#ifdef _WIN32
|
||||
/* Is WPcap loaded? */
|
||||
|
@ -1025,6 +1047,7 @@ prefs_main_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
|
|||
column_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_COLUMN_PAGE_KEY));
|
||||
stream_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_STREAM_PAGE_KEY));
|
||||
gui_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_PAGE_KEY));
|
||||
layout_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_LAYOUT_PAGE_KEY));
|
||||
#ifdef HAVE_LIBPCAP
|
||||
#ifdef _WIN32
|
||||
/* Is WPcap loaded? */
|
||||
|
@ -1059,6 +1082,7 @@ prefs_main_apply_cb(GtkWidget *apply_bt _U_, gpointer parent_w)
|
|||
column_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_COLUMN_PAGE_KEY));
|
||||
stream_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_STREAM_PAGE_KEY));
|
||||
gui_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_PAGE_KEY));
|
||||
layout_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_LAYOUT_PAGE_KEY));
|
||||
#ifdef HAVE_LIBPCAP
|
||||
#ifdef _WIN32
|
||||
/* Is WPcap loaded? */
|
||||
|
@ -1077,6 +1101,7 @@ prefs_main_apply_cb(GtkWidget *apply_bt _U_, gpointer parent_w)
|
|||
column_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_COLUMN_PAGE_KEY));
|
||||
stream_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_STREAM_PAGE_KEY));
|
||||
gui_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_PAGE_KEY));
|
||||
layout_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_LAYOUT_PAGE_KEY));
|
||||
#ifdef HAVE_LIBPCAP
|
||||
#ifdef _WIN32
|
||||
/* Is WPcap loaded? */
|
||||
|
@ -1111,6 +1136,7 @@ prefs_main_save_cb(GtkWidget *save_bt _U_, gpointer parent_w)
|
|||
column_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_COLUMN_PAGE_KEY));
|
||||
stream_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_STREAM_PAGE_KEY));
|
||||
gui_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_PAGE_KEY));
|
||||
layout_prefs_fetch(OBJECT_GET_DATA(parent_w, E_GUI_LAYOUT_PAGE_KEY));
|
||||
#ifdef HAVE_LIBPCAP
|
||||
#ifdef _WIN32
|
||||
/* Is WPcap loaded? */
|
||||
|
@ -1160,6 +1186,7 @@ prefs_main_save_cb(GtkWidget *save_bt _U_, gpointer parent_w)
|
|||
column_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_COLUMN_PAGE_KEY));
|
||||
stream_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_STREAM_PAGE_KEY));
|
||||
gui_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_PAGE_KEY));
|
||||
layout_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_LAYOUT_PAGE_KEY));
|
||||
#ifdef HAVE_LIBPCAP
|
||||
#ifdef _WIN32
|
||||
/* Is WPcap loaded? */
|
||||
|
@ -1259,6 +1286,7 @@ prefs_main_cancel_cb(GtkWidget *cancel_bt _U_, gpointer parent_w)
|
|||
column_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_COLUMN_PAGE_KEY));
|
||||
stream_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_STREAM_PAGE_KEY));
|
||||
gui_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_PAGE_KEY));
|
||||
layout_prefs_apply(OBJECT_GET_DATA(parent_w, E_GUI_LAYOUT_PAGE_KEY));
|
||||
nameres_prefs_apply(OBJECT_GET_DATA(parent_w, E_NAMERES_PAGE_KEY));
|
||||
prefs_apply_all();
|
||||
|
||||
|
@ -1289,6 +1317,7 @@ prefs_main_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_)
|
|||
column_prefs_destroy(OBJECT_GET_DATA(prefs_w, E_GUI_COLUMN_PAGE_KEY));
|
||||
stream_prefs_destroy(OBJECT_GET_DATA(prefs_w, E_GUI_STREAM_PAGE_KEY));
|
||||
gui_prefs_destroy(OBJECT_GET_DATA(prefs_w, E_GUI_PAGE_KEY));
|
||||
layout_prefs_destroy(OBJECT_GET_DATA(prefs_w, E_GUI_LAYOUT_PAGE_KEY));
|
||||
#ifdef HAVE_LIBPCAP
|
||||
#ifdef _WIN32
|
||||
/* Is WPcap loaded? */
|
||||
|
|
43
prefs.c
43
prefs.c
|
@ -1,7 +1,7 @@
|
|||
/* prefs.c
|
||||
* Routines for handling preferences
|
||||
*
|
||||
* $Id: prefs.c,v 1.128 2004/04/06 19:02:17 ulfl Exp $
|
||||
* $Id: prefs.c,v 1.129 2004/04/29 17:03:26 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -95,6 +95,9 @@ static gchar *gui_fileopen_style_text[] =
|
|||
static gchar *gui_toolbar_style_text[] =
|
||||
{ "ICONS", "TEXT", "BOTH", NULL };
|
||||
|
||||
static gchar *gui_layout_content_text[] =
|
||||
{ "NONE", "PLIST", "PDETAILS", "PBYTES", NULL };
|
||||
|
||||
/*
|
||||
* List of all modules with preference settings.
|
||||
*/
|
||||
|
@ -990,6 +993,10 @@ read_prefs(int *gpf_errno_return, int *gpf_read_errno_return,
|
|||
prefs.gui_fileopen_style = FO_STYLE_LAST_OPENED;
|
||||
prefs.gui_recent_files_count_max = 10;
|
||||
prefs.gui_fileopen_dir = g_strdup("");
|
||||
prefs.gui_layout_type = 1;
|
||||
prefs.gui_layout_content_1 = 0;
|
||||
prefs.gui_layout_content_2 = 1;
|
||||
prefs.gui_layout_content_3 = 2;
|
||||
|
||||
/* set the default values for the capture dialog box */
|
||||
prefs.capture_device = NULL;
|
||||
|
@ -1293,6 +1300,10 @@ prefs_set_pref(char *prefarg)
|
|||
#define PRS_GUI_GEOMETRY_MAIN_HEIGHT "gui.geometry.main.height"
|
||||
#define PRS_GUI_TOOLBAR_MAIN_SHOW "gui.toolbar_main_show"
|
||||
#define PRS_GUI_TOOLBAR_MAIN_STYLE "gui.toolbar_main_style"
|
||||
#define PRS_GUI_LAYOUT_TYPE "gui.layout_type"
|
||||
#define PRS_GUI_LAYOUT_CONTENT_1 "gui.layout_content_1"
|
||||
#define PRS_GUI_LAYOUT_CONTENT_2 "gui.layout_content_2"
|
||||
#define PRS_GUI_LAYOUT_CONTENT_3 "gui.layout_content_3"
|
||||
|
||||
/*
|
||||
* This applies to more than just captures, so it's not "capture.name_resolve";
|
||||
|
@ -1601,6 +1612,19 @@ set_pref(gchar *pref_name, gchar *value)
|
|||
prefs.gui_fileopen_dir = g_strdup(value);
|
||||
} else if (strcmp(pref_name, PRS_GUI_FILEOPEN_REMEMBERED_DIR) == 0) { /* deprecated */
|
||||
|
||||
} else if (strcmp(pref_name, PRS_GUI_LAYOUT_TYPE) == 0) {
|
||||
prefs.gui_layout_type = strtoul(value, NULL, 10);
|
||||
|
||||
} else if (strcmp(pref_name, PRS_GUI_LAYOUT_CONTENT_1) == 0) {
|
||||
prefs.gui_layout_content_1 =
|
||||
find_index_from_string_array(value, gui_layout_content_text, 0);
|
||||
} else if (strcmp(pref_name, PRS_GUI_LAYOUT_CONTENT_2) == 0) {
|
||||
prefs.gui_layout_content_2 =
|
||||
find_index_from_string_array(value, gui_layout_content_text, 0);
|
||||
} else if (strcmp(pref_name, PRS_GUI_LAYOUT_CONTENT_3) == 0) {
|
||||
prefs.gui_layout_content_3 =
|
||||
find_index_from_string_array(value, gui_layout_content_text, 0);
|
||||
|
||||
/* handle the capture options */
|
||||
} else if (strcmp(pref_name, PRS_CAP_DEVICE) == 0) {
|
||||
if (prefs.capture_device != NULL)
|
||||
|
@ -2190,6 +2214,19 @@ write_prefs(char **pf_path_return)
|
|||
prefs.gui_fileopen_dir);
|
||||
}
|
||||
|
||||
fprintf(pf, "\n# Layout type (1-6).\n");
|
||||
fprintf(pf, PRS_GUI_LAYOUT_TYPE ": %d\n",
|
||||
prefs.gui_layout_type);
|
||||
|
||||
fprintf(pf, "\n# Layout content of the panes (1-3).\n");
|
||||
fprintf(pf, "# One of: NONE, PLIST, PDETAILS, PBYTES\n");
|
||||
fprintf(pf, PRS_GUI_LAYOUT_CONTENT_1 ": %s\n",
|
||||
gui_layout_content_text[prefs.gui_layout_content_1]);
|
||||
fprintf(pf, PRS_GUI_LAYOUT_CONTENT_2 ": %s\n",
|
||||
gui_layout_content_text[prefs.gui_layout_content_2]);
|
||||
fprintf(pf, PRS_GUI_LAYOUT_CONTENT_3 ": %s\n",
|
||||
gui_layout_content_text[prefs.gui_layout_content_3]);
|
||||
|
||||
fprintf(pf, "\n####### Name Resolution ########\n");
|
||||
|
||||
fprintf(pf, "\n# Resolve addresses to names?\n");
|
||||
|
@ -2283,6 +2320,10 @@ copy_prefs(e_prefs *dest, e_prefs *src)
|
|||
dest->gui_toolbar_main_style = src->gui_toolbar_main_style;
|
||||
dest->gui_fileopen_dir = g_strdup(src->gui_fileopen_dir);
|
||||
dest->gui_fileopen_style = src->gui_fileopen_style;
|
||||
dest->gui_layout_type = src->gui_layout_type;
|
||||
dest->gui_layout_content_1 = src->gui_layout_content_1;
|
||||
dest->gui_layout_content_2 = src->gui_layout_content_2;
|
||||
dest->gui_layout_content_3 = src->gui_layout_content_3;
|
||||
dest->gui_font_name1 = g_strdup(src->gui_font_name1);
|
||||
dest->gui_font_name2 = g_strdup(src->gui_font_name2);
|
||||
dest->gui_marked_fg = src->gui_marked_fg;
|
||||
|
|
6
prefs.h
6
prefs.h
|
@ -1,7 +1,7 @@
|
|||
/* prefs.h
|
||||
* Definitions for preference handling routines
|
||||
*
|
||||
* $Id: prefs.h,v 1.57 2004/04/06 19:02:17 ulfl Exp $
|
||||
* $Id: prefs.h,v 1.58 2004/04/29 17:03:26 ulfl Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -93,6 +93,10 @@ typedef struct _e_prefs {
|
|||
guint gui_fileopen_style;
|
||||
guint gui_recent_files_count_max;
|
||||
gchar *gui_fileopen_dir;
|
||||
gint gui_layout_type;
|
||||
gint gui_layout_content_1;
|
||||
gint gui_layout_content_2;
|
||||
gint gui_layout_content_3;
|
||||
guint32 name_resolve;
|
||||
gint name_resolve_concurrency;
|
||||
gchar *capture_device;
|
||||
|
|
Loading…
Reference in New Issue