#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"
#include "utils.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
#include "rgb_macros.h"
#include "gui_thread.h"
#include "ui_config.h"
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
ARDOUR_UI_UTILS::gdk_color_from_rgba (uint32_t rgba)
{
Gdk::Color c;
- set_color_from_rgb (c, rgba);
+ set_color_from_rgb (c, rgba >> 8);
return c;
}
return relay_key_press(&ev, &main_window);
}
-string
-ARDOUR_UI_UTILS::show_gdk_event_state (int state)
-{
- string s;
- if (state & GDK_SHIFT_MASK) {
- s += "+SHIFT";
- }
- if (state & GDK_LOCK_MASK) {
- s += "+LOCK";
- }
- if (state & GDK_CONTROL_MASK) {
- s += "+CONTROL";
- }
- if (state & GDK_MOD1_MASK) {
- s += "+MOD1";
- }
- if (state & GDK_MOD2_MASK) {
- s += "+MOD2";
- }
- if (state & GDK_MOD3_MASK) {
- s += "+MOD3";
- }
- if (state & GDK_MOD4_MASK) {
- s += "+MOD4";
- }
- if (state & GDK_MOD5_MASK) {
- s += "+MOD5";
- }
- if (state & GDK_BUTTON1_MASK) {
- s += "+BUTTON1";
- }
- if (state & GDK_BUTTON2_MASK) {
- s += "+BUTTON2";
- }
- if (state & GDK_BUTTON3_MASK) {
- s += "+BUTTON3";
- }
- if (state & GDK_BUTTON4_MASK) {
- s += "+BUTTON4";
- }
- if (state & GDK_BUTTON5_MASK) {
- s += "+BUTTON5";
- }
- if (state & GDK_SUPER_MASK) {
- s += "+SUPER";
- }
- if (state & GDK_HYPER_MASK) {
- s += "+HYPER";
- }
- if (state & GDK_META_MASK) {
- s += "+META";
- }
- if (state & GDK_RELEASE_MASK) {
- s += "+RELEASE";
- }
-
- return s;
-}
-
Glib::RefPtr<Gdk::Pixbuf>
ARDOUR_UI_UTILS::get_xpm (std::string name)
{
continue;
}
- themes.insert (make_pair (prop->value(), Glib::filename_to_utf8 (basename_nosuffix(*e))));
+ std::string color_name = basename_nosuffix(*e);
+ size_t sep = color_name.find_first_of("-");
+ if (sep != string::npos) {
+ color_name = color_name.substr (0, sep);
+ }
+ themes.insert (make_pair (prop->value(), color_name));
}
}
}
return false;
}
}
+
+bool
+ARDOUR_UI_UTILS::running_from_source_tree ()
+{
+ gchar const *x = g_getenv ("ARDOUR_THEMES_PATH");
+ return x && (string (x).find ("gtk2_ardour") != string::npos);
+}