From 557f56a7f2173fdf9b01dfb3f3410f227d05f8e2 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 12 Jun 2012 04:05:10 +0000 Subject: more changes to patch change/plugin preset support - replace regexp replacement with boost::replace_all(), actually find programs/patches in the data we have, and more. notable changes to constructors and structure of various MIDI::Name objects git-svn-id: svn://localhost/ardour2/branches/3.0@12667 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/canvas_patch_change.cc | 12 +++++------ gtk2_ardour/patch_change_dialog.cc | 44 +++++++++++++++++++++++++++++--------- gtk2_ardour/patch_change_dialog.h | 3 +++ 3 files changed, 42 insertions(+), 17 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/canvas_patch_change.cc b/gtk2_ardour/canvas_patch_change.cc index b3d8caa488..d57de8a797 100644 --- a/gtk2_ardour/canvas_patch_change.cc +++ b/gtk2_ardour/canvas_patch_change.cc @@ -19,7 +19,7 @@ #include -#include +#include #include "gtkmm2ext/keyboard.h" #include "ardour/instrument_info.h" @@ -87,9 +87,6 @@ CanvasPatchChange::initialize_popup_menus() for (ChannelNameSet::PatchBanks::const_iterator bank = patch_banks.begin(); bank != patch_banks.end(); ++bank) { - Glib::RefPtr underscores = Glib::Regex::create("_"); - std::string replacement(" "); - Gtk::Menu& patch_bank_menu = *manage(new Gtk::Menu()); const PatchBank::PatchNameList& patches = (*bank)->patch_name_list(); @@ -98,7 +95,8 @@ CanvasPatchChange::initialize_popup_menus() for (PatchBank::PatchNameList::const_iterator patch = patches.begin(); patch != patches.end(); ++patch) { - std::string name = underscores->replace((*patch)->name().c_str(), -1, 0, replacement); + std::string name = (*patch)->name(); + boost::replace_all (name, "_", " "); patch_menus.push_back( Gtk::Menu_Helpers::MenuElem( @@ -108,8 +106,8 @@ CanvasPatchChange::initialize_popup_menus() (*patch)->patch_primary_key())) ); } - - std::string name = underscores->replace((*bank)->name().c_str(), -1, 0, replacement); + std::string name = (*bank)->name(); + boost::replace_all (name, "_", " "); patch_bank_menus.push_back( Gtk::Menu_Helpers::MenuElem( diff --git a/gtk2_ardour/patch_change_dialog.cc b/gtk2_ardour/patch_change_dialog.cc index 4dd2a91d75..07e9d96385 100644 --- a/gtk2_ardour/patch_change_dialog.cc +++ b/gtk2_ardour/patch_change_dialog.cc @@ -30,6 +30,7 @@ #include "ardour/instrument_info.h" #include "patch_change_dialog.h" +#include "gui_thread.h" #include "i18n.h" @@ -119,9 +120,21 @@ PatchChangeDialog::PatchChangeDialog ( set_active_bank_combo (); bank_combo_changed (); + _info.Changed.connect (_info_changed_connection, invalidator (*this), + boost::bind (&PatchChangeDialog::instrument_info_changed, this), gui_context()); + show_all (); } +void +PatchChangeDialog::instrument_info_changed () +{ + _bank_combo.clear (); + _patch_combo.clear (); + fill_bank_combo (); + fill_patch_combo (); +} + Evoral::PatchChange PatchChangeDialog::patch () const { @@ -145,6 +158,10 @@ PatchChangeDialog::fill_bank_combo () { boost::shared_ptr cns = _info.get_patches (_channel.get_value_as_int() - 1); + if (!cns) { + return; + } + for (MIDI::Name::ChannelNameSet::PatchBanks::const_iterator i = cns->patch_banks().begin(); i != cns->patch_banks().end(); ++i) { string n = (*i)->name (); boost::replace_all (n, "_", " "); @@ -160,13 +177,16 @@ PatchChangeDialog::set_active_bank_combo () boost::shared_ptr cns = _info.get_patches (_channel.get_value_as_int() - 1); + if (!cns) { + return; + } + for (MIDI::Name::ChannelNameSet::PatchBanks::const_iterator i = cns->patch_banks().begin(); i != cns->patch_banks().end(); ++i) { string n = (*i)->name (); boost::replace_all (n, "_", " "); - MIDI::Name::PatchPrimaryKey const * key = (*i)->patch_primary_key (); - if (key && (key->bank_number == _bank.get_value () - 1)) { + if ((*i)->number() == _bank.get_value () - 1) { _current_patch_bank = *i; _ignore_signals = true; _bank_combo.set_active_text (n); @@ -194,6 +214,10 @@ PatchChangeDialog::bank_combo_changed () boost::shared_ptr cns = _info.get_patches (_channel.get_value_as_int() - 1); + if (!cns) { + return; + } + for (MIDI::Name::ChannelNameSet::PatchBanks::const_iterator i = cns->patch_banks().begin(); i != cns->patch_banks().end(); ++i) { string n = (*i)->name (); boost::replace_all (n, "_", " "); @@ -211,12 +235,9 @@ PatchChangeDialog::bank_combo_changed () fill_patch_combo (); set_active_patch_combo (); - MIDI::Name::PatchPrimaryKey const * key = _current_patch_bank->patch_primary_key (); - if (key) { - _ignore_signals = true; - _bank.set_value (key->bank_number + 1); - _ignore_signals = false; - } + _ignore_signals = true; + _bank.set_value (_current_patch_bank->number() + 1); + _ignore_signals = false; } /** Fill the contents of the patch combo */ @@ -280,14 +301,17 @@ PatchChangeDialog::patch_combo_changed () } const MIDI::Name::PatchBank::PatchNameList& patches = _current_patch_bank->patch_name_list (); + for (MIDI::Name::PatchBank::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) { string n = (*j)->name (); boost::replace_all (n, "_", " "); + std::cerr << "Looking for " << n << " vs " << _patch_combo.get_active_text() << std::endl; if (n == _patch_combo.get_active_text ()) { - MIDI::Name::PatchPrimaryKey const & key = (*j)->patch_primary_key (); _ignore_signals = true; - _program.set_value (key.program_number + 1); + std::cerr << " reset pgm number to " << (int) (*j)->program_number() << std::endl; + _program.set_value ((*j)->program_number() + 1); _ignore_signals = false; + break; } } } diff --git a/gtk2_ardour/patch_change_dialog.h b/gtk2_ardour/patch_change_dialog.h index 1a0b63e51f..0d02112091 100644 --- a/gtk2_ardour/patch_change_dialog.h +++ b/gtk2_ardour/patch_change_dialog.h @@ -72,4 +72,7 @@ private: boost::shared_ptr _current_patch_bank; bool _ignore_signals; + + void instrument_info_changed (); + PBD::ScopedConnection _info_changed_connection; }; -- cgit v1.2.3