move statusbar related code from main.c into it's own main_statusbar.c
authorulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Sat, 12 Apr 2008 15:55:27 +0000 (15:55 +0000)
committerulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Sat, 12 Apr 2008 15:55:27 +0000 (15:55 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@24937 f5534014-38df-0310-8fa8-9805f1628bb7

12 files changed:
Makefile.common
gtk/Makefile.am
gtk/Makefile.common
gtk/filter_dlg.c
gtk/libui.vcproj
gtk/main.c
gtk/main.h
gtk/main_statusbar.c [new file with mode: 0644]
gtk/main_statusbar.h [new file with mode: 0644]
gtk/menu.c
gtk/packet_list.c
statusbar.h [deleted file]

index cab75da5587d5df255d94b3abb4b5da47fdb9eb5..a776bfbbd658e9372c3b54bd1b9ca11215a0a1bb 100644 (file)
@@ -175,7 +175,6 @@ wireshark_INCLUDES =        \
        proto_hier_stats.h      \
        simple_dialog.h \
        stat_menu.h     \
-       statusbar.h     \
        summary.h       \
        sync_pipe.h     \
        tap_dfilter_dlg.h       \
index 5fd270e545a7eb73a5b3c13cac45ae63095fc817..8b5b02595ef28fa4ea12a5cd9399218a9f68d889 100644 (file)
@@ -89,6 +89,7 @@ noinst_HEADERS = \
        layout_prefs.h  \
        macros_dlg.h    \
        main.h          \
+       main_statusbar.h                \
        main_welcome.h          \
        menu.h          \
        mtp3_stat.h     \
index e4b6574315c491988b0585b3798202d4c2b037ea..4f676af8ddc894cb367e353c2b189c7cda5cd24d 100644 (file)
@@ -82,6 +82,7 @@ WIRESHARK_GTK_SRC = \
        layout_prefs.c  \
        macros_dlg.c    \
        main.c          \
+       main_statusbar.c                \
        main_welcome.c          \
        menu.c          \
        nameres_prefs.c \
index 5f59ca54ca2d9b16ca33919217f27f69136fe84b..af75bb0f4e4a5375dc3120544201054460f284e4 100644 (file)
@@ -33,7 +33,8 @@
 #include <epan/filesystem.h>
 
 #include "filters.h"
-#include "gtk/main.h"
+#include "main.h"
+#include "main_statusbar.h"
 #include "filter_dlg.h"
 #include "dlg_utils.h"
 #include "gui_utils.h"
index 43bc21b770da243c2bdd4a2eba6fa803076e1019..0b76b4656c7d0190c6550b3a79ce9ce3fdd8487f 100644 (file)
                                RelativePath=".\main.c"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath=".\main_statusbar.c"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath=".\main_welcome.c"\r
                                >\r
                                RelativePath=".\main.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath=".\main_statusbar.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath=".\main_welcome.h"\r
                                >\r
index 44af49df65450ef1e5f7438381da934f52c7c916..000e4b2376cf19060bbc8cda611c56eff43a3c82 100644 (file)
 #endif /* _WIN32 */
 
 /* GTK related */
-#include "statusbar.h"
 #include "alert_box.h"
 #if 0
 #include "dlg_utils.h"
 #include "color_dlg.h"
 
 #include "main.h"
+#include "main_statusbar.h"
 #include "main_welcome.h"
 #include "menu.h"
 #include "../main_window.h"
 #include "log.h"
 #include "../epan/emem.h"
 #include "file_util.h"
-#include "expert_comp_dlg.h"
 #ifdef HAVE_LIBPCAP
 #include "../image/wsicon16.xpm"
 #include "../image/wsicon32.xpm"
 #include "../image/wsiconcap32.xpm"
 #include "../image/wsiconcap48.xpm"
 #endif
-#include "../image/expert_error.xpm"
-#include "../image/expert_warn.xpm"
-#include "../image/expert_note.xpm"
-#include "../image/expert_chat.xpm"
-#include "../image/expert_none.xpm"
 
 #ifdef HAVE_AIRPCAP
 #include <airpcap.h>
  */
 #define RC_FILE "gtkrc"
 
-#ifdef HAVE_LIBPCAP
-#define DEF_READY_MESSAGE " Ready to load or capture"
-#else
-#define DEF_READY_MESSAGE " Ready to load file"
-#endif
-
 capture_file cfile;
 GtkWidget   *main_display_filter_widget=NULL;
 GtkWidget   *top_level = NULL, *tree_view, *byte_nb_ptr, *tv_scrollw;
 GtkWidget   *pkt_scrollw;
 static GtkWidget   *main_pane_v1, *main_pane_v2, *main_pane_h1, *main_pane_h2;
 static GtkWidget   *main_first_pane, *main_second_pane;
-static GtkWidget   *status_pane_left, *status_pane_right;
-static GtkWidget   *menubar, *main_vbox, *main_tb, *stat_hbox, *filter_tb;
+GtkWidget   *statusbar;
+static GtkWidget   *menubar, *main_vbox, *main_tb, *filter_tb;
 static GtkWidget   *priv_warning_dialog;
 
 #ifdef HAVE_AIRPCAP
@@ -214,32 +202,8 @@ static GtkWidget *driver_warning_dialog;
 static int    airpcap_dll_ret_val = -1;
 #endif
 
-/*
- * The order below defines the priority of info bar contexts.
- */
-typedef enum {
-    STATUS_LEVEL_MAIN,
-    STATUS_LEVEL_FILE,
-    STATUS_LEVEL_FILTER,
-    STATUS_LEVEL_HELP,
-    NUM_STATUS_LEVELS
-} status_level_e;
-
-static GtkWidget    *info_bar;
-static GtkWidget    *packets_bar = NULL;
-static GtkWidget    *profile_bar = NULL;
 static GtkWidget    *welcome_pane;
-static GtkWidget    *expert_info_error;
-static GtkWidget    *expert_info_warn;
-static GtkWidget    *expert_info_note;
-static GtkWidget    *expert_info_chat;
-static GtkWidget    *expert_info_none;
-static guint        main_ctx, file_ctx, help_ctx, filter_ctx;
-static guint        status_levels[NUM_STATUS_LEVELS];
-static guint        packets_ctx;
-static guint        profile_ctx;
-static gchar        *packets_str = NULL;
-static gchar        *profile_str = NULL;
+
 GString *comp_info_str, *runtime_info_str;
 gboolean have_capture_file = FALSE; /* XXX - is there an equivalent in cfile? */
 
@@ -830,6 +794,7 @@ tree_view_selection_changed_cb(GtkTreeSelection *sel, gpointer user_data _U_)
             length = strlen(finfo->hfinfo->name);
         }
         finfo_length = finfo->length + finfo->appendix_length;
+
         if (finfo_length == 0) {
             len_str[0] = '\0';
         } else if (finfo_length == 1) {
@@ -867,7 +832,6 @@ tree_view_selection_changed_cb(GtkTreeSelection *sel, gpointer user_data _U_)
             statusbar_push_field_msg("");
         }
     }
-
     packet_hex_print(byte_view, byte_data, cfile.current_frame, finfo,
                      byte_len);
 }
@@ -902,145 +866,6 @@ void resolve_name_cb(GtkWidget *widget _U_, gpointer data _U_) {
   }
 }
 
