cleanup of new "question dialogs",
authorulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Sat, 31 Jan 2004 12:13:23 +0000 (12:13 +0000)
committerulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Sat, 31 Jan 2004 12:13:23 +0000 (12:13 +0000)
using GTK2 primary/secondary message text from GNOME HIG for simple_dialogs,
added a "question dialog" for the coloring rules "Clear" button

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@9921 f5534014-38df-0310-8fa8-9805f1628bb7

gtk/capture_dlg.c
gtk/color_dlg.c
gtk/compat_macros.h
gtk/dlg_utils.c
gtk/file_dlg.c
gtk/main.c
gtk/menu.c
gtk/simple_dialog.c
simple_dialog.h

index 90de6fcf8da43c7e1b5916076df74faa43e50da8..123e1aaf564004f6a6ebd8b615ebf7a15482f987 100644 (file)
@@ -1,7 +1,7 @@
 /* capture_dlg.c
  * Routines for packet capture windows
  *
- * $Id: capture_dlg.c,v 1.100 2004/01/31 03:22:39 guy Exp $
+ * $Id: capture_dlg.c,v 1.101 2004/01/31 12:13:22 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -785,10 +785,10 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
 
   if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
     /* user didn't saved his current file, ask him */
-    dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL, 
+    dialog = simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, 
                 ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL, 
-                "Save packets to \"%s\" before capturing?",
-                cf_get_display_name(&cfile));
+                PRIMARY_TEXT_START "Save capture file before starting a new capture?" PRIMARY_TEXT_END "\n\n"
+                "If you start a new capture without saving, your current capture data will be discarded.");
     simple_dialog_set_cb(dialog, capture_prep_answered_cb, NULL);
   } else {
     /* unchanged file, just capture a new one */
index 115f2e07ea1e03b5185f9f9f73be74483119df11..6c3838f994cfec5a1927e94688e36b44d500bb0e 100644 (file)
@@ -1,7 +1,7 @@
 /* color_dlg.c
  * Definitions for dialog boxes for color filters
  *
- * $Id: color_dlg.c,v 1.38 2004/01/31 03:22:39 guy Exp $
+ * $Id: color_dlg.c,v 1.39 2004/01/31 12:13:22 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -1090,7 +1090,7 @@ color_save_cb(GtkButton *button _U_, gpointer user_data _U_)
 
 /* Remove all user defined color filters and revert to the global file. */
 static void
-color_clear_cb(GtkWidget *widget, gpointer user_data _U_)
+color_clear_cmd(GtkWidget *widget)
 {
     GtkWidget * color_filters;
     
@@ -1109,9 +1109,39 @@ color_clear_cb(GtkWidget *widget, gpointer user_data _U_)
     colorize_packets(&cfile);
 
     /* Destroy the dialog box. */
+    /* XXX: is this useful? user might want to continue with editing new colors */
     gtk_widget_destroy(colorize_win);
 }
 
+/* clear button: user responded to question */
+void color_clear_answered_cb(gpointer dialog _U_, gint btn, gpointer data)
+{
+    switch(btn) {
+    case(ESD_BTN_CLEAR):
+        color_clear_cmd(data);
+        break;
+    case(ESD_BTN_CANCEL):
+        break;
+    default:
+        g_assert_not_reached();
+    }
+}
+
+/* clear button: ask user before really doing it */
+void
+color_clear_cb(GtkWidget *widget, gpointer data _U_) {
+    gpointer  dialog;
+
+    /* ask user, if he/she is really sure */
+    dialog = simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, 
+                ESD_BTN_CLEAR | ESD_BTN_CANCEL, 
+                PRIMARY_TEXT_START "Remove all your personal color settings?" PRIMARY_TEXT_END "\n\n"
+                "This will revert the color settings to global defaults.\n\n"
+                "Are you really sure?");
+
+    simple_dialog_set_cb(dialog, color_clear_answered_cb, widget);
+}
+
 /* Exit dialog and apply new list of color filters to the capture. */
 static void
 color_ok_cb(GtkButton *button _U_, gpointer user_data _U_)
