]> lisas.de Git - terminatorX.git/blob - src/tX_midiin.h
Fix preferences for UI colors.
[terminatorX.git] / src / tX_midiin.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 2002 Arthur Peters
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, see <http://www.gnu.org/licenses/>.
17  
18     File: tX_midiin.h
19  
20     Description: Header to tX_midiin.cc
21 */    
22
23 #ifndef _tx_midiin_h
24 #define _tx_midiin_h 1
25
26 #include <stdio.h>
27 #include <libxml/xmlmemory.h>
28 #include <libxml/parser.h>
29 #include <libxml/encoding.h>
30
31 class vtt_class;
32 class tX_seqpar;
33
34 class tX_midievent
35 {
36   public:
37         int channel;
38         enum
39         {
40                 NONE=0,
41                 CC=1,
42                 NOTE,
43                 PITCHBEND,
44                 CC14,
45                 RPN,
46                 NRPN
47         } type;
48         int number; // note # or controller #
49         
50         float value; // controller value or note velocity
51         bool is_noteon; // note on or off?
52
53         bool type_matches( const tX_midievent& other ) const
54         {
55                 return channel == other.channel && type == other.type && number == other.number;
56         }
57
58         void clear_non_type()
59         {
60                 value = 0;
61                 is_noteon = false;
62         }
63         
64         tX_midievent() : channel(0), type(NONE), number(0), value(0.0), is_noteon(false) {}
65 };
66
67 #include <config.h>
68 #ifdef USE_ALSA_MIDI_IN
69
70 #include <alsa/asoundlib.h>
71 #include <gtk/gtk.h>
72
73 class tX_midiin
74 {
75         snd_seq_t *ALSASeqHandle;
76         tX_midievent last_event;
77         bool is_open;
78         tX_seqpar *sp_to_learn;
79         GtkWidget *learn_dialog;
80         int portid;
81         
82   public:
83         tX_midiin();
84         ~tX_midiin();
85
86         bool get_is_open() {
87                 return is_open;
88         }
89         
90         int check_event();
91
92         void configure_bindings( vtt_class* );
93
94         const tX_midievent& get_last_event()
95         {
96                 return last_event;
97         }
98
99         void set_midi_learn_sp(tX_seqpar *);
100         void cancel_midi_learn();
101         void store_connections(FILE *rc, char *indent);
102         void restore_connections(xmlNodePtr node);
103         
104         static gboolean midi_learn_cancel(GtkWidget *, tX_midiin *);
105         static gboolean midi_learn_destroy(GtkWidget *, tX_midiin *);   
106         static void auto_assign_midi_mappings(GtkWidget *, gpointer);
107         static void clear_midi_mappings(GtkWidget *, gpointer);
108         
109   private:
110
111         class midi_binding_gui
112         {
113           public:
114                 midi_binding_gui( GtkTreeModel* _model, tX_midiin* _midi );
115                 ~midi_binding_gui();
116
117                 GtkWidget *window;
118                 
119                 GtkWidget *parameter_treeview;
120                 GtkWidget *midi_event_info;
121                 GtkWidget *bind_button;
122
123                 GtkTreeModel* model;
124
125                 tX_midiin* midi;
126
127                 tX_midievent last_event;
128
129                 static void window_closed( GtkWidget *widget, gpointer _this );
130                 static void unbind_clicked( GtkButton *button, gpointer _this );          
131                 static void bind_clicked( GtkButton *button, gpointer _this );
132                 static void close_clicked( GtkButton *button, gpointer _this );
133                 static gint timer( gpointer _this );
134
135           private:
136                 char tempstr[128];
137
138                 gint timer_tag;
139         };
140 };
141
142 #endif // USE_ALSA_MIDI_IN
143
144 #endif // ndef _tx_midiin_h