Move the GTK+ implementations of various UI utilities out of "util.c"

into "gtk/ui_util.c", and move the declarations of those UI utilities
out of "util.h" into "ui_util.h".  (The header file is in the top-level
directory, rather than the "gtk" directory, because it declares
window-system-independent interfaces to routines with
window-system-dependent implementations.)

Add to "gtk/ui_util.c" a routine to set the window and icon title.

Use that routine to make the title of an Ethereal top-level window be

	{filename} - Ethereal

if there's a capture open, and have "{filename}" be "<capture>" if it's
a temporary capture file.

svn path=/trunk/; revision=1255
This commit is contained in:
Guy Harris 1999-12-09 07:19:20 +00:00
parent 0599f44d09
commit 80618858d6
17 changed files with 315 additions and 189 deletions

View File

@ -1,7 +1,7 @@
# Makefile.am
# Automake file for Ethereal
#
# $Id: Makefile.am,v 1.129 1999/12/09 04:06:53 nneul Exp $
# $Id: Makefile.am,v 1.130 1999/12/09 07:19:01 guy Exp $
#
# Ethereal - Network traffic analyzer
# By Gerald Combs <gerald@zing.org>
@ -204,6 +204,7 @@ ethereal_SOURCES = \
timestamp.h \
util.c \
util.h \
ui_util.h \
xdlc.c \
xdlc.h \
$(DISSECTOR_SOURCES)

View File

@ -1,7 +1,7 @@
/* capture.c
* Routines for packet capture windows
*
* $Id: capture.c,v 1.85 1999/11/30 23:56:34 gram Exp $
* $Id: capture.c,v 1.86 1999/12/09 07:19:02 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -90,6 +90,7 @@
#include "gtk/menu.h"
#include "capture.h"
#include "util.h"
#include "ui_util.h"
#include "prefs.h"
#include "globals.h"

View File

@ -1,7 +1,7 @@
/* colors.c
* Definitions for color structures and routines
*
* $Id: colors.c,v 1.17 1999/11/30 05:32:56 guy Exp $
* $Id: colors.c,v 1.18 1999/12/09 07:19:02 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -41,7 +41,7 @@
#include "colors.h"
#include "file.h"
#include "dfilter.h"
#include "util.h"
#include "ui_util.h"
extern capture_file cf;

24
file.c
View File

@ -1,7 +1,7 @@
/* file.c
* File I/O routines
*
* $Id: file.c,v 1.134 1999/12/04 11:32:24 guy Exp $
* $Id: file.c,v 1.135 1999/12/09 07:19:03 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -76,6 +76,7 @@
#include "print.h"
#include "file.h"
#include "util.h"
#include "ui_util.h"
#include "gtk/proto_draw.h"
#include "dfilter.h"
#include "timestamp.h"
@ -229,6 +230,9 @@ close_cap_file(capture_file *cf, void *w)
will there ever be more than one on the stack? */
gtk_statusbar_pop(GTK_STATUSBAR(w), file_ctx);
/* Restore the standard title bar message. */
set_main_window_name("The Ethereal Network Analyzer");
/* Disable all menu items that make sense only if you have a capture. */
set_menu_sensitivity("/File/Save", FALSE);
set_menu_sensitivity("/File/Save As...", FALSE);
@ -247,13 +251,17 @@ close_cap_file(capture_file *cf, void *w)
set_menu_sensitivity("/Tools/Summary", FALSE);
}
/* Set the file name in the status line, in the name for the main window,
and in the name for the main window's icon. */
static void
set_statusbar_filename(capture_file *cf)
set_display_filename(capture_file *cf)
{
gchar *name_ptr;
size_t msg_len;
gchar *done_fmt = " File: %s Drops: %u";
gchar *done_msg;
gchar *win_name_fmt = "%s - Ethereal";
gchar *win_name;
if (!cf->is_tempfile) {
/* Get the last component of the file name, and put that in the
@ -265,7 +273,7 @@ set_statusbar_filename(capture_file *cf)
} else {
/* The file we read is a temporary file from a live capture;
we don't mention its name in the status bar. */
name_ptr = "<none>";
name_ptr = "<capture>";
}
msg_len = strlen(name_ptr) + strlen(done_fmt) + 64;
@ -273,6 +281,12 @@ set_statusbar_filename(capture_file *cf)
snprintf(done_msg, msg_len, done_fmt, name_ptr, cf->drops);
gtk_statusbar_push(GTK_STATUSBAR(info_bar), file_ctx, done_msg);
g_free(done_msg);
msg_len = strlen(name_ptr) + strlen(win_name_fmt) + 1;
win_name = g_malloc(msg_len);
snprintf(win_name, msg_len, win_name_fmt, name_ptr);
set_main_window_name(win_name);
g_free(win_name);
}
int
@ -326,7 +340,7 @@ read_cap_file(capture_file *cf)
gtk_progress_set_value(GTK_PROGRESS(prog_bar), 0);
gtk_statusbar_pop(GTK_STATUSBAR(info_bar), file_ctx);
set_statusbar_filename(cf);
set_display_filename(cf);
/* Enable menu items that make sense if you have a capture file you've
finished reading. */
@ -471,7 +485,7 @@ finish_tail_cap_file(capture_file *cf)
/* Pop the "<live capture in progress>" message off the status bar. */
gtk_statusbar_pop(GTK_STATUSBAR(info_bar), file_ctx);
set_statusbar_filename(cf);
set_display_filename(cf);
/* Restore the "File/Open" menu item. */
set_menu_sensitivity("/File/Open...", TRUE);

