boost::bind (&MidiTimeAxisView::drop_instrument_ref, this),
gui_context());
pi->plugin()->UpdateMidnam.connect (midnam_connection, invalidator (*this),
- boost::bind (&Plugin::read_midnam, pi->plugin ()),
+ boost::bind (&MidiTimeAxisView::reread_midnam, this),
gui_context());
pluginprovided = true;
}
}
+void
+MidiTimeAxisView::reread_midnam ()
+{
+ boost::shared_ptr<Processor> the_instrument (_route->the_instrument());
+ boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert>(the_instrument);
+ pi->plugin ()->read_midnam();
+
+ if (_patch_change_dialog) {
+ _patch_change_dialog->refresh ();
+ }
+}
void
MidiTimeAxisView::model_changed(const std::string& model)
{
delete controller_menu;
controller_menu = 0;
build_automation_action_menu(false);
+
+ if (_patch_change_dialog) {
+ _patch_change_dialog->refresh ();
+ }
}
void
return;
}
- PatchChangeGridDialog* d = new PatchChangeGridDialog (string_compose (_("Select Patch for '%1'"), _route->name ()), _route);
+ PatchChangeGridDialog* d = new PatchChangeGridDialog (_route);
_patch_change_dialog = d;
d->present ();
}
void setup_midnam_patches ();
void update_patch_selector ();
void drop_instrument_ref ();
+ void reread_midnam ();
PBD::ScopedConnectionList midnam_connection;
void start_scroomer_update ();
#include <bitset>
#include <gtkmm/frame.h>
-#include <boost/algorithm/string.hpp>
#include "pbd/unwind.h"
delete _pianomm;
}
+void
+PatchChangeWidget::refresh ()
+{
+ if (is_visible ()) {
+ on_show ();
+ }
+}
+
void
PatchChangeWidget::on_show ()
{
if (_current_patch_bank) {
const MIDI::Name::PatchNameList& patches = _current_patch_bank->patch_name_list ();
for (MIDI::Name::PatchNameList::const_iterator i = patches.begin(); i != patches.end(); ++i) {
- std::string n = (*i)->name ();
+ const std::string n = (*i)->name ();
MIDI::Name::PatchPrimaryKey const& key = (*i)->patch_primary_key ();
const uint8_t pgm = key.program();
/* ***************************************************************************/
-PatchChangeGridDialog::PatchChangeGridDialog (std::string const& title, boost::shared_ptr<ARDOUR::Route> r)
- : ArdourDialog (title, false, false)
+PatchChangeGridDialog::PatchChangeGridDialog (boost::shared_ptr<ARDOUR::Route> r)
+ : ArdourDialog (string_compose (_("Select Patch for '%1"), r->name()), false, false)
, w (r)
{
+ r->PropertyChanged.connect (_route_connection, invalidator (*this), boost::bind (&PatchChangeGridDialog::route_property_changed, this, _1, boost::weak_ptr<Route>(r)), gui_context());
get_vbox()->add (w);
w.show ();
}
+
+void
+PatchChangeGridDialog::route_property_changed (const PBD::PropertyChange& what_changed, boost::weak_ptr<Route> wr)
+{
+ boost::shared_ptr<ARDOUR::Route> r = wr.lock ();
+ if (r && what_changed.contains (ARDOUR::Properties::name)) {
+ set_title (string_compose (_("Select Patch for '%1"), r->name()));
+ }
+}
PatchChangeWidget (boost::shared_ptr<ARDOUR::Route>);
~PatchChangeWidget ();
+ void refresh ();
+
protected:
int bank (uint8_t) const;
uint8_t program (uint8_t) const;
class PatchChangeGridDialog : public ArdourDialog
{
public:
- PatchChangeGridDialog (std::string const&, boost::shared_ptr<ARDOUR::Route>);
+ PatchChangeGridDialog (boost::shared_ptr<ARDOUR::Route>);
void on_hide () { w.hide (); ArdourDialog::on_hide (); }
void on_show () { w.show (); ArdourDialog::on_show (); }
+ void refresh () { w.refresh (); }
private:
+ void route_property_changed (const PBD::PropertyChange&, boost::weak_ptr<ARDOUR::Route>);
+ PBD::ScopedConnection _route_connection;
PatchChangeWidget w;
};