-/*
- * Push a message referring to file access onto the statusbar.
- */
-void
-statusbar_push_file_msg(const gchar *msg)
-{
-    int i;
-
-    /*g_warning("statusbar_push: %s", msg);*/
-    for (i = STATUS_LEVEL_FILE + 1; i < NUM_STATUS_LEVELS; i++) {
-        if (status_levels[i])
-            return;
-    }
-    status_levels[STATUS_LEVEL_FILE]++;
-    gtk_statusbar_push(GTK_STATUSBAR(info_bar), file_ctx, msg);
-}
-
-/*
- * Pop a message referring to file access off the statusbar.
- */
-void
-statusbar_pop_file_msg(void)
-{
-    /*g_warning("statusbar_pop");*/
-    if (status_levels[STATUS_LEVEL_FILE] > 0) {
-        status_levels[STATUS_LEVEL_FILE]--;
-    }
-    gtk_statusbar_pop(GTK_STATUSBAR(info_bar), file_ctx);
-}
-
-/*
- * XXX - do we need multiple statusbar contexts?
- */
-
-/*
- * Push a message referring to the currently-selected field onto the statusbar.
- */
-void
-statusbar_push_field_msg(const gchar *msg)
-{
-    int i;
-
-    for (i = STATUS_LEVEL_HELP + 1; i < NUM_STATUS_LEVELS; i++) {
-        if (status_levels[i])
-            return;
-    }
-    status_levels[STATUS_LEVEL_HELP]++;
-
-    gtk_statusbar_push(GTK_STATUSBAR(info_bar), help_ctx, msg);
-}
-
-/*
- * Pop a message referring to the currently-selected field off the statusbar.
- */
-void
-statusbar_pop_field_msg(void)
-{
-    if (status_levels[STATUS_LEVEL_HELP] > 0) {
-        status_levels[STATUS_LEVEL_HELP]--;
-    }
-    gtk_statusbar_pop(GTK_STATUSBAR(info_bar), help_ctx);
-}
-
-/*
- * Push a message referring to the current filter onto the statusbar.
- */
-void
-statusbar_push_filter_msg(const gchar *msg)
-{
-    int i;
-
-    for (i = STATUS_LEVEL_FILTER + 1; i < NUM_STATUS_LEVELS; i++) {
-        if (status_levels[i])
-            return;
-    }
-    status_levels[STATUS_LEVEL_FILTER]++;
-
-    gtk_statusbar_push(GTK_STATUSBAR(info_bar), filter_ctx, msg);
-}
-
-/*
- * Pop a message referring to the current filter off the statusbar.
- */
-void
-statusbar_pop_filter_msg(void)
-{
-    if (status_levels[STATUS_LEVEL_FILTER] > 0) {
-        status_levels[STATUS_LEVEL_FILTER]--;
-    }
-    gtk_statusbar_pop(GTK_STATUSBAR(info_bar), filter_ctx);
-}
-
-/*
- * update the packets statusbar to the current values
- */
-void packets_bar_update(void)
-{
-
-    if(packets_bar) {
-        /* remove old status */
-        if(packets_str) {
-            g_free(packets_str);
-            gtk_statusbar_pop(GTK_STATUSBAR(packets_bar), packets_ctx);
-        }
-
-        /* do we have any packets? */
-        if(cfile.count) {
-            if(cfile.drops_known) {
-                packets_str = g_strdup_printf(" Packets: %u Displayed: %u Marked: %u Dropped: %u",
-                    cfile.count, cfile.displayed_count, cfile.marked_count, cfile.drops);
-            } else {
-                packets_str = g_strdup_printf(" Packets: %u Displayed: %u Marked: %u",
-                    cfile.count, cfile.displayed_count, cfile.marked_count);
-            }
-        } else {
-            packets_str = g_strdup(" No Packets");
-        }
-        gtk_statusbar_push(GTK_STATUSBAR(packets_bar), packets_ctx, packets_str);
-    }
-}
-
-/*
- * update the packets statusbar to the current values
- */
-void profile_bar_update(void)
-{
-    if (profile_bar) {
-        /* remove old status */
-        if(profile_str) {
-            g_free(profile_str);
-            gtk_statusbar_pop(GTK_STATUSBAR(profile_bar), profile_ctx);
-        }
-
-       profile_str = g_strdup_printf (" Profile: %s", get_profile_name ());
-
-        gtk_statusbar_push(GTK_STATUSBAR(profile_bar), profile_ctx, profile_str);
-    }
-}
-
 void
 main_set_for_capture_file(gboolean have_capture_file_in)
 {
@@ -1178,10 +1003,7 @@ main_load_window_geometry(GtkWidget *widget)
         gtk_paned_set_position(GTK_PANED(main_first_pane), recent.gui_geometry_main_upper_pane);
     if (recent.has_gui_geometry_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.has_gui_geometry_status_pane && recent.gui_geometry_status_pane_left)
-        gtk_paned_set_position(GTK_PANED(status_pane_left), recent.gui_geometry_status_pane_left);
-    if (recent.has_gui_geometry_status_pane && recent.gui_geometry_status_pane_right)
-        gtk_paned_set_position(GTK_PANED(status_pane_right), recent.gui_geometry_status_pane_right);
+    statusbar_load_window_geometry();
 }
 
 
@@ -1208,8 +1030,7 @@ main_save_window_geometry(GtkWidget *widget)
 
     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_left    = gtk_paned_get_position(GTK_PANED(status_pane_left));
-    recent.gui_geometry_status_pane_right   = gtk_paned_get_position(GTK_PANED(status_pane_right));
+    statusbar_save_window_geometry();
 }
 
 static void file_quit_answered_cb(gpointer dialog _U_, gint btn, gpointer data _U_)
@@ -1461,14 +1282,11 @@ unprotect_thread_critical_region(void)
 #endif
 }
 
-/* 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. */
+/* Set the file name in the name for the main window and in the name for the main window's icon. */
 static void
 set_display_filename(capture_file *cf)
 {
   const gchar *name_ptr;
-  gchar       *status_msg;
-  gchar       *size_str;
   gchar       *win_name;
 
   name_ptr = cf_get_display_name(cf);
@@ -1478,49 +1296,6 @@ set_display_filename(capture_file *cf)
     add_menu_recent_capture_file(cf->filename);
   }
 
-  /* expert info indicator */
-  gtk_widget_hide(expert_info_error);
-  gtk_widget_hide(expert_info_warn);
-  gtk_widget_hide(expert_info_note);
-  gtk_widget_hide(expert_info_chat);
-  gtk_widget_hide(expert_info_none);
-  switch(expert_get_highest_severity()) {
-      case(PI_ERROR):
-        gtk_widget_show(expert_info_error);
-        break;
-      case(PI_WARN):
-        gtk_widget_show(expert_info_warn);
-        break;
-      case(PI_NOTE):
-        gtk_widget_show(expert_info_note);
-        break;
-      case(PI_CHAT):
-        gtk_widget_show(expert_info_chat);
-        break;
-      default:
-        gtk_widget_show(expert_info_none);
-        break;
-  }
-
-  /* statusbar */
-  /* convert file size */
-  if (cf->f_datalen/1024/1024 > 10) {
-    size_str = g_strdup_printf("%" G_GINT64_MODIFIER "d MB", cf->f_datalen/1024/1024);
-  } else if (cf->f_datalen/1024 > 10) {
-    size_str = g_strdup_printf("%" G_GINT64_MODIFIER "d KB", cf->f_datalen/1024);
-  } else {
-    size_str = g_strdup_printf("%" G_GINT64_MODIFIER "d Bytes", cf->f_datalen);
-  }
-
-  status_msg = g_strdup_printf(" File: \"%s\" %s %02lu:%02lu:%02lu",
-    (cf->filename) ? cf->filename : "", size_str,
-    (long)cf->elapsed_time.secs/3600,
-    (long)cf->elapsed_time.secs%3600/60,
-    (long)cf->elapsed_time.secs%60);
-  g_free(size_str);
-  statusbar_push_file_msg(status_msg);
-  g_free(status_msg);
-
   /* window title */
   win_name = g_strdup_printf("%s - Wireshark", name_ptr);
   set_main_window_name(win_name);
@@ -1564,18 +1339,6 @@ main_cf_cb_file_closing(capture_file *cf)
     destroy_packet_wins();
     file_save_as_destroy();
 
-    /* Clear any file-related status bar messages.
-       XXX - should be "clear *ALL* file-related status bar messages;
-       will there ever be more than one on the stack? */
-    statusbar_pop_file_msg();
-
-    /* reset expert info indicator */
-    gtk_widget_hide(expert_info_error);
-    gtk_widget_hide(expert_info_warn);
-    gtk_widget_hide(expert_info_note);
-    gtk_widget_hide(expert_info_chat);
-    gtk_widget_show(expert_info_none);
-
     /* Restore the standard title bar message. */
     set_main_window_name("The Wireshark Network Analyzer");
 
@@ -1599,26 +1362,12 @@ main_cf_cb_file_closed(capture_file *cf _U_)
     splash_destroy(close_dlg);
     close_dlg = NULL;
   }
-
-  /* go back to "No packets" */
-  packets_bar_update();
 }
 
+
 static void
 main_cf_cb_file_read_start(capture_file *cf)
 {
-  const gchar *name_ptr;
-  gchar       *load_msg;
-
-  /* Ensure we pop any previous loaded filename */
-  statusbar_pop_file_msg();
-
-  name_ptr = get_basename(cf->filename);
-
-  load_msg = g_strdup_printf(" Loading: %s", name_ptr);
-  statusbar_push_file_msg(load_msg);
-  g_free(load_msg);
-
   /* Set up main window for a capture file. */
   main_set_for_capture_file(TRUE);
 }