View File

@ -1,7 +1,7 @@
# Makefile.am
# Automake file for the GTK interface routines for Ethereal
#
# $Id: Makefile.am,v 1.12 1999/12/07 22:06:25 gram Exp $
# $Id: Makefile.am,v 1.13 1999/12/09 07:19:16 guy Exp $
#
# Ethereal - Network traffic analyzer
# By Gerald Combs <gerald@zing.org>
@ -56,4 +56,5 @@ libui_a_SOURCES = \
proto_draw.c \
proto_draw.h \
stream_prefs.c \
stream_prefs.h
stream_prefs.h \
ui_util.c

View File

@ -1,7 +1,7 @@
/* capture_dlg.c
* Routines for packet capture windows
*
* $Id: capture_dlg.c,v 1.10 1999/12/07 22:11:02 guy Exp $
* $Id: capture_dlg.c,v 1.11 1999/12/09 07:19:16 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -75,7 +75,7 @@
#include "main.h"
#include "capture_dlg.h"
#include "prefs_dlg.h"
#include "util.h"
#include "ui_util.h"
/* Capture callback data keys */
#define E_CAP_IFACE_KEY "cap_iface"

View File

@ -1,7 +1,7 @@
/* file_dlg.c
* Dialog boxes for handling files
*
* $Id: file_dlg.c,v 1.13 1999/12/06 09:02:48 guy Exp $
* $Id: file_dlg.c,v 1.14 1999/12/09 07:19:17 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -52,8 +52,8 @@
#include "prefs_dlg.h"
#endif
#ifndef __UTIL_H__
#include "util.h"
#ifndef __UI_UTIL_H__
#include "ui_util.h"
#endif
#ifndef __MENU_H__

View File

@ -1,7 +1,7 @@
/* find_dlg.c
* Routines for "find frame" window
*
* $Id: find_dlg.c,v 1.3 1999/11/06 06:54:02 guy Exp $
* $Id: find_dlg.c,v 1.4 1999/12/09 07:19:17 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -44,7 +44,7 @@
#include "find_dlg.h"
#include "prefs_dlg.h"
#include "util.h"
#include "ui_util.h"
/* Capture callback data keys */
#define E_FIND_FILT_KEY "find_filter_te"

View File

@ -1,7 +1,7 @@
/* goto_dlg.c
* Routines for "go to frame" window
*
* $Id: goto_dlg.c,v 1.2 1999/11/30 07:27:29 guy Exp $
* $Id: goto_dlg.c,v 1.3 1999/12/09 07:19:18 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -46,7 +46,7 @@
#include "goto_dlg.h"
#include "prefs_dlg.h"
#include "util.h"
#include "ui_util.h"
/* Capture callback data keys */
#define E_GOTO_FNUMBER_KEY "goto_fnumber_te"

View File

