Fix broken whitespace. I'd apologize for the compile times if it was my fault :D
[ardour.git] / libs / ardour / ardour / midi_ui.h
1 #ifndef __libardour_midi_ui_h__
2 #define __libardour_midi_ui_h__
3
4 #include <list>
5 #include <boost/signals2.hpp>
6 #include "pbd/abstract_ui.h"
7 #include "pbd/signals.h"
8
9 namespace MIDI {
10         class Port;
11 }
12
13 namespace ARDOUR {
14
15 class Session;
16
17 /* this is mostly a placeholder because I suspect that at some
18    point we will want to add more members to accomodate
19    certain types of requests to the MIDI UI
20 */
21
22 struct MidiUIRequest : public BaseUI::BaseRequestObject {
23   public:
24         MidiUIRequest () {}
25         ~MidiUIRequest() {}
26 };
27
28 class MidiControlUI : public AbstractUI<MidiUIRequest>
29 {
30   public:
31         MidiControlUI (Session& s);
32         ~MidiControlUI ();
33
34         static MidiControlUI* instance() { return _instance; }
35
36         static BaseUI::RequestType PortChange;
37
38         void change_midi_ports ();
39
40   protected:
41         void thread_init ();
42         void do_request (MidiUIRequest*);
43
44   private:
45         typedef std::list<GSource*> PortSources;
46         PortSources port_sources;
47         ARDOUR::Session& _session;
48         PBD::ScopedConnection rebind_connection;
49
50         bool midi_input_handler (Glib::IOCondition, MIDI::Port*);
51         void reset_ports ();
52         void clear_ports ();
53
54         static MidiControlUI* _instance;
55 };
56
57 }
58
59 #endif /* __libardour_midi_ui_h__ */