X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fplugin_ui.cc;h=f9208369f13a791cae71ca45ba1721f209854bf1;hb=fb3d1a6f244525d02f16cb851b925e07a43b1648;hp=4423e3905dced33d360825f931aa25ab712c9e6b;hpb=cf806123ca5faaef483f898daba3f7bd38ec62eb;p=ardour.git diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index 4423e3905d..f9208369f1 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -73,6 +73,7 @@ using namespace std; using namespace ARDOUR; +using namespace ARDOUR_UI_UTILS; using namespace PBD; using namespace Gtkmm2ext; using namespace Gtk; @@ -159,7 +160,9 @@ PluginUIWindow::PluginUIWindow ( PluginUIWindow::~PluginUIWindow () { +#ifndef NDEBUG cerr << "PluginWindow deleted for " << this << endl; +#endif delete _pluginui; } @@ -225,7 +228,7 @@ PluginUIWindow::create_windows_vst_editor(boost::shared_ptr) << endmsg; throw failed_constructor (); } else { - WindowsVSTPluginUI* vpu = new WindowsVSTPluginUI (insert, vp); + WindowsVSTPluginUI* vpu = new WindowsVSTPluginUI (insert, vp, GTK_WIDGET(this->gobj())); _pluginui = vpu; _pluginui->KeyboardFocused.connect (sigc::mem_fun (*this, &PluginUIWindow::keyboard_focused)); @@ -330,6 +333,7 @@ PluginUIWindow::create_lv2_editor(boost::shared_ptr insert) _pluginui = lpu; add (*lpu); lpu->package (*this); + _pluginui->KeyboardFocused.connect (sigc::mem_fun (*this, &PluginUIWindow::keyboard_focused)); } return true; @@ -349,10 +353,11 @@ PluginUIWindow::on_key_press_event (GdkEventKey* event) { if (_keyboard_focused) { if (_pluginui) { + _pluginui->grab_focus(); if (_pluginui->non_gtk_gui()) { _pluginui->forward_key_event (event); } else { - return relay_key_press (event, this); + return relay_key_press (event, this); } } return true; @@ -362,6 +367,7 @@ PluginUIWindow::on_key_press_event (GdkEventKey* event) */ if (_pluginui) { + _pluginui->grab_focus(); if (_pluginui->non_gtk_gui()) { /* pass editor window as the window for the event to be handled in, not this one, because there are @@ -420,7 +426,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr pi) , eqgui (0) { _preset_modified.set_size_request (16, -1); - _preset_combo.signal_changed().connect(sigc::mem_fun(*this, &PlugUIBase::preset_selected)); + _preset_combo.set_text("(default)"); ARDOUR_UI::instance()->set_tip (_preset_combo, _("Presets (if any) for this plugin\n(Both factory and user-created)")); ARDOUR_UI::instance()->set_tip (add_button, _("Save a new preset")); ARDOUR_UI::instance()->set_tip (save_button, _("Save the current preset")); @@ -431,21 +437,21 @@ PlugUIBase::PlugUIBase (boost::shared_ptr pi) update_preset_list (); update_preset (); - add_button.set_name ("PluginAddButton"); - add_button.signal_clicked().connect (sigc::mem_fun (*this, &PlugUIBase::add_plugin_setting)); + add_button.set_name ("generic button"); + add_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::add_plugin_setting)); - save_button.set_name ("PluginSaveButton"); - save_button.signal_clicked().connect(sigc::mem_fun(*this, &PlugUIBase::save_plugin_setting)); + save_button.set_name ("generic button"); + save_button.signal_clicked.connect(sigc::mem_fun(*this, &PlugUIBase::save_plugin_setting)); - delete_button.set_name ("PluginDeleteButton"); - delete_button.signal_clicked().connect (sigc::mem_fun (*this, &PlugUIBase::delete_plugin_setting)); + delete_button.set_name ("generic button"); + delete_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::delete_plugin_setting)); insert->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&PlugUIBase::processor_active_changed, this, boost::weak_ptr(insert)), gui_context()); bypass_button.set_name ("plugin bypass button"); bypass_button.set_text (_("Bypass")); bypass_button.set_active (!pi->active()); - bypass_button.signal_button_release_event().connect (sigc::mem_fun(*this, &PlugUIBase::bypass_button_release)); + bypass_button.signal_button_release_event().connect (sigc::mem_fun(*this, &PlugUIBase::bypass_button_release), false); focus_button.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK); focus_button.signal_button_release_event().connect (sigc::mem_fun(*this, &PlugUIBase::focus_toggled)); @@ -503,7 +509,7 @@ PlugUIBase::set_latency_label () t = string_compose (_("latency (%1 ms)"), (float) l / ((float) sr / 1000.0f)); } - latency_label.set_text (t); + latency_button.set_text (t); } void @@ -539,20 +545,13 @@ PlugUIBase::processor_active_changed (boost::weak_ptr weak_p) } void -PlugUIBase::preset_selected () +PlugUIBase::preset_selected (Plugin::PresetRecord preset) { if (_no_load_preset) { return; } - - if (_preset_combo.get_active_text().length() > 0) { - const Plugin::PresetRecord* pr = plugin->preset_by_label (_preset_combo.get_active_text()); - if (pr) { - plugin->load_preset (*pr); - } else { - warning << string_compose(_("Plugin preset %1 not found"), - _preset_combo.get_active_text()) << endmsg; - } + if (!preset.label.empty()) { + plugin->load_preset (preset); } else { // blank selected = no preset plugin->clear_preset(); @@ -561,6 +560,19 @@ PlugUIBase::preset_selected () #ifdef NO_PLUGIN_STATE static bool seen_saving_message = false; + +static void show_no_plugin_message() +{ + info << string_compose (_("Plugin presets are not supported in this build of %1. Consider paying for a full version"), + PROGRAM_NAME) + << endmsg; + info << _("To get full access to updates without this limitation\n" + "consider becoming a subscriber for a low cost every month.") + << endmsg; + info << X_("https://community.ardour.org/s/subscribe") + << endmsg; + ARDOUR_UI::instance()->popup_error(_("Plugin presets are not supported in this build, see the Log window for more information.")); +} #endif void @@ -587,10 +599,8 @@ PlugUIBase::add_plugin_setting () } #else if (!seen_saving_message) { - info << string_compose (_("Plugin presets are not supported in this build of %1. Consider paying for a full version"), - PROGRAM_NAME) - << endmsg; seen_saving_message = true; + show_no_plugin_message(); } #endif } @@ -599,7 +609,7 @@ void PlugUIBase::save_plugin_setting () { #ifndef NO_PLUGIN_STATE - string const name = _preset_combo.get_active_text (); + string const name = _preset_combo.get_text (); plugin->remove_preset (name); Plugin::PresetRecord const r = plugin->save_preset (name); if (!r.uri.empty ()) { @@ -607,10 +617,8 @@ PlugUIBase::save_plugin_setting () } #else if (!seen_saving_message) { - info << string_compose (_("Plugin presets are not supported in this build of %1. Consider paying for a newer version"), - PROGRAM_NAME) - << endmsg; seen_saving_message = true; + show_no_plugin_message(); } #endif } @@ -619,13 +627,11 @@ void PlugUIBase::delete_plugin_setting () { #ifndef NO_PLUGIN_STATE - plugin->remove_preset (_preset_combo.get_active_text ()); + plugin->remove_preset (_preset_combo.get_text ()); #else if (!seen_saving_message) { - info << string_compose (_("Plugin presets are not supported in this build of %1. Consider paying for a newer version"), - PROGRAM_NAME) - << endmsg; seen_saving_message = true; + show_no_plugin_message(); } #endif } @@ -730,18 +736,23 @@ PlugUIBase::toggle_plugin_analysis() void PlugUIBase::update_preset_list () { - vector preset_labels; + using namespace Menu_Helpers; + vector presets = plugin->get_presets(); ++_no_load_preset; + // Add a menu entry for each preset + _preset_combo.clear_items(); for (vector::const_iterator i = presets.begin(); i != presets.end(); ++i) { - preset_labels.push_back (i->label); + _preset_combo.AddMenuElem( + MenuElem(i->label, sigc::bind(sigc::mem_fun(*this, &PlugUIBase::preset_selected), *i))); } - preset_labels.push_back(""); - - set_popdown_strings (_preset_combo, preset_labels); + // Add an empty entry for un-setting current preset (see preset_selected) + Plugin::PresetRecord no_preset; + _preset_combo.AddMenuElem( + MenuElem("", sigc::bind(sigc::mem_fun(*this, &PlugUIBase::preset_selected), no_preset))); --_no_load_preset; } @@ -752,7 +763,11 @@ PlugUIBase::update_preset () Plugin::PresetRecord p = plugin->last_preset(); ++_no_load_preset; - _preset_combo.set_active_text (p.label); + if (p.uri.empty()) { + _preset_combo.set_text (_("(none)")); + } else { + _preset_combo.set_text (p.label); + } --_no_load_preset; save_button.set_sensitive (!p.uri.empty() && p.user);