@ -1,7 +1,7 @@
/* gtkglobals.h
* GTK-related Global defines, etc.
*
* $Id: gtkglobals.h,v 1.1 1999/10/20 22:36:05 gram Exp $
* $Id: gtkglobals.h,v 1.2 1999/12/09 07:19:18 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -30,8 +30,8 @@
#include <gtk/gtk.h>
#endif
extern GtkWidget *file_sel, *packet_list, *tree_view, *byte_view, *prog_bar,
*info_bar;
extern GtkWidget *top_level, *file_sel, *packet_list, *tree_view,
*byte_view, *prog_bar, *info_bar;
extern GdkFont *m_r_font, *m_b_font;
extern GtkStyle *item_style;

View File

@ -1,6 +1,6 @@
/* main.c
*
* $Id: main.c,v 1.65 1999/12/07 22:59:18 guy Exp $
* $Id: main.c,v 1.66 1999/12/09 07:19:18 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -100,6 +100,7 @@
#include "resolv.h"
#include "follow.h"
#include "util.h"
#include "ui_util.h"
#include "proto_draw.h"
#include "dfilter.h"
#include "keys.h"
@ -107,8 +108,8 @@
FILE *data_out_file = NULL;
packet_info pi;
capture_file cf;
GtkWidget *file_sel, *packet_list, *tree_view, *byte_view, *prog_bar,
*info_bar;
GtkWidget *top_level, *file_sel, *packet_list, *tree_view, *byte_view,
*prog_bar, *info_bar;
GdkFont *m_r_font, *m_b_font;
guint main_ctx, file_ctx;
gchar comp_info_str[256];
@ -861,7 +862,7 @@ main(int argc, char *argv[])
#else
gboolean capture_option_specified = FALSE;
#endif
GtkWidget *window, *main_vbox, *menubar, *u_pane, *l_pane,
GtkWidget *main_vbox, *menubar, *u_pane, *l_pane,
*bv_table, *bv_hscroll, *bv_vscroll, *stat_hbox,
*tv_scrollw, *filter_bt, *filter_cm, *filter_te,
*filter_reset;
@ -1183,25 +1184,25 @@ main(int argc, char *argv[])
}
/* Main window */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_name(window, "main window");
gtk_signal_connect(GTK_OBJECT(window), "delete_event",
top_level = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_name(top_level, "main window");
gtk_signal_connect(GTK_OBJECT(top_level), "delete_event",
GTK_SIGNAL_FUNC(file_quit_cmd_cb), "WM destroy");
gtk_signal_connect(GTK_OBJECT(window), "destroy",
gtk_signal_connect(GTK_OBJECT(top_level), "destroy",
GTK_SIGNAL_FUNC(file_quit_cmd_cb), "WM destroy");
gtk_window_set_title(GTK_WINDOW(window), "The Ethereal Network Analyzer");
gtk_widget_set_usize(GTK_WIDGET(window), DEF_WIDTH, -1);
gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
gtk_window_set_title(GTK_WINDOW(top_level), "The Ethereal Network Analyzer");
gtk_widget_set_usize(GTK_WIDGET(top_level), DEF_WIDTH, -1);
gtk_window_set_policy(GTK_WINDOW(top_level), TRUE, TRUE, FALSE);
/* Container for menu bar, paned windows and progress/info box */
main_vbox = gtk_vbox_new(FALSE, 1);
gtk_container_border_width(GTK_CONTAINER(main_vbox), 1);
gtk_container_add(GTK_CONTAINER(window), main_vbox);
gtk_container_add(GTK_CONTAINER(top_level), main_vbox);
gtk_widget_show(main_vbox);
/* Menu bar */
get_main_menu(&menubar, &accel);
gtk_window_add_accel_group(GTK_WINDOW(window), accel);
gtk_window_add_accel_group(GTK_WINDOW(top_level), accel);
gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, TRUE, 0);
gtk_widget_show(menubar);
@ -1362,7 +1363,7 @@ main(int argc, char *argv[])
/* No. Pop up the main window, and read in a capture file if
we were told to. */
gtk_widget_show(window);
gtk_widget_show(top_level);
cf.colors = colfilter_new();

View File

@ -1,7 +1,7 @@
/* print_dlg.c
* Dialog boxes for printing
*
* $Id: print_dlg.c,v 1.9 1999/11/06 06:27:07 guy Exp $
* $Id: print_dlg.c,v 1.10 1999/12/09 07:19:19 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -46,7 +46,7 @@
#endif
#ifndef __UTIL_H__
#include "util.h"
#include "ui_util.h"
#endif
static void print_cmd_toggle_dest(GtkWidget *widget, gpointer data);

198
gtk/ui_util.c Normal file
View File

@ -0,0 +1,198 @@
/* ui_util.c
* UI utility routines
*
* $Id: ui_util.c,v 1.1 1999/12/09 07:19:20 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
* 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 <glib.h>
#include <gtk/gtk.h>
#include <stdarg.h>
#include <stdio.h>
#if 0
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#endif
#ifdef NEED_SNPRINTF_H
# ifdef HAVE_STDARG_H
# include <stdarg.h>
# else
# include <varargs.h>
# endif
# include "snprintf.h"
#endif
#include "gtkglobals.h"
#include "ui_util.h"
#include "image/icon-excl.xpm"
#include "image/icon-ethereal.xpm"
/* Set the name of the top-level window and its icon.
XXX - for some reason, KWM insists on making the icon name be just
the window name, in parentheses; perhaps it's trying to imitate
Windows here, or perhaps it's not the icon name that appears in
the taskbar. The KWM_WIN_TITLE string overrides that, but I
don't know how that gets set - it's set on "xterm"s, but they
aren't KWM-aware, as far as I know. */
void
set_main_window_name(gchar *icon_name)
{
gtk_window_set_title(GTK_WINDOW(top_level), icon_name);
gdk_window_set_icon_name(top_level->window, icon_name);
}
static void simple_dialog_cancel_cb(GtkWidget *, gpointer);
static const gchar bm_key[] = "button mask";
/* Simple dialog function - Displays a dialog box with the supplied message
* text.
*
* Args:
* type : One of ESD_TYPE_*.
* btn_mask : The address of a gint. The value passed in determines if
* the 'Cancel' button is displayed. The button pressed by the
* user is passed back.
* msg_format : Sprintf-style format of the text displayed in the dialog.
* ... : Argument list for msg_format
*
*/
#define ESD_MAX_MSG_LEN 2048
void
simple_dialog(gint type, gint *btn_mask, gchar *msg_format, ...) {
GtkWidget *win, *main_vb, *top_hb, *type_pm, *msg_label,
*bbox, *ok_btn, *cancel_btn;
GdkPixmap *pixmap;
GdkBitmap *mask;
GtkStyle *style;
GdkColormap *cmap;
va_list ap;
gchar message[ESD_MAX_MSG_LEN];
gchar **icon;
/* Main window */
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_container_border_width(GTK_CONTAINER(win), 7);
switch (type) {
case ESD_TYPE_WARN :
gtk_window_set_title(GTK_WINDOW(win), "Ethereal: Warning");
icon = icon_excl_xpm;
break;
case ESD_TYPE_CRIT :
gtk_window_set_title(GTK_WINDOW(win), "Ethereal: Critical");
icon = icon_excl_xpm;
break;
case ESD_TYPE_INFO :
default :
icon = icon_ethereal_xpm;
gtk_window_set_title(GTK_WINDOW(win), "Ethereal: Information");
break;
}
gtk_object_set_data(GTK_OBJECT(win), bm_key, btn_mask);
/* Container for our rows */
main_vb = gtk_vbox_new(FALSE, 5);
gtk_container_border_width(GTK_CONTAINER(main_vb), 5);
gtk_container_add(GTK_CONTAINER(win), main_vb);
gtk_widget_show(main_vb);
/* Top row: Icon and message text */
top_hb = gtk_hbox_new(FALSE, 10);
gtk_container_add(GTK_CONTAINER(main_vb), top_hb);
gtk_widget_show(top_hb);
style = gtk_widget_get_style(win);
cmap = gdk_colormap_get_system();
pixmap = gdk_pixmap_colormap_create_from_xpm_d(NULL, cmap, &mask,
&style->bg[GTK_STATE_NORMAL], icon);
type_pm = gtk_pixmap_new(pixmap, mask);
gtk_misc_set_alignment (GTK_MISC (type_pm), 0.5, 0.0);
gtk_container_add(GTK_CONTAINER(top_hb), type_pm);
gtk_widget_show(type_pm);
/* Load our vararg list into the message string */
va_start(ap, msg_format);
vsnprintf(message, ESD_MAX_MSG_LEN, msg_format, ap);
msg_label = gtk_label_new(message);
gtk_label_set_justify(GTK_LABEL(msg_label), GTK_JUSTIFY_FILL);
gtk_container_add(GTK_CONTAINER(top_hb), msg_label);
gtk_widget_show(msg_label);
/* Button row */
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
gtk_container_add(GTK_CONTAINER(main_vb), bbox);
gtk_widget_show(bbox);
ok_btn = gtk_button_new_with_label ("OK");
gtk_signal_connect_object(GTK_OBJECT(ok_btn), "clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT (win));
gtk_container_add(GTK_CONTAINER(bbox), ok_btn);
GTK_WIDGET_SET_FLAGS(ok_btn, GTK_CAN_DEFAULT);
gtk_widget_grab_default(ok_btn);
gtk_widget_show(ok_btn);
if (btn_mask && *btn_mask == ESD_BTN_CANCEL) {
cancel_btn = gtk_button_new_with_label("Cancel");
gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
GTK_SIGNAL_FUNC(simple_dialog_cancel_cb), (gpointer) win);
gtk_container_add(GTK_CONTAINER(bbox), cancel_btn);
GTK_WIDGET_SET_FLAGS(cancel_btn, GTK_CAN_DEFAULT);
gtk_widget_show(cancel_btn);
}
if (btn_mask)
*btn_mask = ESD_BTN_OK;
gtk_widget_show(win);
}
static void
simple_dialog_cancel_cb(GtkWidget *w, gpointer win) {
gint *btn_mask = (gint *) gtk_object_get_data(win, bm_key);
if (btn_mask)
*btn_mask = ESD_BTN_CANCEL;
gtk_widget_destroy(GTK_WIDGET(win));
}

View File

@ -1,7 +1,7 @@
/* prefs.c
* Routines for handling preferences
*
* $Id: prefs.c,v 1.23 1999/12/02 04:30:03 gerald Exp $
* $Id: prefs.c,v 1.24 1999/12/09 07:19:04 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -51,7 +51,7 @@
#include "prefs.h"
#include "column.h"
#include "print.h"
#include "util.h"
#include "ui_util.h"
/* Internal functions */
static int set_pref(gchar*, gchar*);

56
ui_util.h Normal file
View File

@ -0,0 +1,56 @@
/* ui_util.h
* Definitions for UI utility routines
*
* $Id: ui_util.h,v 1.1 1999/12/09 07:19:04 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
* 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 __UI_UTIL_H__
#define __UI_UTIL_H__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Set the name of the top-level window and its icon. */
void set_main_window_name(gchar *);
/* Dialog type. */
#define ESD_TYPE_INFO 0
#define ESD_TYPE_WARN 1
#define ESD_TYPE_CRIT 2
/* Which buttons to display. */
#define ESD_BTN_OK 0
#define ESD_BTN_CANCEL 1
#if __GNUC__ == 2
void simple_dialog(gint, gint *, gchar *, ...)
__attribute__((format (printf, 3, 4)));
#else
void simple_dialog(gint, gint *, gchar *, ...);
#endif
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __UI_UTIL_H__ */

132
util.c
View File

@ -1,7 +1,7 @@
/* util.c
* Utility routines
*
* $Id: util.c,v 1.23 1999/11/22 06:24:42 gram Exp $
* $Id: util.c,v 1.24 1999/12/09 07:19:05 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -29,18 +29,11 @@
#include <glib.h>
#include <gtk/gtk.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@ -64,128 +57,6 @@
#include "util.h"
#include "image/icon-excl.xpm"
#include "image/icon-ethereal.xpm"
static void simple_dialog_cancel_cb(GtkWidget *, gpointer);
const gchar *bm_key = "button mask";
/* Simple dialog function - Displays a dialog box with the supplied message
* text.
*
* Args:
* type : One of ESD_TYPE_*.
* btn_mask : The address of a gint. The value passed in determines if
* the 'Cancel' button is displayed. The button pressed by the
* user is passed back.
* msg_format : Sprintf-style format of the text displayed in the dialog.
* ... : Argument list for msg_format
*
*/
#define ESD_MAX_MSG_LEN 2048
void
simple_dialog(gint type, gint *btn_mask, gchar *msg_format, ...) {
GtkWidget *win, *main_vb, *top_hb, *type_pm, *msg_label,
*bbox, *ok_btn, *cancel_btn;
GdkPixmap *pixmap;
GdkBitmap *mask;
GtkStyle *style;
GdkColormap *cmap;
va_list ap;
gchar message[ESD_MAX_MSG_LEN];
gchar **icon;
/* Main window */
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_container_border_width(GTK_CONTAINER(win), 7);
switch (type) {
case ESD_TYPE_WARN :
gtk_window_set_title(GTK_WINDOW(win), "Ethereal: Warning");
icon = icon_excl_xpm;
break;
case ESD_TYPE_CRIT :
gtk_window_set_title(GTK_WINDOW(win), "Ethereal: Critical");
icon = icon_excl_xpm;
break;
case ESD_TYPE_INFO :
default :
icon = icon_ethereal_xpm;
gtk_window_set_title(GTK_WINDOW(win), "Ethereal: Information");
break;
}
gtk_object_set_data(GTK_OBJECT(win), bm_key, btn_mask);
/* Container for our rows */
main_vb = gtk_vbox_new(FALSE, 5);
gtk_container_border_width(GTK_CONTAINER(main_vb), 5);
gtk_container_add(GTK_CONTAINER(win), main_vb);
gtk_widget_show(main_vb);
/* Top row: Icon and message text */
top_hb = gtk_hbox_new(FALSE, 10);
gtk_container_add(GTK_CONTAINER(main_vb), top_hb);
gtk_widget_show(top_hb);
style = gtk_widget_get_style(win);
cmap = gdk_colormap_get_system();
pixmap = gdk_pixmap_colormap_create_from_xpm_d(NULL, cmap, &mask,
&style->bg[GTK_STATE_NORMAL], icon);
type_pm = gtk_pixmap_new(pixmap, mask);
gtk_misc_set_alignment (GTK_MISC (type_pm), 0.5, 0.0);
gtk_container_add(GTK_CONTAINER(top_hb), type_pm);
gtk_widget_show(type_pm);
/* Load our vararg list into the message string */
va_start(ap, msg_format);
vsnprintf(message, ESD_MAX_MSG_LEN, msg_format, ap);
msg_label = gtk_label_new(message);
gtk_label_set_justify(GTK_LABEL(msg_label), GTK_JUSTIFY_FILL);
gtk_container_add(GTK_CONTAINER(top_hb), msg_label);
gtk_widget_show(msg_label);
/* Button row */
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
gtk_container_add(GTK_CONTAINER(main_vb), bbox);
gtk_widget_show(bbox);
ok_btn = gtk_button_new_with_label ("OK");
gtk_signal_connect_object(GTK_OBJECT(ok_btn), "clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT (win));
gtk_container_add(GTK_CONTAINER(bbox), ok_btn);
GTK_WIDGET_SET_FLAGS(ok_btn, GTK_CAN_DEFAULT);
gtk_widget_grab_default(ok_btn);
gtk_widget_show(ok_btn);
if (btn_mask && *btn_mask == ESD_BTN_CANCEL) {
cancel_btn = gtk_button_new_with_label("Cancel");
gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
GTK_SIGNAL_FUNC(simple_dialog_cancel_cb), (gpointer) win);
gtk_container_add(GTK_CONTAINER(bbox), cancel_btn);
GTK_WIDGET_SET_FLAGS(cancel_btn, GTK_CAN_DEFAULT);
gtk_widget_show(cancel_btn);
}
if (btn_mask)
*btn_mask = ESD_BTN_OK;
gtk_widget_show(win);
}
static void
simple_dialog_cancel_cb(GtkWidget *w, gpointer win) {
gint *btn_mask = (gint *) gtk_object_get_data(win, bm_key);
if (btn_mask)
*btn_mask = ESD_BTN_CANCEL;
gtk_widget_destroy(GTK_WIDGET(win));
}
static char *
setup_tmpdir(char *dir)
{
@ -396,4 +267,3 @@ EBCDIC_to_ASCII1(guint8 c)
{
return EBCDIC_translate_ASCII[c];
}

18
util.h
View File

@ -1,7 +1,7 @@
/* util.h
* Utility definitions
*
* $Id: util.h,v 1.13 1999/11/22 06:24:42 gram Exp $
* $Id: util.h,v 1.14 1999/12/09 07:19:05 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -30,22 +30,6 @@
extern "C" {
#endif /* __cplusplus */
/* Dialog type. */
#define ESD_TYPE_INFO 0
#define ESD_TYPE_WARN 1
#define ESD_TYPE_CRIT 2
/* Which buttons to display. */
#define ESD_BTN_OK 0
#define ESD_BTN_CANCEL 1
#if __GNUC__ == 2
void simple_dialog(gint, gint *, gchar *, ...)
__attribute__((format (printf, 3, 4)));
#else
void simple_dialog(gint, gint *, gchar *, ...);
#endif
int create_tempfile(char *, int, const char *);
void ASCII_to_EBCDIC(guint8 *buf, guint bytes);