summaryrefslogtreecommitdiff
path: root/gtk2_ardour/patch_change_dialog.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-06-12 04:05:10 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-06-12 04:05:10 +0000
commit557f56a7f2173fdf9b01dfb3f3410f227d05f8e2 (patch)
tree2ebd0a0655fadffcb962591355fd0d4a9c7e7ce6 /gtk2_ardour/patch_change_dialog.cc
parentcf0753a4bd4ed23d40fd06e8d1dec4f0b46da6fc (diff)
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
Diffstat (limited to 'gtk2_ardour/patch_change_dialog.cc')
-rw-r--r--gtk2_ardour/patch_change_dialog.cc44
1 files changed, 34 insertions, 10 deletions
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<Evoral::MusicalTime>
PatchChangeDialog::patch () const
{
@@ -145,6 +158,10 @@ PatchChangeDialog::fill_bank_combo ()
{
boost::shared_ptr<MIDI::Name::ChannelNameSet> 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<MIDI::Name::ChannelNameSet> 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<MIDI::Name::ChannelNameSet> 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;
}
}
}