@@ -1626,7 +1375,6 @@ main_cf_cb_file_read_start(capture_file *cf)
 static void
 main_cf_cb_file_read_finished(capture_file *cf)
 {
-    statusbar_pop_file_msg();
     set_display_filename(cf);
 
     /* Enable menu items that make sense if you have a capture file you've
@@ -1703,9 +1451,6 @@ main_cf_cb_live_capture_prepared(capture_options *capture_opts)
        a capture. */
     set_menus_for_capture_in_progress(TRUE);
 
-    /* update statusbar */
-    statusbar_push_file_msg(" Waiting for capture input data ...");
-
     /* Don't set up main window for a capture file. */
     main_set_for_capture_file(FALSE);
 }
@@ -1713,7 +1458,6 @@ main_cf_cb_live_capture_prepared(capture_options *capture_opts)
 static void
 main_cf_cb_live_capture_update_started(capture_options *capture_opts)
 {
-    gchar *capture_msg;
     gchar *title;
 
     /* We've done this in "prepared" above, but it will be cleared while
@@ -1733,92 +1477,15 @@ main_cf_cb_live_capture_update_started(capture_options *capture_opts)
        packets (yes, I know, we don't have any *yet*). */
     set_menus_for_captured_packets(TRUE);
 
-    statusbar_pop_file_msg();
-
-    if(capture_opts->iface) {
-        capture_msg = g_strdup_printf(" %s: <live capture in progress> to file: %s",
-                                     get_iface_description(capture_opts),
-                                     (capture_opts->save_file) ? capture_opts->save_file : "");
-    } else {
-        capture_msg = g_strdup_printf(" <live capture in progress> to file: %s",
-            (capture_opts->save_file) ? capture_opts->save_file : "");
-    }
-
-    statusbar_push_file_msg(capture_msg);
-
-    g_free(capture_msg);
-
     /* Set up main window for a capture file. */
     main_set_for_capture_file(TRUE);
 }
 
-static void
-main_cf_cb_live_capture_update_continue(capture_file *cf)
-{
-    gchar *capture_msg;
-
-
-    statusbar_pop_file_msg();
-
-    /* expert info indicator */
-    gtk_widget_hide(expert_info_error);
-    gtk_widget_hide(expert_info_warn);
-    gtk_widget_hide(expert_info_note);
-    gtk_widget_hide(expert_info_chat);
-    gtk_widget_hide(expert_info_none);
-    switch(expert_get_highest_severity()) {
-        case(PI_ERROR):
-        gtk_widget_show(expert_info_error);
-        break;
-        case(PI_WARN):
-        gtk_widget_show(expert_info_warn);
-        break;
-        case(PI_NOTE):
-        gtk_widget_show(expert_info_note);
-        break;
-        case(PI_CHAT):
-        gtk_widget_show(expert_info_chat);
-        break;
-        default:
-        gtk_widget_show(expert_info_none);
-        break;
-    }
-
-    if (cf->f_datalen/1024/1024 > 10) {
-        capture_msg = g_strdup_printf(" %s: <live capture in progress> File: %s %" G_GINT64_MODIFIER "d MB",
-                                     get_iface_description(capture_opts),
-                                     capture_opts->save_file,
-                                     cf->f_datalen/1024/1024);
-    } else if (cf->f_datalen/1024 > 10) {
-        capture_msg = g_strdup_printf(" %s: <live capture in progress> File: %s %" G_GINT64_MODIFIER "d KB",
-                                     get_iface_description(capture_opts),
-                                     capture_opts->save_file,
-                                     cf->f_datalen/1024);
-    } else {
-        capture_msg = g_strdup_printf(" %s: <live capture in progress> File: %s %" G_GINT64_MODIFIER "d Bytes",
-                                     get_iface_description(capture_opts),
-                                     capture_opts->save_file,
-                                     cf->f_datalen);
-    }
-
-    statusbar_push_file_msg(capture_msg);
-}
-
-GtkWidget * stop_dlg = NULL;
-
 static void
 main_cf_cb_live_capture_update_finished(capture_file *cf)
 {
     static GList *icon_list = NULL;
 
-    if(stop_dlg != NULL) {
-        simple_dialog_close(stop_dlg);
-        stop_dlg = NULL;
-    }
-
-    /* Pop the "<live capture in progress>" message off the status bar. */
-    statusbar_pop_file_msg();
-
     set_display_filename(cf);
 
     /* Enable menu items that make sense if you're not currently running
@@ -1847,59 +1514,15 @@ main_cf_cb_live_capture_update_finished(capture_file *cf)
 static void
 main_cf_cb_live_capture_fixed_started(capture_options *capture_opts)
 {
-    gchar *capture_msg;
-
-
-    /* Enable menu items that make sense if you have some captured
-       packets (yes, I know, we don't have any *yet*). */
-    /*set_menus_for_captured_packets(TRUE);*/
-
-    statusbar_pop_file_msg();
-
-    capture_msg = g_strdup_printf(" %s: <live capture in progress> to file: %s",
-                                 get_iface_description(capture_opts),
-                                 (capture_opts->save_file) ? capture_opts->save_file : "");
-
-    statusbar_push_file_msg(capture_msg);
-    gtk_statusbar_push(GTK_STATUSBAR(packets_bar), packets_ctx, " Packets: 0");
-
-    g_free(capture_msg);
-
     /* Don't set up main window for a capture file. */
     main_set_for_capture_file(FALSE);
 }
 
-static void
-main_cf_cb_live_capture_fixed_continue(capture_file *cf)
-{
-    gchar *capture_msg;
-
-
-    gtk_statusbar_pop(GTK_STATUSBAR(packets_bar), packets_ctx);
-
-    capture_msg = g_strdup_printf(" Packets: %u", cf_get_packet_count(cf));
-
-    gtk_statusbar_push(GTK_STATUSBAR(packets_bar), packets_ctx, capture_msg);
-
-    g_free(capture_msg);
-}
-
 static void
 main_cf_cb_live_capture_fixed_finished(capture_file *cf _U_)
 {
     static GList *icon_list = NULL;
 
-    if(stop_dlg != NULL) {
-        simple_dialog_close(stop_dlg);
-        stop_dlg = NULL;
-    }
-
-    /* Pop the "<live capture in progress>" message off the status bar. */
-    statusbar_pop_file_msg();
-
-    /* Pop the "<capturing>" message off the status bar */
-    gtk_statusbar_pop(GTK_STATUSBAR(packets_bar), packets_ctx);
-
     /*set_display_filename(cf);*/
 
     /* Enable menu items that make sense if you're not currently running
@@ -1925,23 +1548,6 @@ main_cf_cb_live_capture_fixed_finished(capture_file *cf _U_)
     }
 }
 
-static void
-main_cf_cb_live_capture_stopping(capture_file *cf _U_)
-{
-    /* Beware: this state won't be called, if the capture child
-     * closes the capturing on it's own! */
-#if 0
-    /* XXX - the time to stop the capture has been reduced (this was only a
-     * problem on Win32 because of the capture piping), so showing a splash
-     * isn't really necessary any longer. Unfortunately, the GTKClist packet
-     * list seems to have problems updating after the dialog is closed, so
-     * this was disabled here. */
-    stop_dlg = simple_dialog(ESD_TYPE_STOP, ESD_BTN_NONE, "%sCapture stop!%s\n\nPlease wait ...",
-               simple_dialog_primary_start(), simple_dialog_primary_end());
-    gtk_window_set_position(GTK_WINDOW(stop_dlg), GTK_WIN_POS_CENTER_ON_PARENT);
-#endif
-}
-
 #endif
 
 static void
@@ -1980,38 +1586,9 @@ main_cf_cb_packet_unselected(capture_file *cf)
 static void
 main_cf_cb_field_unselected(capture_file *cf)
 {
-    statusbar_pop_field_msg();
     set_menus_for_selected_tree_row(cf);
 }
 