index 9c9e0deb9a43ebf24c6d96209d60b1c5b0db8206..3dd6541b813e0942242b9c2025d38a5c8774552d 100644 (file)
@@ -1,7 +1,7 @@
 /* compat_macros.h
  * GTK-related Global defines, etc.
  *
- * $Id: compat_macros.h,v 1.12 2004/01/29 22:37:45 ulfl Exp $
+ * $Id: compat_macros.h,v 1.13 2004/01/31 12:13:22 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -136,6 +136,9 @@ dlg_radio_button_new_with_label_with_mnemonic( \
 #define TOGGLE_BUTTON_NEW_WITH_MNEMONIC(label_text, accel_group) \
 dlg_toggle_button_new_with_label_with_mnemonic(label_text, accel_group)
 
+#define PRIMARY_TEXT_START ""
+#define PRIMARY_TEXT_END ""
+
 #else /* GTK_MAJOR_VERSION >= 2 */
 
 #define SIGNAL_CONNECT(widget, name, callback, arg) \
@@ -220,6 +223,9 @@ gtk_radio_button_new_with_mnemonic_from_widget( \
 #define TOGGLE_BUTTON_NEW_WITH_MNEMONIC(label_text, accel_group) \
 gtk_toggle_button_new_with_mnemonic(label_text)
 
+#define PRIMARY_TEXT_START "<span weight=\"bold\" size=\"larger\">"
+#define PRIMARY_TEXT_END "</span>"
+
 #endif /* GTK_MAJOR_VERSION */
 
 #endif /* __COMPAT_MACROS_H__ */
index a7c27792e122c9de6993f304edb24f03c71de5ef..ca246357b8dbe46d0dea2c796c2b9f53d2a8f31c 100644 (file)
@@ -1,7 +1,7 @@
 /* dlg_utils.c
  * Utilities to use when constructing dialogs
  *
- * $Id: dlg_utils.c,v 1.19 2004/01/29 22:37:45 ulfl Exp $
+ * $Id: dlg_utils.c,v 1.20 2004/01/31 12:13:22 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -174,7 +174,7 @@ dlg_button_row_new(gchar *stock_id_first, ...)
     gtk_button_box_set_layout (GTK_BUTTON_BOX(button_hbox), GTK_BUTTONBOX_END);
     gtk_button_box_set_spacing(GTK_BUTTON_BOX(button_hbox), 5);
 
-#if /*!WIN32 ||*/ GTK_MAJOR_VERSION >= 2
+#if !WIN32 && GTK_MAJOR_VERSION >= 2
     /* beware: sequence of buttons are important! */
 
     /* XXX: this can be implemented more elegant of course, but it works as it should */
index 3caf32c5288ac7345a645fc73a0ef44e54ed210f..636355f6022ed5510e315adc2e91dfd949d47d39 100644 (file)
@@ -1,7 +1,7 @@
 /* file_dlg.c
  * Dialog boxes for handling files
  *
- * $Id: file_dlg.c,v 1.87 2004/01/31 03:22:39 guy Exp $
+ * $Id: file_dlg.c,v 1.88 2004/01/31 12:13:22 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -361,9 +361,10 @@ file_open_cmd_cb(GtkWidget *widget, gpointer data _U_) {
 
   if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
     /* user didn't saved his current file, ask him */
-    dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL, 
+    dialog = simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, 
                 ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL, 
-                "Save your capture file before open a new one?");
+                PRIMARY_TEXT_START "Save capture file before opening a new one?" PRIMARY_TEXT_END "\n\n"
+                "If you open a new capture file without saving, your capture data will be discarded.");
     simple_dialog_set_cb(dialog, file_open_answered_cb, widget);
   } else {
     /* unchanged file, just open a new one */
@@ -487,9 +488,11 @@ file_close_cmd_cb(GtkWidget *widget _U_, gpointer data _U_) {
 
   if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
     /* user didn't saved his current file, ask him */
-    dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL, 
+    dialog = simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, 
                 ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL, 
-                "Save your capture file before closing it?");
+                PRIMARY_TEXT_START "Save capture file before closing?" PRIMARY_TEXT_END "\n\n"
+                "If you close without saving, your capture data will be discarded.");
+
     simple_dialog_set_cb(dialog, file_close_confirmed_cb, NULL);
   } else {
     /* unchanged file, just close it */
index f3caa00f7924cf728ae012387f1697593930056e..8c90c366c9ca508aef3f257eed083a39ed551f39 100644 (file)
@@ -1,6 +1,6 @@
 /* main.c
  *
- * $Id: main.c,v 1.381 2004/01/31 03:22:41 guy Exp $
+ * $Id: main.c,v 1.382 2004/01/31 12:13:23 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -1180,10 +1180,10 @@ main_window_delete_event_cb(GtkWidget *widget _U_, GdkEvent *event _U_, gpointer
 
   if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
     /* user didn't saved his current file, ask him */
-    dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL, 
+    dialog = simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, 
                 ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL, 
-                "Save packets to \"%s\" before quit?",
-                cf_get_display_name(&cfile));
+                PRIMARY_TEXT_START "Save capture file before program quit?" PRIMARY_TEXT_END "\n\n"
+                "If you quit the program without saving, your capture data will be discarded.");
     simple_dialog_set_cb(dialog, file_quit_answered_cb, NULL);
     return TRUE;
   } else {
@@ -1256,10 +1256,10 @@ file_quit_cmd_cb(GtkWidget *widget _U_, gpointer data _U_)
 
   if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
     /* user didn't saved his current file, ask him */
-    dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL, 
+    dialog = simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, 
                 ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL, 
-                "Save packets to \"%s\" before quit?",
-                cf_get_display_name(&cfile));
+                PRIMARY_TEXT_START "Save capture file before program quit?" PRIMARY_TEXT_END "\n\n"
+                "If you quit the program without saving, your capture data will be discarded.");
     simple_dialog_set_cb(dialog, file_quit_answered_cb, NULL);
   } else {
     /* unchanged file, just exit */
index 35b36eab97beef5439626c056ec213344e4e6377..e817e5b37684cb7ce59ae89d5b5e7f3a5071ad7b 100644 (file)
@@ -1,7 +1,7 @@
 /* menu.c
  * Menu routines
  *
- * $Id: menu.c,v 1.152 2004/01/29 23:11:37 ulfl Exp $
+ * $Id: menu.c,v 1.153 2004/01/31 12:13:23 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -817,10 +817,10 @@ menu_open_recent_file_cmd_cb(GtkWidget *widget, gpointer data _U_) {
 
   if((cfile.state != FILE_CLOSED) && !cfile.user_saved) {
     /* user didn't saved his current file, ask him */
-    dialog = simple_dialog(ESD_TYPE_QUEST | ESD_TYPE_MODAL, 
+    dialog = simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, 
                 ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL, 
-                "Save packets to \"%s\" before opening a new capture file?", 
-                cf_get_display_name(&cfile));
+                PRIMARY_TEXT_START "Save capture file before opening a new one?" PRIMARY_TEXT_END "\n\n"
+                "If you open a new capture file without saving, your current capture data will be discarded.");
     simple_dialog_set_cb(dialog, menu_open_recent_file_answered_cb, widget);
   } else {
     /* unchanged file */
index ca115cb86767f92eb8506c38c8596cde11072392..34d176cc7e2315f3162b4a0f01e031f2f0cd71a5 100644 (file)
@@ -1,7 +1,7 @@
 /* simple_dialog.c
  * Simple message dialog box routines.
  *
- * $Id: simple_dialog.c,v 1.20 2004/01/31 03:22:42 guy Exp $
+ * $Id: simple_dialog.c,v 1.21 2004/01/31 12:13:23 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
@@ -62,17 +62,16 @@ static void simple_dialog_cancel_cb(GtkWidget *, gpointer);
  *
  */
 
-#define ESD_MAX_MSG_LEN 2048
 gpointer
 simple_dialog(gint type, gint btn_mask, gchar *msg_format, ...) {
   GtkWidget   *win, *main_vb, *top_hb, *type_pm, *msg_label,
-              *bbox, *bt;
+              *bbox, *ok_bt, *bt;
   GdkPixmap   *pixmap;
   GdkBitmap   *mask;
   GtkStyle    *style;
   GdkColormap *cmap;
   va_list      ap;
-  gchar        message[ESD_MAX_MSG_LEN];
+  gchar        message[2048];
   gchar      **icon;
 
   /* Main window */
@@ -81,14 +80,14 @@ simple_dialog(gint type, gint btn_mask, gchar *msg_format, ...) {
     icon = stock_dialog_warning_48_xpm;
     win = dlg_window_new("Ethereal: Warning");
     break;
+  case ESD_TYPE_QUESTION:
+    icon = stock_dialog_question_48_xpm;
+    win = dlg_window_new("Ethereal: Question");
+    break;
   case ESD_TYPE_ERROR:
     icon = stock_dialog_error_48_xpm;
     win = dlg_window_new("Ethereal: Error");
     break;
-  case ESD_TYPE_QUEST:
-    icon = stock_dialog_question_48_xpm;
-    win = dlg_window_new("Ethereal: Question");
-    break;
   case ESD_TYPE_INFO :
   default :
     icon = stock_dialog_info_48_xpm;
@@ -96,19 +95,24 @@ simple_dialog(gint type, gint btn_mask, gchar *msg_format, ...) {
     break;
   }
 
+#if GTK_MAJOR_VERSION >= 2
+  /* the GNOME HIG suggest to keep the title empty for simple dialogs */
+  /* at least on win32 systems, this isn't possible, so use the programs name */
+  gtk_window_set_title(GTK_WINDOW(win), "Ethereal");
+#endif
+
   if (type & ESD_TYPE_MODAL)
     gtk_window_set_modal(GTK_WINDOW(win), TRUE);
-
-  gtk_container_border_width(GTK_CONTAINER(win), 7);
+  gtk_container_border_width(GTK_CONTAINER(win), 6);
 
   /* Container for our rows */
-  main_vb = gtk_vbox_new(FALSE, 5);
-  gtk_container_border_width(GTK_CONTAINER(main_vb), 5);
+  main_vb = gtk_vbox_new(FALSE, 12);
   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);
+  top_hb = gtk_hbox_new(FALSE, 12);
+  gtk_container_border_width(GTK_CONTAINER(main_vb), 6);
   gtk_container_add(GTK_CONTAINER(main_vb), top_hb);
   gtk_widget_show(top_hb);
 
@@ -123,11 +127,18 @@ simple_dialog(gint type, gint btn_mask, gchar *msg_format, ...) {
 
   /* Load our vararg list into the message string */
   va_start(ap, msg_format);
-  vsnprintf(message, ESD_MAX_MSG_LEN, msg_format, ap);
+  vsnprintf(message, sizeof(message), msg_format, ap);
   va_end(ap);
 
   msg_label = gtk_label_new(message);
+
+#if GTK_MAJOR_VERSION >= 2
+  gtk_label_set_markup(GTK_LABEL(msg_label), message);
+#endif
+
+  gtk_label_set_selectable(GTK_LABEL(msg_label), TRUE);
   gtk_label_set_justify(GTK_LABEL(msg_label), GTK_JUSTIFY_FILL);
+  gtk_misc_set_alignment (GTK_MISC (type_pm), 0.5, 0.0);
   gtk_container_add(GTK_CONTAINER(top_hb), msg_label);
   gtk_widget_show(msg_label);
 
@@ -136,8 +147,8 @@ simple_dialog(gint type, gint btn_mask, gchar *msg_format, ...) {
   case(ESD_BTN_OK):
     bbox = dlg_button_row_new(GTK_STOCK_OK, NULL);
     break;
-  case(ESD_BTN_OK | ESD_BTN_CANCEL):
-    bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL);
+  case(ESD_BTN_CLEAR | ESD_BTN_CANCEL):
+    bbox = dlg_button_row_new(GTK_STOCK_CLEAR, GTK_STOCK_CANCEL, NULL);
     break;
   case(ESD_BTN_YES | ESD_BTN_NO | ESD_BTN_CANCEL):
     bbox = dlg_button_row_new(GTK_STOCK_YES, GTK_STOCK_NO, GTK_STOCK_CANCEL, NULL);
@@ -150,15 +161,16 @@ simple_dialog(gint type, gint btn_mask, gchar *msg_format, ...) {
   gtk_container_add(GTK_CONTAINER(main_vb), bbox);
   gtk_widget_show(bbox);
 
-  bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK);
+  ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK);
+  if(ok_bt) {
+      OBJECT_SET_DATA(ok_bt, CALLBACK_BTN_KEY, GINT_TO_POINTER(ESD_BTN_OK));
+      SIGNAL_CONNECT(ok_bt, "clicked", simple_dialog_cancel_cb, win);
+  }
+
+  bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLEAR);
   if(bt) {
-      OBJECT_SET_DATA(bt, CALLBACK_BTN_KEY, GINT_TO_POINTER(ESD_BTN_OK));
+      OBJECT_SET_DATA(bt, CALLBACK_BTN_KEY, GINT_TO_POINTER(ESD_BTN_CLEAR));
       SIGNAL_CONNECT(bt, "clicked", simple_dialog_cancel_cb, win);
-      gtk_widget_grab_default(bt);
-    /* Catch the "key_press_event" signal in the window, so that we can catch
-       the ESC key being pressed and act as if the "OK" button had
-       been selected. */
-    dlg_set_cancel(win, bt);
   }
 
   bt = OBJECT_GET_DATA(bbox, GTK_STOCK_YES);
@@ -184,6 +196,14 @@ simple_dialog(gint type, gint btn_mask, gchar *msg_format, ...) {
       gtk_widget_grab_default(bt);
   }
 
+  if(!bt) {
+      /* Catch the "key_press_event" signal in the window, so that we can catch
+       the ESC key being pressed and act as if the "OK" button had
+       been selected. */
+    dlg_set_cancel(win, ok_bt);
+    gtk_widget_grab_default(ok_bt);
+  }
+
   gtk_widget_show(win);
 
   return win;
index f3834222e9e40caa1a92cd724ebfef9f210eb231..b37a44a558d1ff4ca4bab03d3f29cbc1a7028e29 100644 (file)
@@ -2,7 +2,7 @@
  * Definitions for dialog box routines with toolkit-independent APIs but
  * toolkit-dependent implementations.
  *
- * $Id: simple_dialog.h,v 1.6 2004/01/31 02:25:43 ulfl Exp $
+ * $Id: simple_dialog.h,v 1.7 2004/01/31 12:13:21 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
@@ -32,10 +32,10 @@ extern "C" {
 #endif /* __cplusplus */
 
 /* Dialog type. */
-#define ESD_TYPE_INFO  0x00
-#define ESD_TYPE_WARN  0x01
-#define ESD_TYPE_ERROR 0x02
-#define ESD_TYPE_QUEST  0x03
+#define ESD_TYPE_INFO      0x00
+#define ESD_TYPE_WARN      0x01
+#define ESD_TYPE_QUESTION   0x02
+#define ESD_TYPE_ERROR     0x03
 
 /* Flag to be ORed with the dialog type, to specify that the dialog is
    to be modal. */
@@ -46,6 +46,7 @@ extern "C" {
 #define ESD_BTN_CANCEL 0x02
 #define ESD_BTN_YES    0x04
 #define ESD_BTN_NO     0x08
+#define ESD_BTN_CLEAR  0x10
 
 /* show a simple dialog */
 #if __GNUC__ >= 2