diff options
author | Robin Gareus <robin@gareus.org> | 2014-03-09 16:33:58 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-03-09 20:32:52 +0100 |
commit | da73b0f670625e142f7784a60fa31e1eeb0666b3 (patch) | |
tree | 0ee9589749f86abcfa28ee45ba48080e7ab7e99f | |
parent | 52c8b6d66a34952c4b0cd02eba722cd1b26bef17 (diff) |
prepare configurable VST scan timeout
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 55 | ||||
-rw-r--r-- | libs/ardour/ardour/rc_configuration_vars.h | 1 | ||||
-rw-r--r-- | libs/ardour/vst_info_file.cc | 3 |
3 files changed, 55 insertions, 4 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 61360b3478..d33cdf5804 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -307,6 +307,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) /* also plugin scan messages */ ARDOUR::PluginScanMessage.connect (forever_connections, MISSING_INVALIDATOR, boost::bind(&ARDOUR_UI::plugin_scan_dialog, this, _1, _2, _3), gui_context()); + ARDOUR::PluginScanTimeout.connect (forever_connections, MISSING_INVALIDATOR, boost::bind(&ARDOUR_UI::plugin_scan_timeout, this, _1), gui_context()); ARDOUR::GUIIdle.connect (forever_connections, MISSING_INVALIDATOR, boost::bind(&ARDOUR_UI::gui_idle_handler, this), gui_context()); @@ -3789,13 +3790,39 @@ quickly enough to keep up with recording.\n"), PROGRAM_NAME)); } } + +/* TODO: this is getting elaborate enough to warrant being split into a dedicated class */ +static MessageDialog *scan_dlg = NULL; +static ProgressBar *scan_pbar = NULL; +static HBox *scan_tbox = NULL; + void ARDOUR_UI::cancel_plugin_scan () { PluginManager::instance().cancel_plugin_scan(); } -static MessageDialog *scan_dlg = NULL; +void +ARDOUR_UI::cancel_plugin_timeout () +{ + PluginManager::instance().cancel_plugin_timeout(); + scan_tbox->hide(); +} + +void +ARDOUR_UI::plugin_scan_timeout (int timeout) +{ + if (!scan_dlg || !scan_dlg->is_mapped() || !scan_pbar) { + return; + } + if (timeout > 0) { + scan_pbar->set_fraction ((float) timeout / (float) Config->get_vst_scan_timeout()); + scan_tbox->show(); + } else { + scan_tbox->hide(); + } + gui_idle_handler(); +} void ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_cancel) @@ -3817,8 +3844,9 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca } static Gtk::Button *cancel_button; + static Gtk::Button *timeout_button; if (!scan_dlg) { - scan_dlg = new MessageDialog("", false, MESSAGE_INFO, BUTTONS_NONE); + scan_dlg = new MessageDialog("", false, MESSAGE_INFO, BUTTONS_NONE); // TODO manage VBox* vbox = scan_dlg->get_vbox(); vbox->set_size_request(400,-1); scan_dlg->set_title (_("Scanning for plugins")); @@ -3826,15 +3854,36 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca 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) ); + cancel_button->show(); scan_dlg->get_vbox()->pack_start ( *cancel_button, PACK_SHRINK); + + scan_tbox = manage( new HBox() ); + + timeout_button = manage(new Gtk::Button(_("Stop Timeout"))); + timeout_button->set_name ("EditorGTKButton"); + timeout_button->signal_clicked().connect ( mem_fun (*this, &ARDOUR_UI::cancel_plugin_timeout) ); + timeout_button->show(); + + scan_pbar = manage(new ProgressBar()); + //scan_pbar->set_size_request(300,-1); + scan_pbar->set_text(_("Scan Timeout")); + scan_pbar->show(); + + scan_tbox->pack_start (*scan_pbar, PACK_EXPAND_WIDGET, 4); + scan_tbox->pack_start (*timeout_button, PACK_SHRINK, 4); + + scan_dlg->get_vbox()->pack_start (*scan_tbox, PACK_SHRINK, 4); } if (type == X_("closeme")) { scan_dlg->hide(); } else { scan_dlg->set_message(type + ": " + Glib::path_get_basename(plugin)); - scan_dlg->show_all(); + scan_dlg->show(); + } + if (!can_cancel || !cancelled) { + scan_tbox->hide(); } cancel_button->set_sensitive(can_cancel && !cancelled); diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h index 724c214938..defe75de4d 100644 --- a/libs/ardour/ardour/rc_configuration_vars.h +++ b/libs/ardour/ardour/rc_configuration_vars.h @@ -206,6 +206,7 @@ CONFIG_VARIABLE (bool, use_windows_vst, "use-windows-vst", true) CONFIG_VARIABLE (bool, use_lxvst, "use-lxvst", true) CONFIG_VARIABLE (bool, show_plugin_scan_window, "show-plugin-scan-window", false) CONFIG_VARIABLE (bool, discover_vst_on_start, "discover-vst-on-start", false) +CONFIG_VARIABLE (int, vst_scan_timeout, "vst-scan-timeout", 600) /* deciseconds, per plugin, <= 0 no timeout */ /* custom user plugin paths */ CONFIG_VARIABLE (std::string, plugin_path_vst, "plugin-path-vst", "@default@") diff --git a/libs/ardour/vst_info_file.cc b/libs/ardour/vst_info_file.cc index 90076815b3..1db9afbbc4 100644 --- a/libs/ardour/vst_info_file.cc +++ b/libs/ardour/vst_info_file.cc @@ -45,6 +45,7 @@ #ifndef VST_SCANNER_APP #include "pbd/system_exec.h" #include "ardour/plugin_manager.h" // scanner_bin_path +#include "ardour/rc_configuration.h" #endif #include "ardour/filesystem_paths.h" @@ -53,7 +54,7 @@ #include "ardour/vst_info_file.h" #define MAX_STRING_LEN 256 -#define PLUGIN_SCAN_TIMEOUT (600) // in deciseconds +#define PLUGIN_SCAN_TIMEOUT (Config->get_vst_scan_timeout()) // in deciseconds /* CACHE FILE PATHS */ |