Delete temporary Window Proxy for dialogs
[ardour.git] / gtk2_ardour / utils.cc
index fce66bced1533f3a94927f8016c8c5f54d17d191..5ddd044b801bdfd0c1a02aae5782030efe48e551 100644 (file)
 #include <cmath>
 #include <list>
 #include <sys/stat.h>
-#include <gtkmm/rc.h>
-#include <gtkmm/window.h>
+
+#include <boost/algorithm/string.hpp>
+
+#include <gtk/gtkpaned.h>
 #include <gtkmm/combo.h>
 #include <gtkmm/label.h>
 #include <gtkmm/paned.h>
-#include <gtk/gtkpaned.h>
-#include <boost/algorithm/string.hpp>
+#include <gtkmm/rc.h>
+#include <gtkmm/stock.h>
+#include <gtkmm/window.h>
 
 #include "pbd/basename.h"
 #include "pbd/file_utils.h"
 #include "pbd/stacktrace.h"
 
-#include <gtkmm2ext/utils.h>
-
+#include "ardour/audioengine.h"
 #include "ardour/filesystem_paths.h"
 #include "ardour/search_paths.h"
 
+#include "gtkmm2ext/colors.h"
+#include "gtkmm2ext/utils.h"
+
 #include "canvas/item.h"
-#include "canvas/utils.h"
 
+#include "actions.h"
 #include "debug.h"
 #include "public_editor.h"
 #include "keyboard.h"
@@ -96,6 +101,39 @@ ARDOUR_UI_UTILS::just_hide_it (GdkEventAny */*ev*/, Gtk::Window *win)
        return 0;
 }
 
+static bool
+idle_notify_engine_stopped ()
+{
+       Glib::RefPtr<Action> act = ActionManager::get_action ("Window", "toggle-audio-midi-setup");
+       Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+       MessageDialog msg (
+                       _("The current operation is not possible because of an error communicating with the audio hardware."),
+                       false, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE, true);
+
+       msg.add_button (_("Cancel"), Gtk::RESPONSE_CANCEL);
+
+       if (tact && !tact->get_active()) {
+               msg.add_button (_("Configure Hardware"), Gtk::RESPONSE_OK);
+       }
+
+       if (msg.run () == Gtk::RESPONSE_OK) {
+               tact->set_active ();
+       }
+       return false; /* do not call again */
+}
+
+bool
+ARDOUR_UI_UTILS::engine_is_running ()
+{
+       if (ARDOUR::AudioEngine::instance()->running ()) {
+               return true;
+       }
+       Glib::signal_idle().connect (sigc::ptr_fun (&idle_notify_engine_stopped));
+       return false;
+}
+
+
 /* xpm2rgb copied from nixieclock, which bore the legend:
 
     nixieclock - a nixie desktop timepiece