X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_ui.cc;h=10de8e795d8953068b9cbfbc8e1863365e99544f;hb=61c199b97c3eb4bbd84d2d033594be682944a416;hp=a2a5f0a385e12981b0fa790adc959e85a44a5780;hpb=3020b224fa2d6e1b6b8a576e8e8e211e0585f2a2;p=ardour.git diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index a2a5f0a385..10de8e795d 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -52,6 +52,7 @@ #include "pbd/openuri.h" #include "pbd/file_utils.h" #include "pbd/localtime_r.h" +#include "pbd/system_exec.h" #include "gtkmm2ext/application.h" #include "gtkmm2ext/bindings.h" @@ -71,6 +72,7 @@ #include "ardour/filename_extensions.h" #include "ardour/filesystem_paths.h" #include "ardour/port.h" +#include "ardour/plugin_manager.h" #include "ardour/process_thread.h" #include "ardour/profile.h" #include "ardour/recent_sessions.h" @@ -80,6 +82,10 @@ #include "ardour/session_utils.h" #include "ardour/slave.h" +#ifdef WINDOWS_VST_SUPPORT +#include +#endif + #include "timecode/time.h" typedef uint64_t microseconds_t; @@ -127,7 +133,6 @@ typedef uint64_t microseconds_t; #include "video_server_dialog.h" #include "add_video_dialog.h" #include "transcode_video_dialog.h" -#include "system_exec.h" #include "i18n.h" @@ -166,6 +171,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) , _was_dirty (false) , _mixer_on_top (false) , first_time_engine_run (true) + , blink_timeout_tag (-1) /* transport */ @@ -299,6 +305,9 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) ARDOUR::FileSource::AmbiguousFileName.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::ambiguous_file, this, _1, _2)); + /* also plugin scan messages */ + ARDOUR::PluginScanMessage.connect (forever_connections, MISSING_INVALIDATOR, boost::bind(&ARDOUR_UI::plugin_scan_dialog, this, _1, _2), gui_context()); + /* lets get this party started */ setup_gtk_ardour_enums (); @@ -503,10 +512,13 @@ ARDOUR_UI::post_engine () vector::iterator n; vector::iterator k; - for (n = names.begin(), k = keys.begin(); n != names.end(); ++n, ++k) { - cout << "Action: " << (*n) << " bound to " << (*k) << endl; + vector::iterator p; + for (n = names.begin(), k = keys.begin(), p = paths.begin(); n != names.end(); ++n, ++k, ++p) { + cout << "Action: '" << (*n) << "' bound to '" << (*k) << "' Path: '" << (*p) << "'" << endl; } + halt_connection.disconnect (); + AudioEngine::instance()->stop (); exit (0); } @@ -759,7 +771,7 @@ ARDOUR_UI::starting () nsm->check (); Glib::usleep (i); - if (nsm->is_active()) + if (nsm->is_active()) { break; } } @@ -770,9 +782,8 @@ ARDOUR_UI::starting () // wait for open command from nsm server for ( i = 0; i < 5000; ++i) { nsm->check (); - Glib::usleep (1000); - if (nsm->client_id ()) + if (nsm->client_id ()) { break; } } @@ -1005,6 +1016,9 @@ If you still wish to quit, please use the\n\n\ halt_connection.disconnect (); AudioEngine::instance()->stop (); +#ifdef WINDOWS_VST_SUPPORT + fst_stop_threading(); +#endif quit (); } @@ -2913,7 +2927,13 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name, _session->set_clean (); } +#ifdef WINDOWS_VST_SUPPORT + fst_stop_threading(); +#endif flush_pending (); +#ifdef WINDOWS_VST_SUPPORT + fst_start_threading(); +#endif retval = 0; out: @@ -3273,7 +3293,7 @@ ARDOUR_UI::setup_order_hint () } else { for (TrackSelection::iterator s = editor->get_selection().tracks.begin(); s != editor->get_selection().tracks.end(); ++s) { RouteTimeAxisView* tav = dynamic_cast (*s); - if (tav->route()->order_key() > order_hint) { + if (tav && tav->route() && tav->route()->order_key() > order_hint) { order_hint = tav->route()->order_key(); } } @@ -3340,10 +3360,6 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) PBD::ScopedConnection idle_connection; - if (count > 8) { - ARDOUR::GUIIdle.connect (idle_connection, MISSING_INVALIDATOR, boost::bind (&Gtkmm2ext::UI::flush_pending, this), gui_context()); - } - string template_path = add_route_dialog->track_template(); if (!template_path.empty()) { @@ -3393,7 +3409,7 @@ void ARDOUR_UI::stop_video_server (bool ask_confirm) { if (!video_server_process && ask_confirm) { - warning << _("Video-Server was not launched by Ardour. The request to stop it is ignored.") << endmsg; + warning << string_compose (_("Video-Server was not launched by %1. The request to stop it is ignored."), PROGRAM_NAME) << endmsg; } if (video_server_process) { if(ask_confirm) { @@ -3778,6 +3794,41 @@ quickly enough to keep up with recording.\n"), PROGRAM_NAME)); } } +void +ARDOUR_UI::cancel_plugin_scan () +{ + PluginManager::instance().cancel_plugin_scan(); +} + +static MessageDialog *scan_dlg = NULL; + +void +ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin) +{ + if (!Config->get_show_plugin_scan_window()) { return; } + if (!scan_dlg) { + scan_dlg = new MessageDialog("", false, MESSAGE_INFO, BUTTONS_NONE); + VBox* vbox = scan_dlg->get_vbox(); + vbox->set_size_request(400,-1); + scan_dlg->set_title (_("Scanning for plugins")); + + Gtk::Button *cancel_button = manage(new Gtk::Button(_("Cancel plugin scan"))); + cancel_button->set_name ("EditorGTKButton"); + cancel_button->signal_clicked().connect ( mem_fun (*this, &ARDOUR_UI::cancel_plugin_scan) ); + + scan_dlg->get_vbox()->pack_start ( *cancel_button, PACK_SHRINK); + } + + if (type == X_("closeme")) { + scan_dlg->hide(); + } else { + scan_dlg->set_message(type + ": " + Glib::path_get_basename(plugin)); + scan_dlg->show_all(); + } + + gtk_main_iteration (); +} + void ARDOUR_UI::disk_underrun_handler () {