aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/tap_rtp.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2003-03-10 02:09:29 +0000
committerGuy Harris <guy@alum.mit.edu>2003-03-10 02:09:29 +0000
commit2a848c34adcc726da9cfb64013004365560b83ee (patch)
tree5b584faafd9a130ba9e9993c9ac0bc4953890d96 /gtk/tap_rtp.c
parent9281a04064720f2d9edc581a6561ca621b13da23 (diff)
Have the "Save voice data as..." button in the RTP analysis dialog box
pop up a file selection box with the save options, rather than a dialog box with the save options, a file name, and a button to click to get the file selection box. svn path=/trunk/; revision=7331
Diffstat (limited to 'gtk/tap_rtp.c')
-rw-r--r--gtk/tap_rtp.c190
1 files changed, 48 insertions, 142 deletions
diff --git a/gtk/tap_rtp.c b/gtk/tap_rtp.c
index 99126ea1d6..b9bfea9902 100644
--- a/gtk/tap_rtp.c
+++ b/gtk/tap_rtp.c
@@ -1,7 +1,7 @@
/*
* tap_rtp.c
*
- * $Id: tap_rtp.c,v 1.6 2003/03/07 19:47:07 guy Exp $
+ * $Id: tap_rtp.c,v 1.7 2003/03/10 02:09:29 guy Exp $
*
* RTP analysing addition for ethereal
*
@@ -130,8 +130,7 @@
#endif
static GtkWidget *rtp_w = NULL;
-static GtkWidget *voice_w = NULL;
-static GtkWidget *save_w = NULL;
+static GtkWidget *save_voice_as_w = NULL;
static GtkWidget *main_vb;
static GtkWidget *clist;
static GtkWidget *clist_r;
@@ -1009,13 +1008,9 @@ static void rtp_destroy_cb(GtkWidget *win _U_, gpointer data _U_)
remove(f_tempname);
remove(r_tempname);
- /* is there a save window open */
- if (save_w != NULL)
- gtk_widget_destroy(save_w);
-
/* Is there a save voice window open? */
- if (voice_w != NULL)
- gtk_widget_destroy(voice_w);
+ if (save_voice_as_w != NULL)
+ gtk_widget_destroy(save_voice_as_w);
/* Note that we no longer have a "RTP Analyse" dialog box. */
rtp_w = NULL;
@@ -1092,40 +1087,41 @@ static void refresh_cb(GtkWidget *w _U_, void *pri)
draw_stat(rs);
}
-/* when the user clicks the close button */
-static void voice_close_cb(GtkWidget *close_bt _U_, gpointer parent_w _U_)
-{
- gtk_widget_destroy(GTK_WIDGET(parent_w));
-}
-
-static void voice_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_)
+static void save_voice_as_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_)
{
- if (save_w != NULL)
- gtk_widget_destroy(GTK_WIDGET(save_w));
-
/* Note that we no longer have a Save voice info dialog box. */
- voice_w = NULL;
+ save_voice_as_w = NULL;
}
-
/* the user wants to save in a file */
/* XXX support for different formats is currently commented out */
-static void ok_button_cb(GtkWidget *ok_bt, gpointer data)
+static void save_voice_as_ok_cb(GtkWidget *ok_bt, gpointer fs)
{
- info_stat *rs=(info_stat *)data;
- GtkWidget *entry, *rev, *forw, *both;
- /*GtkWidget *wav, *au, *sw;*/
gchar *g_dest;
+ /*GtkWidget *wav, *au, *sw;*/
+ GtkWidget *rev, *forw, *both;
+ info_stat *rs;
gint channels /*, format*/;
- entry = (GtkWidget *)OBJECT_GET_DATA(ok_bt, "file_entry");
+ g_dest = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION (fs)));
+
+ /* Perhaps the user specified a directory instead of a file.
+ Check whether they did. */
+ if (test_for_directory(g_dest) == EISDIR) {
+ /* It's a directory - set the file selection box to display it. */
+ set_last_open_dir(g_dest);
+ g_free(g_dest);
+ gtk_file_selection_set_filename(GTK_FILE_SELECTION(fs), last_open_dir);
+ return;
+ }
+
/*wav = (GtkWidget *)OBJECT_GET_DATA(ok_bt, "wav_rb");
au = (GtkWidget *)OBJECT_GET_DATA(ok_bt, "au_rb");
sw = (GtkWidget *)OBJECT_GET_DATA(ok_bt, "sw_rb");*/
rev = (GtkWidget *)OBJECT_GET_DATA(ok_bt, "reversed_rb");
forw = (GtkWidget *)OBJECT_GET_DATA(ok_bt, "forward_rb");
both = (GtkWidget *)OBJECT_GET_DATA(ok_bt, "both_rb");
- g_dest = gtk_entry_get_text(GTK_ENTRY(entry));
+ rs = (info_stat *)OBJECT_GET_DATA(ok_bt, "info_stat");
/* XXX user clicks the ok button, but we know we can't save the voice info because f.e.
* we don't support that codec. So we pop up a warning. Maybe it would be better to
@@ -1190,12 +1186,6 @@ static void ok_button_cb(GtkWidget *ok_bt, gpointer data)
return;
}
- /* if the file text entry is empty */
- if (!g_dest[0]) {
- simple_dialog(ESD_TYPE_CRIT, NULL, "Saving to file, but no file specified.");
- return;
- }
-
/*if (GTK_TOGGLE_BUTTON (wav)->active)
format = 1;
else if (GTK_TOGGLE_BUTTON (au)->active)
@@ -1215,72 +1205,13 @@ static void ok_button_cb(GtkWidget *ok_bt, gpointer data)
return;
}
- if (save_w != NULL)
- gtk_widget_destroy(GTK_WIDGET(save_w));
-
/* XXX I get GTK warning (sometimes?)!!! */
- gtk_widget_destroy(GTK_WIDGET(voice_w));
-}
-
-static void save_ok_button_cb(GtkWidget *w _U_, gpointer data)
-{
- gchar *f_name;
-
- f_name = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION (data)));
-
- /* Perhaps the user specified a directory instead of a file.
- Check whether they did. */
- if (test_for_directory(f_name) == EISDIR) {
- /* It's a directory - set the file selection box to display it. */
- set_last_open_dir(f_name);
- g_free(f_name);
- gtk_file_selection_set_filename(GTK_FILE_SELECTION(data), last_open_dir);
- return;
- }
-
- gtk_entry_set_text(GTK_ENTRY(OBJECT_GET_DATA(data, "file_entry")), f_name);
- gtk_widget_destroy(GTK_WIDGET(data));
-
- g_free(f_name);
-}
-
-static void save_cancel_button_cb(GtkWidget *w _U_, gpointer data)
-{
- gtk_widget_destroy(GTK_WIDGET(data));
-}
-
-static void save_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_)
-{
- /* Note that we no longer have a Save voice info dialog box. */
- save_w = NULL;
-}
-
-/* file selection window */
-static void file_selection_cb(GtkWidget *w _U_, gpointer file_entry)
-{
- if (save_w != NULL) {
- /* Yes. Just re-activate that dialog box. */
- reactivate_window(save_w);
- return;
- }
-
- save_w = gtk_file_selection_new ("Ethereal: Save to File");
- gtk_signal_connect(GTK_OBJECT(save_w), "destroy", GTK_SIGNAL_FUNC(save_destroy_cb), NULL);
-
- OBJECT_SET_DATA(save_w, "file_entry", file_entry);
-
- gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(save_w)->cancel_button), "clicked",
- GTK_SIGNAL_FUNC(save_cancel_button_cb), GTK_OBJECT(save_w));
-
- gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(save_w)->ok_button), "clicked",
- GTK_SIGNAL_FUNC(save_ok_button_cb), GTK_OBJECT(save_w));
-
- gtk_widget_show(save_w);
+ gtk_widget_destroy(GTK_WIDGET(save_voice_as_w));
}
/* when the user wants to save the voice information in a file */
/* XXX support for different formats is currently commented out */
-static void voice_cb(GtkWidget *w _U_, gpointer data)
+static void save_voice_as_cb(GtkWidget *w _U_, gpointer data)
{
info_stat *rs=(info_stat *)data;
@@ -1294,31 +1225,27 @@ static void voice_cb(GtkWidget *w _U_, gpointer data)
GtkWidget *reversed_rb;
GtkWidget *both_rb;
/*GtkWidget *wav_rb; GtkWidget *au_rb; GtkWidget *sw_rb;*/
- GtkWidget *hbox3;
- GtkWidget *file_button;
- GtkWidget *file_entry;
- GtkWidget *hbox4;
GtkWidget *ok_bt;
- GtkWidget *cancel_bt;
/* if we can't save in a file: wrong codec, cut packets or other errors */
/* shold the error arise here or later when you click ok button ?
* if we do it here, then we must disable the refresh button, so we don't do it here */
- if (voice_w != NULL) {
+ if (save_voice_as_w != NULL) {
/* There's already a Save voice info dialog box; reactivate it. */
- reactivate_window(voice_w);
+ reactivate_window(save_voice_as_w);
return;
}
- voice_w = dlg_window_new("Ethereal: Save voice data");
- gtk_signal_connect(GTK_OBJECT(voice_w), "destroy",
- GTK_SIGNAL_FUNC(voice_destroy_cb), NULL);
+ save_voice_as_w = gtk_file_selection_new("Ethereal: Save Voice Data As");
+ gtk_signal_connect(GTK_OBJECT(save_voice_as_w), "destroy",
+ GTK_SIGNAL_FUNC(save_voice_as_destroy_cb), NULL);
/* Container for each row of widgets */
vertb = gtk_vbox_new(FALSE, 0);
gtk_container_border_width(GTK_CONTAINER(vertb), 5);
- gtk_container_add(GTK_CONTAINER(voice_w), vertb);
+ gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(save_voice_as_w)->action_area),
+ vertb, FALSE, FALSE, 0);
gtk_widget_show (vertb);
table1 = gtk_table_new (2, 4, FALSE);
@@ -1399,51 +1326,30 @@ static void voice_cb(GtkWidget *w _U_, gpointer data)
gtk_widget_set_sensitive(both_rb, FALSE);
}
*/
- hbox3 = gtk_hbox_new (FALSE, 0);
- gtk_widget_show (hbox3);
- gtk_box_pack_start (GTK_BOX (vertb), hbox3, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (hbox3), 10);
-
- file_button = gtk_button_new_with_label ("File:");
- gtk_widget_show (file_button);
- gtk_box_pack_start (GTK_BOX (hbox3), file_button, FALSE, FALSE, 0);
-
- file_entry = gtk_entry_new ();
- gtk_widget_show (file_entry);
- gtk_box_pack_start (GTK_BOX (hbox3), file_entry, TRUE, TRUE, 10);
-
- hbox4 = gtk_hbox_new (FALSE, 0);
- gtk_widget_show (hbox4);
- gtk_box_pack_start (GTK_BOX (vertb), hbox4, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (hbox4), 10);
-
- ok_bt = gtk_button_new_with_label ("OK");
- gtk_widget_show (ok_bt);
- gtk_box_pack_start (GTK_BOX (hbox4), ok_bt, TRUE, FALSE, 0);
- gtk_widget_set_usize (ok_bt, 60, -2);
- OBJECT_SET_DATA(ok_bt, "file_entry", file_entry);
+
+ ok_bt = GTK_FILE_SELECTION(save_voice_as_w)->ok_button;
/*OBJECT_SET_DATA(ok_bt, "wav_rb", wav_rb);
OBJECT_SET_DATA(ok_bt, "au_rb", au_rb);
OBJECT_SET_DATA(ok_bt, "sw_rb", sw_rb);*/
OBJECT_SET_DATA(ok_bt, "forward_rb", forward_rb);
OBJECT_SET_DATA(ok_bt, "reversed_rb", reversed_rb);
OBJECT_SET_DATA(ok_bt, "both_rb", both_rb);
+ OBJECT_SET_DATA(ok_bt, "info_stat", rs);
- cancel_bt = gtk_button_new_with_label (" Cancel ");
- gtk_widget_show (cancel_bt);
- gtk_box_pack_start (GTK_BOX (hbox4), cancel_bt, TRUE, FALSE, 0);
- gtk_widget_set_usize (cancel_bt, 60, -2);
-
- gtk_signal_connect(GTK_OBJECT(cancel_bt), "clicked",
- GTK_SIGNAL_FUNC(voice_close_cb), GTK_OBJECT(voice_w));
+ /* Connect the cancel_button to destroy the widget */
+ SIGNAL_CONNECT_OBJECT(GTK_FILE_SELECTION(save_voice_as_w)->cancel_button,
+ "clicked", (GtkSignalFunc)gtk_widget_destroy,
+ save_voice_as_w);
+
+ /* Catch the "key_press_event" signal in the window, so that we can catch
+ the ESC key being pressed and act as if the "Cancel" button had
+ been selected. */
+ dlg_set_cancel(save_voice_as_w, GTK_FILE_SELECTION(save_voice_as_w)->cancel_button);
gtk_signal_connect(GTK_OBJECT(ok_bt), "clicked",
- GTK_SIGNAL_FUNC(ok_button_cb), rs);
-
- gtk_signal_connect(GTK_OBJECT(file_button), "clicked",
- GTK_SIGNAL_FUNC(file_selection_cb), file_entry);
+ GTK_SIGNAL_FUNC(save_voice_as_ok_cb), save_voice_as_w);
- gtk_widget_show(voice_w);
+ gtk_widget_show(save_voice_as_w);
}
/* all the graphics on the window is done here */
@@ -1569,11 +1475,11 @@ static void add_rtp_notebook(void *pri)
gtk_button_box_set_layout(GTK_BUTTON_BOX(box4), GTK_BUTTONBOX_SPREAD);
gtk_widget_show(box4);
- voice_bt = gtk_button_new_with_label("Save voice data");
+ voice_bt = gtk_button_new_with_label("Save voice data as...");
gtk_container_add(GTK_CONTAINER(box4), voice_bt);
gtk_widget_show(voice_bt);
gtk_signal_connect(GTK_OBJECT(voice_bt), "clicked",
- GTK_SIGNAL_FUNC(voice_cb), rs);
+ GTK_SIGNAL_FUNC(save_voice_as_cb), rs);
refresh_bt = gtk_button_new_with_label("Refresh");
gtk_container_add(GTK_CONTAINER(box4), refresh_bt);