Make scroll-wheel modifier keys consistent in editor summary pane.
[ardour.git] / gtk2_ardour / patch_change_dialog.cc
index 07e9d963856b2ea41c5448be6403e34273384ffb..2ecfd4bdd7d47c98b1e3e55367d82932a6ab3c09 100644 (file)
@@ -25,6 +25,8 @@
 
 #include "gtkmm2ext/utils.h"
 
+#include "midi++/midnam_patch.h"
+
 #include "ardour/midi_patch_manager.h"
 #include "ardour/beats_frames_converter.h"
 #include "ardour/instrument_info.h"
@@ -40,12 +42,12 @@ using namespace Gtkmm2ext;
 
 /** @param tc If non-0, a time converter for this patch change.  If 0, time control will be desensitized */
 PatchChangeDialog::PatchChangeDialog (
-       const ARDOUR::BeatsFramesConverter* tc,
-       ARDOUR::Session* session,
+       const ARDOUR::BeatsFramesConverter*              tc,
+       ARDOUR::Session*                                 session,
        Evoral::PatchChange<Evoral::MusicalTime> const & patch,
-       ARDOUR::InstrumentInfo& info,
-       const Gtk::BuiltinStockID& ok
-       )
+       ARDOUR::InstrumentInfo&                          info,
+       const Gtk::BuiltinStockID&                       ok,
+       bool                                             allow_delete)
        : ArdourDialog (_("Patch Change"), true)
        , _time_converter (tc)
        , _info (info)
@@ -114,6 +116,9 @@ PatchChangeDialog::PatchChangeDialog (
 
        add_button (Stock::CANCEL, RESPONSE_CANCEL);
        add_button (ok, RESPONSE_ACCEPT);
+       if (allow_delete) {
+               add_button (Stock::DELETE, RESPONSE_REJECT);
+       }
        set_default_response (RESPONSE_ACCEPT);
 
        fill_bank_combo ();
@@ -156,6 +161,8 @@ PatchChangeDialog::patch () const
 void
 PatchChangeDialog::fill_bank_combo ()
 {
+       _bank_combo.clear ();
+
        boost::shared_ptr<MIDI::Name::ChannelNameSet> cns = _info.get_patches (_channel.get_value_as_int() - 1);
 
        if (!cns) {
@@ -250,8 +257,8 @@ PatchChangeDialog::fill_patch_combo ()
                return;
        }
 
-       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) {
+       const MIDI::Name::PatchNameList& patches = _current_patch_bank->patch_name_list ();
+       for (MIDI::Name::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) {
                string n = (*j)->name ();
                boost::replace_all (n, "_", " ");
                _patch_combo.append_text (n);
@@ -273,8 +280,8 @@ PatchChangeDialog::set_active_patch_combo ()
                return;
        }
        
-       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) {
+       const MIDI::Name::PatchNameList& patches = _current_patch_bank->patch_name_list ();
+       for (MIDI::Name::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) {
                string n = (*j)->name ();
                boost::replace_all (n, "_", " ");
 
@@ -300,15 +307,14 @@ PatchChangeDialog::patch_combo_changed ()
                return;
        }
 
-       const MIDI::Name::PatchBank::PatchNameList& patches = _current_patch_bank->patch_name_list ();
+       const MIDI::Name::PatchNameList& patches = _current_patch_bank->patch_name_list ();
 
-       for (MIDI::Name::PatchBank::PatchNameList::const_iterator j = patches.begin(); j != patches.end(); ++j) {
+       for (MIDI::Name::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 ()) {
                        _ignore_signals = true;
-                       std::cerr << " reset pgm number to " << (int) (*j)->program_number() << std::endl;
                        _program.set_value ((*j)->program_number() + 1);
                        _ignore_signals = false;
                        break;