Make send automation work (#4734).
[ardour.git] / gtk2_ardour / patch_change_dialog.h
1 /*
2     Copyright (C) 2010 Paul Davis
3     Author: Carl Hetherington <cth@carlh.net>
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19 */
20
21 #include <gtkmm/spinbutton.h>
22 #include <gtkmm/comboboxtext.h>
23 #include "midi++/midnam_patch.h"
24 #include "evoral/PatchChange.hpp"
25 #include "ardour_dialog.h"
26 #include "audio_clock.h"
27
28 namespace ARDOUR {
29         class BeatsFramesConverter;
30         class Session;
31 }
32
33 namespace MIDI {
34         namespace Name {
35                 class PatchBank;
36         }
37 }
38
39 class PatchChangeDialog : public ArdourDialog
40 {
41 public:
42         PatchChangeDialog (
43                 const ARDOUR::BeatsFramesConverter *,
44                 ARDOUR::Session *,
45                 Evoral::PatchChange<Evoral::MusicalTime> const &,
46                 std::string const &,
47                 std::string const &,
48                 const Gtk::BuiltinStockID &
49                 );
50
51         Evoral::PatchChange<Evoral::MusicalTime> patch () const;
52
53 private:
54         void fill_bank_combo ();
55         void set_active_bank_combo ();
56         void fill_patch_combo ();
57         void set_active_patch_combo ();
58         void bank_combo_changed ();
59         void patch_combo_changed ();
60         void channel_changed ();
61         void bank_changed ();
62         void program_changed ();
63
64         MIDI::Name::ChannelNameSet::PatchBanks const * get_banks ();
65         
66         const ARDOUR::BeatsFramesConverter* _time_converter;
67         std::string _model_name;
68         std::string _custom_device_mode;
69         AudioClock _time;
70         Gtk::SpinButton _channel;
71         Gtk::SpinButton _program;
72         Gtk::SpinButton _bank;
73         Gtk::ComboBoxText _bank_combo;
74         Gtk::ComboBoxText _patch_combo;
75
76         boost::shared_ptr<MIDI::Name::PatchBank> _current_patch_bank;
77         bool _ignore_signals;
78 };