diff --git a/gtk2_ardour/plugin_setup_dialog.cc b/gtk2_ardour/plugin_setup_dialog.cc index f296ab83be..3163b0bc00 100644 --- a/gtk2_ardour/plugin_setup_dialog.cc +++ b/gtk2_ardour/plugin_setup_dialog.cc @@ -135,13 +135,28 @@ PluginSetupDialog::setup_output_presets () } } - bool have_matching_io = false; + const uint32_t n_audio = _cur_outputs.n_audio (); + + bool have_matching_io = ppc.find (n_audio) != ppc.end (); + if (have_matching_io) { + _out_presets.AddMenuElem (MenuElem (preset_label (n_audio), sigc::bind (sigc::mem_fun (*this, &PluginSetupDialog::select_output_preset), n_audio))); + } + + if (ppc.size() > 6 && *ppc.rbegin () != n_audio) { + uint32_t all = *ppc.rbegin (); + _out_presets.AddMenuElem (MenuElem (string_compose (_("All (%1)"), preset_label (all)), sigc::bind (sigc::mem_fun (*this, &PluginSetupDialog::select_output_preset), all))); + ppc.erase (all); + } for (PluginOutputConfiguration::const_iterator i = ppc.begin () ; i != ppc.end (); ++i) { assert (*i > 0); + if (*i == n_audio) { + assert (have_matching_io); + continue; + } _out_presets.AddMenuElem (MenuElem (preset_label (*i), sigc::bind (sigc::mem_fun (*this, &PluginSetupDialog::select_output_preset), *i))); - if (*i == _cur_outputs.n_audio ()) { - have_matching_io = true; + if (_out_presets.items ().size () > 6) { + break; } }