PatchChange Dialog: update title & refresh midnam on change
This commit is contained in:
@@ -425,7 +425,7 @@ MidiTimeAxisView::update_patch_selector ()
|
||||
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;
|
||||
@@ -445,6 +445,17 @@ MidiTimeAxisView::update_patch_selector ()
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -486,6 +497,10 @@ 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
|
||||
@@ -1093,7 +1108,7 @@ MidiTimeAxisView::send_patch_change ()
|
||||
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 ();
|
||||
}
|
||||
|
||||
@@ -122,6 +122,7 @@ private:
|
||||
void setup_midnam_patches ();
|
||||
void update_patch_selector ();
|
||||
void drop_instrument_ref ();
|
||||
void reread_midnam ();
|
||||
PBD::ScopedConnectionList midnam_connection;
|
||||
|
||||
void start_scroomer_update ();
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
#include <bitset>
|
||||
#include <gtkmm/frame.h>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
#include "pbd/unwind.h"
|
||||
|
||||
@@ -141,6 +140,14 @@ PatchChangeWidget::~PatchChangeWidget ()
|
||||
delete _pianomm;
|
||||
}
|
||||
|
||||
void
|
||||
PatchChangeWidget::refresh ()
|
||||
{
|
||||
if (is_visible ()) {
|
||||
on_show ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
PatchChangeWidget::on_show ()
|
||||
{
|
||||
@@ -237,7 +244,7 @@ PatchChangeWidget::refill_program_list ()
|
||||
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();
|
||||
@@ -477,10 +484,20 @@ PatchChangeWidget::program (uint8_t chn) const
|
||||
|
||||
/* ***************************************************************************/
|
||||
|
||||
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()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,8 @@ public:
|
||||
PatchChangeWidget (boost::shared_ptr<ARDOUR::Route>);
|
||||
~PatchChangeWidget ();
|
||||
|
||||
void refresh ();
|
||||
|
||||
protected:
|
||||
int bank (uint8_t) const;
|
||||
uint8_t program (uint8_t) const;
|
||||
@@ -105,11 +107,14 @@ private:
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user