summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_channel_selector.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-05-12 02:40:48 +0000
committerDavid Robillard <d@drobilla.net>2008-05-12 02:40:48 +0000
commit8ca72c4eca3a712f5368680ba0fbce5beb831324 (patch)
tree65b29e7fe4bb0d28f8a113bf014e831d98c7d50b /gtk2_ardour/midi_channel_selector.h
parenta76e2128efea2d48fd873e95fd7c0f0b6f6135b3 (diff)
Fix various MIDI corruption bugs.
Re-enable MIDI CC controller bars and other immediate output (hans commented out, tsk tsk). Write channel mode as textual enumeration instead of magic number. Better atomic (almost) channel mode switching on MIDI ring buffer (was a possible, if unlikely, source of corruption). Handle some cases of broken MIDI, and oversized events, more gracefully. git-svn-id: svn://localhost/ardour2/branches/3.0@3335 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_channel_selector.h')
-rw-r--r--gtk2_ardour/midi_channel_selector.h62
1 files changed, 40 insertions, 22 deletions
diff --git a/gtk2_ardour/midi_channel_selector.h b/gtk2_ardour/midi_channel_selector.h
index 9ac95036d6..1f15f3eef5 100644
--- a/gtk2_ardour/midi_channel_selector.h
+++ b/gtk2_ardour/midi_channel_selector.h
@@ -1,13 +1,34 @@
+/*
+ Copyright (C) 2008 Paul Davis
+ Author: Hans Baier
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
#ifndef __ardour_ui_midi_channel_selector_h__
#define __ardour_ui_midi_channel_selector_h__
+#include <set>
#include "boost/shared_ptr.hpp"
-#include "gtkmm/table.h"
#include "sigc++/trackable.h"
+#include "gtkmm/table.h"
#include "gtkmm/button.h"
#include "gtkmm/togglebutton.h"
#include "gtkmm/label.h"
-#include <set>
+#include <ardour/types.h>
+
class MidiChannelSelector : public Gtk::Table
{
@@ -15,8 +36,10 @@ public:
MidiChannelSelector(int no_rows = 4, int no_columns = 4, int start_row = 0, int start_column = 0);
virtual ~MidiChannelSelector() = 0;
+ sigc::signal<void, ARDOUR::ChannelMode, uint16_t> mode_changed;
+
protected:
- virtual void button_toggled(Gtk::ToggleButton *button, uint8_t button_nr) = 0;
+ virtual void button_toggled(Gtk::ToggleButton* button, uint8_t button_nr) = 0;
Gtk::Label _button_labels[4][4];
Gtk::ToggleButton _buttons[4][4];
int _recursion_counter;
@@ -32,7 +55,7 @@ public:
sigc::signal<void, uint8_t> channel_selected;
protected:
- virtual void button_toggled(Gtk::ToggleButton *button, uint8_t button_nr);
+ virtual void button_toggled(Gtk::ToggleButton* button, uint8_t button_nr);
Gtk::ToggleButton* _last_active_button;
uint8_t _active_channel;
@@ -41,40 +64,35 @@ protected:
class MidiMultipleChannelSelector : public MidiChannelSelector
{
public:
- MidiMultipleChannelSelector(uint16_t initial_selection = 0xFFFF, int8_t force_channel = -1);
+ MidiMultipleChannelSelector(ARDOUR::ChannelMode mode = ARDOUR::FilterChannels,
+ uint16_t initial_selection = 0xFFFF);
+
virtual ~MidiMultipleChannelSelector();
+ void set_channel_mode(ARDOUR::ChannelMode mode, uint8_t mask);
+
/**
* @return each bit in the returned word represents a midi channel, eg.
* bit 0 represents channel 0 and bit 15 represents channel 15
*
*/
const uint16_t get_selected_channels() const;
- void set_selected_channels(uint16_t selected_channels);
-
- sigc::signal<void, uint16_t> selection_changed;
- sigc::signal<void, int8_t> force_channel_changed;
+ void set_selected_channels(uint16_t selected_channels);
- const int8_t get_force_channel() const;
- void set_force_channel(int8_t force_channel);
protected:
- enum Mode {
- FILTERING_MULTIPLE_CHANNELS,
- FORCING_SINGLE_CHANNEL
- };
-
- Mode _mode;
+ ARDOUR::ChannelMode _channel_mode;
+ ARDOUR::NoteMode _note_mode;
- virtual void button_toggled(Gtk::ToggleButton *button, uint8_t button_nr);
+ virtual void button_toggled(Gtk::ToggleButton* button, uint8_t button_nr);
void force_channels_button_toggled();
void select_all(bool on);
void invert_selection(void);
- Gtk::Button _select_all;
- Gtk::Button _select_none;
- Gtk::Button _invert_selection;
- Gtk::ToggleButton _force_channel;
+ Gtk::Button _select_all;
+ Gtk::Button _select_none;
+ Gtk::Button _invert_selection;
+ Gtk::ToggleButton _force_channel;
};
#endif /*__ardour_ui_midi_channel_selector_h__*/