-static void
-main_cf_cb_file_safe_started(gchar * filename)
-{
-    const gchar  *name_ptr;
-    gchar        *save_msg;
-
-    name_ptr = get_basename(filename);
-
-    save_msg = g_strdup_printf(" Saving: %s...", name_ptr);
-
-    statusbar_push_file_msg(save_msg);
-    g_free(save_msg);
-}
-
-static void
-main_cf_cb_file_safe_finished(gpointer data _U_)
-{
-    /* Pop the "Saving:" message off the status bar. */
-    statusbar_pop_file_msg();
-}
-
-static void
-main_cf_cb_file_safe_failed(gpointer data _U_)
-{
-    /* Pop the "Saving:" message off the status bar. */
-    statusbar_pop_file_msg();
-}
-
 static void
 main_cf_cb_file_safe_reload_finished(gpointer data _U_)
 {
@@ -2048,7 +1625,6 @@ static void main_cf_callback(gint event, gpointer data, gpointer user_data _U_)
         break;
     case(cf_cb_live_capture_update_continue):
         /*g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update continue");*/
-        main_cf_cb_live_capture_update_continue(data);
         break;
     case(cf_cb_live_capture_update_finished):
         g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update finished");
@@ -2060,7 +1636,6 @@ static void main_cf_callback(gint event, gpointer data, gpointer user_data _U_)
         break;
     case(cf_cb_live_capture_fixed_continue):
         g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed continue");
-        main_cf_cb_live_capture_fixed_continue(data);
         break;
     case(cf_cb_live_capture_fixed_finished):
         g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed finished");
@@ -2068,7 +1643,8 @@ static void main_cf_callback(gint event, gpointer data, gpointer user_data _U_)
         break;
     case(cf_cb_live_capture_stopping):
         g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture stopping");
-        main_cf_cb_live_capture_stopping(data);
+        /* Beware: this state won't be called, if the capture child
+         * closes the capturing on it's own! */
         break;
 #endif
     case(cf_cb_packet_selected):
@@ -2082,11 +1658,9 @@ static void main_cf_callback(gint event, gpointer data, gpointer user_data _U_)
         break;
     case(cf_cb_file_safe_started):
         g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: safe started");
-        main_cf_cb_file_safe_started(data);
         break;
     case(cf_cb_file_safe_finished):
         g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: safe finished");
-        main_cf_cb_file_safe_finished(data);
         break;
     case(cf_cb_file_safe_reload_finished):
         g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: reload finished");
@@ -2094,7 +1668,6 @@ static void main_cf_callback(gint event, gpointer data, gpointer user_data _U_)
         break;
     case(cf_cb_file_safe_failed):
         g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: safe failed");
-        main_cf_cb_file_safe_failed(data);
         break;
     default:
         g_warning("main_cf_callback: event %u unknown", event);
@@ -2497,6 +2070,7 @@ main(int argc, char *argv[])
   gtk_init (&argc, &argv);
 
   cf_callback_add(main_cf_callback, NULL);
+  cf_callback_add(statusbar_cf_callback, NULL);
 
   /* Arrange that if we have no console window, and a GLib message logging
      routine is called to log a message, we pop up a console window.
@@ -3322,48 +2896,6 @@ console_log_handler(const char *log_domain, GLogLevelFlags log_level,
 }
 
 
-static GtkWidget *info_bar_new(void)
-{
-    int i;
-
-    /* tip: tooltips don't work on statusbars! */
-    info_bar = gtk_statusbar_new();
-    main_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "main");
-    file_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "file");
-    help_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "help");
-    filter_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "filter");
-    gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(info_bar), FALSE);
-    gtk_statusbar_push(GTK_STATUSBAR(info_bar), main_ctx, DEF_READY_MESSAGE);
-
-    for (i = 0; i < NUM_STATUS_LEVELS; i++) {
-        status_levels[i] = 0;
-    }
-
-    return info_bar;
-}
-
-static GtkWidget *packets_bar_new(void)
-{
-    /* tip: tooltips don't work on statusbars! */
-    packets_bar = gtk_statusbar_new();
-    packets_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(packets_bar), "packets");
-    packets_bar_update();
-    gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(packets_bar), FALSE);
-
-    return packets_bar;
-}
-
-static GtkWidget *profile_bar_new(void)
-{
-    /* tip: tooltips don't work on statusbars! */
-    profile_bar = gtk_statusbar_new();
-    profile_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(profile_bar), "profile");
-    profile_bar_update();
-
-    return profile_bar;
-}
-
-
 /*
  * Helper for main_widgets_rearrange()
  */
@@ -3412,17 +2944,7 @@ void main_widgets_rearrange(void) {
     gtk_widget_ref(pkt_scrollw);
     gtk_widget_ref(tv_scrollw);
     gtk_widget_ref(byte_nb_ptr);
-    gtk_widget_ref(stat_hbox);
-    gtk_widget_ref(expert_info_error);
-    gtk_widget_ref(expert_info_warn);
-    gtk_widget_ref(expert_info_note);
-    gtk_widget_ref(expert_info_chat);
-    gtk_widget_ref(expert_info_none);
-    gtk_widget_ref(info_bar);
-    gtk_widget_ref(packets_bar);
-    gtk_widget_ref(profile_bar);
-    gtk_widget_ref(status_pane_left);
-    gtk_widget_ref(status_pane_right);
+    gtk_widget_ref(statusbar);
     gtk_widget_ref(main_pane_v1);
     gtk_widget_ref(main_pane_v2);
     gtk_widget_ref(main_pane_h1);
@@ -3431,14 +2953,13 @@ void main_widgets_rearrange(void) {
 
     /* empty all containers participating */
     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_left),   foreach_remove_a_child, status_pane_left);
-    gtk_container_foreach(GTK_CONTAINER(status_pane_right),   foreach_remove_a_child, status_pane_right);
     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);
 
+    statusbar_widgets_emptying(statusbar);
+
     /* add the menubar always at the top */
     gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, TRUE, 0);
 
@@ -3518,12 +3039,12 @@ void main_widgets_rearrange(void) {
     /* welcome pane */
     gtk_box_pack_start(GTK_BOX(main_vbox), welcome_pane, TRUE, TRUE, 0);
 
-    /* statusbar hbox */
-    gtk_box_pack_start(GTK_BOX(main_vbox), stat_hbox, FALSE, TRUE, 0);
+    /* statusbar */
+    gtk_box_pack_start(GTK_BOX(main_vbox), statusbar, FALSE, TRUE, 0);
 
     /* filter toolbar in statusbar hbox */
     if (prefs.filter_toolbar_show_in_statusbar) {
-        gtk_box_pack_start(GTK_BOX(stat_hbox), filter_tb, FALSE, TRUE, 1);
+        gtk_box_pack_start(GTK_BOX(statusbar), filter_tb, FALSE, TRUE, 1);
     }
 
 #ifdef HAVE_AIRPCAP
@@ -3531,17 +3052,8 @@ void main_widgets_rearrange(void) {
     gtk_box_pack_start(GTK_BOX(main_vbox), airpcap_tb, FALSE, TRUE, 1);
 #endif
 
-    /* statusbar */
-    gtk_box_pack_start(GTK_BOX(stat_hbox), expert_info_error, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(stat_hbox), expert_info_warn, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(stat_hbox), expert_info_note, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(stat_hbox), expert_info_chat, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(stat_hbox), expert_info_none, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(stat_hbox), status_pane_left, TRUE, TRUE, 0);
-    gtk_paned_pack1(GTK_PANED(status_pane_left), info_bar, FALSE, FALSE);
-    gtk_paned_pack2(GTK_PANED(status_pane_left), status_pane_right, TRUE, FALSE);
-    gtk_paned_pack1(GTK_PANED(status_pane_right), packets_bar, TRUE, FALSE);
-    gtk_paned_pack2(GTK_PANED(status_pane_right), profile_bar, FALSE, FALSE);
+    /* statusbar widgets */
+    statusbar_widgets_pack(statusbar);
 
     /* hide widgets on users recent settings */
     main_widgets_show_or_hide();
@@ -3579,28 +3091,7 @@ main_widgets_show_or_hide(void)
         gtk_widget_hide(main_tb);
     }
 
-    /*
-     * Show the status hbox if either:
-     *
-     *    1) we're showing the filter toolbar and we want it in the status
-     *       line
-     *
-     * or
-     *
-     *    2) we're showing the status bar.
-     */
-    if ((recent.filter_toolbar_show && prefs.filter_toolbar_show_in_statusbar) ||
-         recent.statusbar_show) {
-        gtk_widget_show(stat_hbox);
-    } else {
-        gtk_widget_hide(stat_hbox);
-    }
-
-    if (recent.statusbar_show) {
-        gtk_widget_show(status_pane_left);
-    } else {
-        gtk_widget_hide(status_pane_left);
-    }
+    statusbar_widgets_show_or_hide(statusbar);
 
     if (recent.filter_toolbar_show) {
         gtk_widget_show(filter_tb);
@@ -3890,8 +3381,7 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
                   *filter_bt, *filter_cm, *filter_te,
                   *filter_add_expr_bt,
                   *filter_apply,
-                  *filter_reset,
-                  *expert_image;
+                  *filter_reset;
     GList         *dfilter_list = NULL;
     GtkTooltips   *tooltips;
 
@@ -4330,66 +3820,8 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
     g_object_set_data(G_OBJECT(popup_menu_object), E_DFILTER_TE_KEY, filter_te);
     g_object_set_data(G_OBJECT(popup_menu_object), E_MPACKET_LIST_KEY, packet_list);
 
-    /* expert info indicator */
-    expert_image = xpm_to_widget_from_parent(top_level, expert_error_xpm);
-    gtk_tooltips_set_tip(tooltips, expert_image, "ERROR is the highest expert info level", NULL);
-    gtk_widget_show(expert_image);
-    expert_info_error = gtk_event_box_new();
-    gtk_container_add(GTK_CONTAINER(expert_info_error), expert_image);
-    g_signal_connect(expert_info_error, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
-
-    expert_image = xpm_to_widget_from_parent(top_level, expert_warn_xpm);
-    gtk_tooltips_set_tip(tooltips, expert_image, "WARNING is the highest expert info level", NULL);
-    gtk_widget_show(expert_image);
-    expert_info_warn = gtk_event_box_new();
-    gtk_container_add(GTK_CONTAINER(expert_info_warn), expert_image);
-    g_signal_connect(expert_info_warn, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
-
-    expert_image = xpm_to_widget_from_parent(top_level, expert_note_xpm);
-    gtk_tooltips_set_tip(tooltips, expert_image, "NOTE is the highest expert info level", NULL);
-    gtk_widget_show(expert_image);
-    expert_info_note = gtk_event_box_new();
-    gtk_container_add(GTK_CONTAINER(expert_info_note), expert_image);
-    g_signal_connect(expert_info_note, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
-
-    expert_image = xpm_to_widget_from_parent(top_level, expert_chat_xpm);
-    gtk_tooltips_set_tip(tooltips, expert_image, "CHAT is the highest expert info level", NULL);
-    gtk_widget_show(expert_image);
-    expert_info_chat = gtk_event_box_new();
-    gtk_container_add(GTK_CONTAINER(expert_info_chat), expert_image);
-    g_signal_connect(expert_info_chat, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
-
-    expert_image = xpm_to_widget_from_parent(top_level, expert_none_xpm);
-    gtk_tooltips_set_tip(tooltips, expert_image, "No expert info", NULL);
-    gtk_widget_show(expert_image);
-    expert_info_none = gtk_event_box_new();
-    gtk_container_add(GTK_CONTAINER(expert_info_none), expert_image);
-    g_signal_connect(expert_info_none, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
-    gtk_widget_show(expert_info_none);
-
-
-    /* info (main) statusbar */
-    info_bar = info_bar_new();
-    gtk_widget_show(info_bar);
-
-    /* packets statusbar */
-    packets_bar = packets_bar_new();
-    gtk_widget_show(packets_bar);
-
-    /* profile statusbar */
-    profile_bar = profile_bar_new();
-    gtk_widget_show(profile_bar);
-
-    /* Filter/status hbox */
-    stat_hbox = gtk_hbox_new(FALSE, 1);
-    gtk_container_border_width(GTK_CONTAINER(stat_hbox), 0);
-    gtk_widget_show(stat_hbox);
-
-    /* Pane for the statusbar */
-    status_pane_left = gtk_hpaned_new();
-    gtk_widget_show(status_pane_left);
-    status_pane_right = gtk_hpaned_new();
-    gtk_widget_show(status_pane_right);
+    /* status bar */
+    statusbar = statusbar_new();
 
     /* Pane for the welcome screen */
     welcome_pane = welcome_new();
index 6490114bd33a6590e21530c8a9b9ea9655c17b79..be013529664fe2e0351518385c638a622b53ff1a 100644 (file)
@@ -326,12 +326,6 @@ extern void main_widgets_show_or_hide(void);
 extern gboolean main_filter_packets(capture_file *cf, const gchar *dftext,
     gboolean force);
 
-/** Update the packets statusbar to the current values. */
-extern void packets_bar_update(void);
-
-/** Update the profile statusbar to the current values. */
-extern void profile_bar_update(void);
-
 #ifdef _WIN32
 /** Win32 only: Create a console. Beware: cannot be closed again. */
 extern void create_console(void);
@@ -345,16 +339,4 @@ extern void change_configuration_profile(const gchar *profile_name);
 
 extern GtkWidget *pkt_scrollw;
 
-/** Push a message referring to the current filter onto the statusbar.
- *
- * @param msg The message
- */
-void
-statusbar_push_filter_msg(const gchar *msg);
-
-/** Pop a message referring to the current filter off the statusbar.
- */
-void
-statusbar_pop_filter_msg(void);
-
 #endif /* __MAIN_H__ */
diff --git a/gtk/main_statusbar.c b/gtk/main_statusbar.c
new file mode 100644 (file)
index 0000000..b324786
--- /dev/null
@@ -0,0 +1,764 @@
+/* main_statusbar.c
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.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 <gtk/gtk.h>
+
+#include <epan/epan.h>
+#include <epan/filesystem.h>
+#include <epan/epan_dissect.h>
+#include <epan/expert.h>
+#include <epan/prefs.h>
+
+#include "cfile.h"
+#include "file.h"
+#include "capture_opts.h"
+#include "capture_ui_utils.h"
+#include "recent.h"
+#include "main.h"
+#include "main_statusbar.h"
+#include "gui_utils.h"
+#include "gtkglobals.h"
+#include "expert_comp_dlg.h"
+
+#include "../image/expert_error.xpm"
+#include "../image/expert_warn.xpm"
+#include "../image/expert_note.xpm"
+#include "../image/expert_chat.xpm"
+#include "../image/expert_none.xpm"
+
+/*
+ * The order below defines the priority of info bar contexts.
+ */
+typedef enum {
+    STATUS_LEVEL_MAIN,
+    STATUS_LEVEL_FILE,
+    STATUS_LEVEL_FILTER,
+    STATUS_LEVEL_HELP,
+    NUM_STATUS_LEVELS
+} status_level_e;
+
+
+#ifdef HAVE_LIBPCAP
+#define DEF_READY_MESSAGE " Ready to load or capture"
+#else
+#define DEF_READY_MESSAGE " Ready to load file"
+#endif
+
+
+GtkWidget    *status_pane_left, *status_pane_right;
+GtkWidget    *info_bar, *packets_bar, *profile_bar;
+GtkWidget    *expert_info_error, *expert_info_warn, *expert_info_note;
+GtkWidget    *expert_info_chat, *expert_info_none;
+
+static guint        main_ctx, file_ctx, help_ctx, filter_ctx, packets_ctx, profile_ctx;
+static guint        status_levels[NUM_STATUS_LEVELS];
+static gchar        *packets_str = NULL;
+static gchar        *profile_str = NULL;
+
+
+GtkWidget *info_bar_new(void);
+GtkWidget *packets_bar_new(void);
+GtkWidget *profile_bar_new(void);
+void status_expert_new(void);
+
+
+
+/*
+ * Push a message referring to file access onto the statusbar.
+ */
+static void
+statusbar_push_file_msg(const gchar *msg)
+{
+    int i;
+
+    /*g_warning("statusbar_push: %s", msg);*/
+    for (i = STATUS_LEVEL_FILE + 1; i < NUM_STATUS_LEVELS; i++) {
+        if (status_levels[i])
+            return;
+    }
+    status_levels[STATUS_LEVEL_FILE]++;
+    gtk_statusbar_push(GTK_STATUSBAR(info_bar), file_ctx, msg);
+}
+
+/*
+ * Pop a message referring to file access off the statusbar.
+ */
+static void
+statusbar_pop_file_msg(void)
+{
+    /*g_warning("statusbar_pop");*/
+    if (status_levels[STATUS_LEVEL_FILE] > 0) {
+        status_levels[STATUS_LEVEL_FILE]--;
+    }
+    gtk_statusbar_pop(GTK_STATUSBAR(info_bar), file_ctx);
+}
+
+/*
+ * Push a message referring to the currently-selected field onto the statusbar.
+ */
+void
+statusbar_push_field_msg(const gchar *msg)
+{
+    int i;
+
+    for (i = STATUS_LEVEL_HELP + 1; i < NUM_STATUS_LEVELS; i++) {
+        if (status_levels[i])
+            return;
+    }
+    status_levels[STATUS_LEVEL_HELP]++;
+
+    gtk_statusbar_push(GTK_STATUSBAR(info_bar), help_ctx, msg);
+}
+
+/*
+ * Pop a message referring to the currently-selected field off the statusbar.
+ */
+void
+statusbar_pop_field_msg(void)
+{
+    if (status_levels[STATUS_LEVEL_HELP] > 0) {
+        status_levels[STATUS_LEVEL_HELP]--;
+    }
+    gtk_statusbar_pop(GTK_STATUSBAR(info_bar), help_ctx);
+}
+
+/*
+ * Push a message referring to the current filter onto the statusbar.
+ */
+void
+statusbar_push_filter_msg(const gchar *msg)
+{
+    int i;
+
+    for (i = STATUS_LEVEL_FILTER + 1; i < NUM_STATUS_LEVELS; i++) {
+        if (status_levels[i])
+            return;
+    }
+    status_levels[STATUS_LEVEL_FILTER]++;
+
+    gtk_statusbar_push(GTK_STATUSBAR(info_bar), filter_ctx, msg);
+}
+
+/*
+ * Pop a message referring to the current filter off the statusbar.
+ */
+void
+statusbar_pop_filter_msg(void)
+{
+    if (status_levels[STATUS_LEVEL_FILTER] > 0) {
+        status_levels[STATUS_LEVEL_FILTER]--;
+    }
+    gtk_statusbar_pop(GTK_STATUSBAR(info_bar), filter_ctx);
+}
+
+
+GtkWidget *
+statusbar_new(void)
+{
+    GtkWidget *status_hbox;
+
+    /* info (main) statusbar */
+    info_bar = info_bar_new();
+    gtk_widget_show(info_bar);
+
+    /* packets statusbar */
+    packets_bar = packets_bar_new();
+    gtk_widget_show(packets_bar);
+
+    /* profile statusbar */
+    profile_bar = profile_bar_new();
+    gtk_widget_show(profile_bar);
+
+    /* expert info indicator */
+    status_expert_new();
+
+    /* Filter/status hbox */
+    status_hbox = gtk_hbox_new(FALSE, 1);
+    gtk_container_border_width(GTK_CONTAINER(status_hbox), 0);
+    gtk_widget_show(status_hbox);
+
+    /* Pane for the statusbar */
+    status_pane_left = gtk_hpaned_new();
+    gtk_widget_show(status_pane_left);
+    status_pane_right = gtk_hpaned_new();
+    gtk_widget_show(status_pane_right);
+
+    return status_hbox;
+}
+
+void
+statusbar_load_window_geometry(void)
+{
+    if (recent.has_gui_geometry_status_pane && recent.gui_geometry_status_pane_left)
+        gtk_paned_set_position(GTK_PANED(status_pane_left), recent.gui_geometry_status_pane_left);
+    if (recent.has_gui_geometry_status_pane && recent.gui_geometry_status_pane_right)
+        gtk_paned_set_position(GTK_PANED(status_pane_right), recent.gui_geometry_status_pane_right);
+}
+
+void
+statusbar_save_window_geometry(void)
+{
+    recent.gui_geometry_status_pane_left    = gtk_paned_get_position(GTK_PANED(status_pane_left));
+    recent.gui_geometry_status_pane_right   = gtk_paned_get_position(GTK_PANED(status_pane_right));
+}
+
+
+/*
+ * Helper for statusbar_widgets_emptying()
+ */
+static void
+foreach_remove_a_child(GtkWidget *widget, gpointer data) {
+    gtk_container_remove(GTK_CONTAINER(data), widget);
+}
+
+void
+statusbar_widgets_emptying(GtkWidget *statusbar)
+{
+    gtk_widget_ref(info_bar);
+    gtk_widget_ref(packets_bar);
+    gtk_widget_ref(profile_bar);
+    gtk_widget_ref(status_pane_left);
+    gtk_widget_ref(status_pane_right);
+    gtk_widget_ref(expert_info_error);
+    gtk_widget_ref(expert_info_warn);
+    gtk_widget_ref(expert_info_note);
+    gtk_widget_ref(expert_info_chat);
+    gtk_widget_ref(expert_info_none);
+
+    /* empty all containers participating */
+    gtk_container_foreach(GTK_CONTAINER(statusbar),     foreach_remove_a_child, statusbar);
+    gtk_container_foreach(GTK_CONTAINER(status_pane_left),   foreach_remove_a_child, status_pane_left);
+    gtk_container_foreach(GTK_CONTAINER(status_pane_right),   foreach_remove_a_child, status_pane_right);
+}
+
+void
+statusbar_widgets_pack(GtkWidget *statusbar)
+{
+    gtk_box_pack_start(GTK_BOX(statusbar), expert_info_error, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(statusbar), expert_info_warn, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(statusbar), expert_info_note, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(statusbar), expert_info_chat, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(statusbar), expert_info_none, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(statusbar), status_pane_left, TRUE, TRUE, 0);
+    gtk_paned_pack1(GTK_PANED(status_pane_left), info_bar, FALSE, FALSE);
+    gtk_paned_pack2(GTK_PANED(status_pane_left), status_pane_right, TRUE, FALSE);
+    gtk_paned_pack1(GTK_PANED(status_pane_right), packets_bar, TRUE, FALSE);
+    gtk_paned_pack2(GTK_PANED(status_pane_right), profile_bar, FALSE, FALSE);
+}
+
+void
+statusbar_widgets_show_or_hide(GtkWidget *statusbar)
+{
+    /*
+     * Show the status hbox if either:
+     *
+     *    1) we're showing the filter toolbar and we want it in the status
+     *       line
+     *
+     * or
+     *
+     *    2) we're showing the status bar.
+     */
+    if ((recent.filter_toolbar_show && prefs.filter_toolbar_show_in_statusbar) ||
+         recent.statusbar_show) {
+        gtk_widget_show(statusbar);
+    } else {
+        gtk_widget_hide(statusbar);
+    }
+
+    if (recent.statusbar_show) {
+        gtk_widget_show(status_pane_left);
+    } else {
+        gtk_widget_hide(status_pane_left);
+    }
+}
+
+
+static GtkWidget *
+info_bar_new(void)
+{
+    int i;
+
+    /* tip: tooltips don't work on statusbars! */
+    info_bar = gtk_statusbar_new();
+    main_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "main");
+    file_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "file");
+    help_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "help");
+    filter_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "filter");
+    gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(info_bar), FALSE);
+    gtk_statusbar_push(GTK_STATUSBAR(info_bar), main_ctx, DEF_READY_MESSAGE);
+
+    for (i = 0; i < NUM_STATUS_LEVELS; i++) {
+        status_levels[i] = 0;
+    }
+
+    return info_bar;
+}
+
+static GtkWidget *
+packets_bar_new(void)
+{
+    /* tip: tooltips don't work on statusbars! */
+    packets_bar = gtk_statusbar_new();
+    packets_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(packets_bar), "packets");
+    packets_bar_update();
+    gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(packets_bar), FALSE);
+
+    return packets_bar;
+}
+
+static GtkWidget *
+profile_bar_new(void)
+{
+    /* tip: tooltips don't work on statusbars! */
+    profile_bar = gtk_statusbar_new();
+    profile_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(profile_bar), "profile");
+    profile_bar_update();
+
+    return profile_bar;
+}
+
+
+/*
+ * update the packets statusbar to the current values
+ */
+void 
+packets_bar_update(void)
+{
+
+    if(packets_bar) {
+        /* remove old status */
+        if(packets_str) {
+            g_free(packets_str);
+            gtk_statusbar_pop(GTK_STATUSBAR(packets_bar), packets_ctx);
+        }
+
+        /* do we have any packets? */
+        if(cfile.count) {
+            if(cfile.drops_known) {
+                packets_str = g_strdup_printf(" Packets: %u Displayed: %u Marked: %u Dropped: %u",
+                    cfile.count, cfile.displayed_count, cfile.marked_count, cfile.drops);
+            } else {
+                packets_str = g_strdup_printf(" Packets: %u Displayed: %u Marked: %u",
+                    cfile.count, cfile.displayed_count, cfile.marked_count);
+            }
+        } else {
+            packets_str = g_strdup(" No Packets");
+        }
+        gtk_statusbar_push(GTK_STATUSBAR(packets_bar), packets_ctx, packets_str);
+    }
+}
+
+/*
+ * update the packets statusbar to the current values
+ */
+void
+profile_bar_update(void)
+{
+    if (profile_bar) {
+        /* remove old status */
+        if(profile_str) {
+            g_free(profile_str);
+            gtk_statusbar_pop(GTK_STATUSBAR(profile_bar), profile_ctx);
+        }
+
+       profile_str = g_strdup_printf (" Profile: %s", get_profile_name ());
+
+        gtk_statusbar_push(GTK_STATUSBAR(profile_bar), profile_ctx, profile_str);
+    }
+}
+
+
+static void
+status_expert_new(void)
+{
+    GtkWidget *expert_image;
+    GtkTooltips   *tooltips;
+
+    tooltips = gtk_tooltips_new();
+
+    expert_image = xpm_to_widget_from_parent(top_level, expert_error_xpm);
+    gtk_tooltips_set_tip(tooltips, expert_image, "ERROR is the highest expert info level", NULL);
+    gtk_widget_show(expert_image);
+    expert_info_error = gtk_event_box_new();
+    gtk_container_add(GTK_CONTAINER(expert_info_error), expert_image);
+    g_signal_connect(expert_info_error, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
+
+    expert_image = xpm_to_widget_from_parent(top_level, expert_warn_xpm);
+    gtk_tooltips_set_tip(tooltips, expert_image, "WARNING is the highest expert info level", NULL);
+    gtk_widget_show(expert_image);
+    expert_info_warn = gtk_event_box_new();
+    gtk_container_add(GTK_CONTAINER(expert_info_warn), expert_image);
+    g_signal_connect(expert_info_warn, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
+
+    expert_image = xpm_to_widget_from_parent(top_level, expert_note_xpm);
+    gtk_tooltips_set_tip(tooltips, expert_image, "NOTE is the highest expert info level", NULL);
+    gtk_widget_show(expert_image);
+    expert_info_note = gtk_event_box_new();
+    gtk_container_add(GTK_CONTAINER(expert_info_note), expert_image);
+    g_signal_connect(expert_info_note, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
+
+    expert_image = xpm_to_widget_from_parent(top_level, expert_chat_xpm);
+    gtk_tooltips_set_tip(tooltips, expert_image, "CHAT is the highest expert info level", NULL);
+    gtk_widget_show(expert_image);
+    expert_info_chat = gtk_event_box_new();
+    gtk_container_add(GTK_CONTAINER(expert_info_chat), expert_image);
+    g_signal_connect(expert_info_chat, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
+
+    expert_image = xpm_to_widget_from_parent(top_level, expert_none_xpm);
+    gtk_tooltips_set_tip(tooltips, expert_image, "No expert info", NULL);
+    gtk_widget_show(expert_image);
+    expert_info_none = gtk_event_box_new();
+    gtk_container_add(GTK_CONTAINER(expert_info_none), expert_image);
+    g_signal_connect(expert_info_none, "button_press_event", G_CALLBACK(expert_comp_dlg_cb), NULL);
+    gtk_widget_show(expert_info_none);
+}
+
+static void
+status_expert_hide(void)
+{
+    /* reset expert info indicator */
+    gtk_widget_hide(expert_info_error);
+    gtk_widget_hide(expert_info_warn);
+    gtk_widget_hide(expert_info_note);
+    gtk_widget_hide(expert_info_chat);
+    gtk_widget_hide(expert_info_none);
+}
+
+static void
+status_expert_update(void)
+{
+    status_expert_hide();
+
+    switch(expert_get_highest_severity()) {
+        case(PI_ERROR):
+        gtk_widget_show(expert_info_error);
+        break;
+        case(PI_WARN):
+        gtk_widget_show(expert_info_warn);
+        break;
+        case(PI_NOTE):
+        gtk_widget_show(expert_info_note);
+        break;
+        case(PI_CHAT):
+        gtk_widget_show(expert_info_chat);
+        break;
+        default:
+        gtk_widget_show(expert_info_none);
+        break;
+    }
+}
+
+static void
+statusbar_set_filename(const char *file_name, gint64 file_length, nstime_t *file_elapsed_time)
+{
+  gchar       *size_str;
+  gchar       *status_msg;
+
+  /* expert info indicator */
+  status_expert_update();
+
+  /* statusbar */
+  /* convert file size */
+  if (file_length/1024/1024 > 10) {
+    size_str = g_strdup_printf("%" G_GINT64_MODIFIER "d MB", file_length/1024/1024);
+  } else if (file_length/1024 > 10) {
+    size_str = g_strdup_printf("%" G_GINT64_MODIFIER "d KB", file_length/1024);
+  } else {
+    size_str = g_strdup_printf("%" G_GINT64_MODIFIER "d Bytes", file_length);
+  }
+
+  status_msg = g_strdup_printf(" File: \"%s\" %s %02lu:%02lu:%02lu",
+    (file_name) ? file_name : "", size_str,
+    (long)file_elapsed_time->secs/3600,
+    (long)file_elapsed_time->secs%3600/60,
+    (long)file_elapsed_time->secs%60);
+  g_free(size_str);
+  statusbar_push_file_msg(status_msg);
+  g_free(status_msg);
+}
+
+
+static void
+statusbar_cf_file_closing_cb(capture_file *cf)
+{
+    /* Clear any file-related status bar messages.
+       XXX - should be "clear *ALL* file-related status bar messages;
+       will there ever be more than one on the stack? */
+    statusbar_pop_file_msg();
+
+    /* reset expert info indicator */
+    status_expert_hide();
+    gtk_widget_show(expert_info_none);
+}
+
+
+static void
+statusbar_cf_file_closed_cb(capture_file *cf _U_)
+{
+  /* go back to "No packets" */
+  packets_bar_update();
+}
+
+
+static void
+statusbar_cf_file_read_start_cb(capture_file *cf)
+{
+  const gchar *name_ptr;
+  gchar       *load_msg;
+
+  /* Ensure we pop any previous loaded filename */
+  statusbar_pop_file_msg();
+
+  name_ptr = get_basename(cf->filename);
+
+  load_msg = g_strdup_printf(" Loading: %s", name_ptr);
+  statusbar_push_file_msg(load_msg);
+  g_free(load_msg);
+}
+
+
+static void
+statusbar_cf_file_read_finished_cb(capture_file *cf)
+{
+    statusbar_pop_file_msg();
+    statusbar_set_filename(cf->filename, cf->f_datalen, &(cf->elapsed_time));
+}
+
+
+#ifdef HAVE_LIBPCAP
+static void
+statusbar_cf_live_capture_prepared_cb(capture_options *capture_opts)
+{
+    statusbar_push_file_msg(" Waiting for capture input data ...");
+}
+
+static void
+statusbar_cf_live_capture_update_started_cb(capture_options *capture_opts)
+{
+    gchar *capture_msg;
+
+
+    statusbar_pop_file_msg();
+
+    if(capture_opts->iface) {
+        capture_msg = g_strdup_printf(" %s: <live capture in progress> to file: %s",
+                                     get_iface_description(capture_opts),
+                                     (capture_opts->save_file) ? capture_opts->save_file : "");
+    } else {
+        capture_msg = g_strdup_printf(" <live capture in progress> to file: %s",
+            (capture_opts->save_file) ? capture_opts->save_file : "");
+    }
+
+    statusbar_push_file_msg(capture_msg);
+
+    g_free(capture_msg);
+}
+
+static void
+statusbar_cf_live_capture_update_continue_cb(capture_file *cf)
+{
+    gchar *capture_msg;
+
+
+    status_expert_update();
+
+    statusbar_pop_file_msg();
+
+    if (cf->f_datalen/1024/1024 > 10) {
+        capture_msg = g_strdup_printf(" %s: <live capture in progress> File: %s %" G_GINT64_MODIFIER "d MB",
+                                     get_iface_description(capture_opts),
+                                     capture_opts->save_file,
+                                     cf->f_datalen/1024/1024);
+    } else if (cf->f_datalen/1024 > 10) {
+        capture_msg = g_strdup_printf(" %s: <live capture in progress> File: %s %" G_GINT64_MODIFIER "d KB",
+                                     get_iface_description(capture_opts),
+                                     capture_opts->save_file,
+                                     cf->f_datalen/1024);
+    } else {
+        capture_msg = g_strdup_printf(" %s: <live capture in progress> File: %s %" G_GINT64_MODIFIER "d Bytes",
+                                     get_iface_description(capture_opts),
+                                     capture_opts->save_file,
+                                     cf->f_datalen);
+    }
+
+    statusbar_push_file_msg(capture_msg);
+}
+
+static void
+statusbar_cf_live_capture_update_finished_cb(capture_file *cf)
+{
+    /* Pop the "<live capture in progress>" message off the status bar. */
+    statusbar_pop_file_msg();
+    statusbar_set_filename(cf->filename, cf->f_datalen, &(cf->elapsed_time));
+}
+
+static void
+statusbar_cf_live_capture_fixed_started_cb(capture_options *capture_opts)
+{
+    gchar *capture_msg;
+
+
+    statusbar_pop_file_msg();
+
+    capture_msg = g_strdup_printf(" %s: <live capture in progress> to file: %s",
+                                 get_iface_description(capture_opts),
+                                 (capture_opts->save_file) ? capture_opts->save_file : "");
+
+    statusbar_push_file_msg(capture_msg);
+    gtk_statusbar_push(GTK_STATUSBAR(packets_bar), packets_ctx, " Packets: 0");
+
+    g_free(capture_msg);
+}
+
+static void
+statusbar_cf_live_capture_fixed_continue_cb(capture_file *cf)
+{
+    gchar *capture_msg;
+
+
+    gtk_statusbar_pop(GTK_STATUSBAR(packets_bar), packets_ctx);
+    capture_msg = g_strdup_printf(" Packets: %u", cf_get_packet_count(cf));
+    gtk_statusbar_push(GTK_STATUSBAR(packets_bar), packets_ctx, capture_msg);
+    g_free(capture_msg);
+}
+
+
+static void
+statusbar_cf_live_capture_fixed_finished_cb(capture_file *cf _U_)
+{
+    /* Pop the "<live capture in progress>" message off the status bar. */
+    statusbar_pop_file_msg();
+
+    /* Pop the "<capturing>" message off the status bar */
+    gtk_statusbar_pop(GTK_STATUSBAR(packets_bar), packets_ctx);
+}
+
+#endif /* HAVE_LIBPCAP */
+
+
+static void
+statusbar_cf_field_unselected_cb(capture_file *cf)
+{
+    statusbar_pop_field_msg();
+}
+
+static void
+statusbar_cf_file_safe_started_cb(gchar * filename)
+{
+    gchar        *save_msg;
+
+    save_msg = g_strdup_printf(" Saving: %s...", get_basename(filename));
+    statusbar_push_file_msg(save_msg);
+    g_free(save_msg);
+}
+
+static void
+statusbar_cf_file_safe_finished_cb(gpointer data _U_)
+{
+    /* Pop the "Saving:" message off the status bar. */
+    statusbar_pop_file_msg();
+}
+
+static void
+statusbar_cf_file_safe_failed_cb(gpointer data _U_)
+{
+    /* Pop the "Saving:" message off the status bar. */
+    statusbar_pop_file_msg();
+}
+
+
+
+void
+statusbar_cf_callback(gint event, gpointer data, gpointer user_data _U_)
+{
+    switch(event) {
+    case(cf_cb_file_closing):
+        statusbar_cf_file_closing_cb(data);
+        break;
+    case(cf_cb_file_closed):
+        statusbar_cf_file_closed_cb(data);
+        break;
+    case(cf_cb_file_read_start):
+        statusbar_cf_file_read_start_cb(data);
+        break;
+    case(cf_cb_file_read_finished):
+        statusbar_cf_file_read_finished_cb(data);
+        break;
+#ifdef HAVE_LIBPCAP
+    case(cf_cb_live_capture_prepared):
+        statusbar_cf_live_capture_prepared_cb(data);
+        break;
+    case(cf_cb_live_capture_update_started):
+        statusbar_cf_live_capture_update_started_cb(data);
+        break;
+    case(cf_cb_live_capture_update_continue):
+        statusbar_cf_live_capture_update_continue_cb(data);
+        break;
+    case(cf_cb_live_capture_update_finished):
+        statusbar_cf_live_capture_update_finished_cb(data);
+        break;
+    case(cf_cb_live_capture_fixed_started):
+        statusbar_cf_live_capture_fixed_started_cb(data);
+        break;
+    case(cf_cb_live_capture_fixed_continue):
+        statusbar_cf_live_capture_fixed_continue_cb(data);
+        break;
+    case(cf_cb_live_capture_fixed_finished):
+        statusbar_cf_live_capture_fixed_finished_cb(data);
+        break;
+    case(cf_cb_live_capture_stopping):
+        /* Beware: this state won't be called, if the capture child
+         * closes the capturing on it's own! */
+        break;
+#endif
+    case(cf_cb_packet_selected):
+        break;
+    case(cf_cb_packet_unselected):
+        break;
+    case(cf_cb_field_unselected):
+        statusbar_cf_field_unselected_cb(data);
+        break;
+    case(cf_cb_file_safe_started):
+        statusbar_cf_file_safe_started_cb(data);
+        break;
+    case(cf_cb_file_safe_finished):
+        statusbar_cf_file_safe_finished_cb(data);
+        break;
+    case(cf_cb_file_safe_reload_finished):
+        break;
+    case(cf_cb_file_safe_failed):
+        statusbar_cf_file_safe_failed_cb(data);
+        break;
+    default:
+        g_warning("statusbar_cf_callback: event %u unknown", event);
+        g_assert_not_reached();
+    }
+}
+
diff --git a/gtk/main_statusbar.h b/gtk/main_statusbar.h
new file mode 100644 (file)
index 0000000..6b6311e
--- /dev/null
@@ -0,0 +1,63 @@
+/* main_statusbar.h
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.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 __MAIN_STATUSBAR_H__
+#define __MAIN_STATUSBAR_H__
+
+
+void profile_bar_update(void);
+void packets_bar_update(void);
+
+/** Push a message referring to the currently-selected field onto the statusbar.
+ *
+ * @param msg The message
+ */
+void statusbar_push_field_msg(const gchar *msg);
+
+/** Pop a message referring to the currently-selected field off the statusbar.
+ */
+void statusbar_pop_field_msg(void);
+
+/** Push a message referring to the current filter onto the statusbar.
+ *
+ * @param msg The message
+ */
+void statusbar_push_filter_msg(const gchar *msg);
+
+/** Pop a message referring to the current filter off the statusbar.
+ */
+void statusbar_pop_filter_msg(void);
+
+
+
+/*** PRIVATE INTERFACE BETWEEN main.c AND main_statusbar.c DON'T USE OR TOUCH :-)*/
+
+GtkWidget *statusbar_new(void);
+void statusbar_load_window_geometry(void);
+void statusbar_save_window_geometry(void);
+void statusbar_widgets_emptying(GtkWidget *statusbar);
+void statusbar_widgets_pack(GtkWidget *statusbar);
+void statusbar_widgets_show_or_hide(GtkWidget *statusbar);
+void statusbar_cf_callback(gint event, gpointer data, gpointer user_data);
+
+#endif /* __MAIN_STATUSBAR_H__ */
index ae74b0248941f9c8fc3e2c802d44952cc99fb3cf..bfd87ac8dd16928dc502199e44f5eff08f1a2208 100644 (file)
@@ -2413,7 +2413,6 @@ set_menus_for_capture_file(capture_file *cf)
     set_toolbar_for_unsaved_capture_file(!cf->user_saved);
     set_toolbar_for_capture_file(TRUE);
   }
-  packets_bar_update();
 }
 
 /* Enable or disable menu items based on whether there's a capture in
@@ -2551,7 +2550,6 @@ set_menus_for_captured_packets(gboolean have_captured_packets)
   walk_menu_tree_for_captured_packets(tap_menu_tree_root,
       have_captured_packets);
   set_toolbar_for_captured_packets(have_captured_packets);
-  packets_bar_update();
 }
 
 /* Enable or disable menu items based on whether a packet is selected and,
@@ -2737,7 +2735,6 @@ set_menus_for_selected_packet(capture_file *cf)
 
   walk_menu_tree_for_selected_packet(tap_menu_tree_root, cf->current_frame,
       cf->edt);
-  packets_bar_update();
 }
 
 /* Enable or disable menu items based on whether a tree row is selected
index 1198ad71d2e8d79c04abaa938aec13471a6055b9..bbb7a25dbda2b31534ead0599eddd1832af81bb8 100644 (file)
@@ -37,6 +37,7 @@
 #include "../ui_util.h"
 #include "gui_utils.h"
 #include "main.h"
+#include "main_statusbar.h"
 #include "menu.h"
 #include "colors.h"
 #include <epan/column.h>
diff --git a/statusbar.h b/statusbar.h
deleted file mode 100644 (file)
index 303ddf3..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/* statusbar.h
- * Definitions for status bar UI routines
- *
- * $Id$
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.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 __STATUSBAR_H__
-#define __STATUSBAR_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/*
- * Push a message referring to file access onto the statusbar.
- */
-void statusbar_push_file_msg(const gchar *msg);
-
-/*
- * Pop a message referring to file access off the statusbar.
- */
-void statusbar_pop_file_msg(void);
-
-/*
- * Push a message referring to the currently-selected field onto the statusbar.
- */
-void statusbar_push_field_msg(const gchar *msg);
-
-/*
- * Pop a message referring to the currently-selected field off the statusbar.
- */
-void statusbar_pop_field_msg(void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __STATUSBAR_H__ */