diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-09-25 19:00:34 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-09-25 19:00:34 +0000 |
commit | 9867035f2981e60f00cc9ec19aef5840a5bd7fad (patch) | |
tree | afa78bb74bc4a3537893d920532d12c1391b4c14 /gtk2_ardour/midi_time_axis.cc | |
parent | 756fc1839442ae236083c918ba7c7af30e5f8100 (diff) |
make MIDI thru work even when not rolling; add GUI control over MIDI thru (midi track context menu); add "default channel" concept for MIDI tracks so that piano roll header events can send stuff on the right channel; add GUI control over this channel setting
git-svn-id: svn://localhost/ardour2/branches/3.0@5687 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_time_axis.cc')
-rw-r--r-- | gtk2_ardour/midi_time_axis.cc | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 6103e02544..b189827782 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -108,6 +108,9 @@ MidiTimeAxisView::MidiTimeAxisView (PublicEditor& ed, Session& sess, , _meter_color_mode_item(0) , _channel_color_mode_item(0) , _track_color_mode_item(0) + , _step_edit_item (0) + , _midi_thru_item (0) + , default_channel_menu (0) { subplugin_menu.set_name ("ArdourContextMenu"); @@ -301,8 +304,57 @@ MidiTimeAxisView::append_extra_display_menu_items () MidiStreamView::ContentsRange))); items.push_back (MenuElem (_("Note range"), *range_menu)); - items.push_back (MenuElem (_("Note mode"), *build_note_mode_menu())); + items.push_back (MenuElem (_("Default Channel"), *build_def_channel_menu())); + + items.push_back (CheckMenuElem (_("MIDI Thru"), mem_fun(*this, &MidiTimeAxisView::toggle_midi_thru))); + _midi_thru_item = dynamic_cast<CheckMenuItem*>(&items.back()); +} + +Gtk::Menu* +MidiTimeAxisView::build_def_channel_menu () +{ + using namespace Menu_Helpers; + + if (default_channel_menu == 0) { + default_channel_menu = manage (new Menu ()); + } + + uint8_t defchn = midi_track()->default_channel(); + MenuList& def_channel_items = default_channel_menu->items(); + RadioMenuItem* item; + RadioMenuItem::Group dc_group; + + for (int i = 0; i < 16; ++i) { + char buf[4]; + snprintf (buf, sizeof (buf), "%d", i+1); + + def_channel_items.push_back (RadioMenuElem (dc_group, buf, + bind (mem_fun (*this, &MidiTimeAxisView::set_default_channel), i))); + item = dynamic_cast<RadioMenuItem*>(&def_channel_items.back()); + item->set_active ((i == defchn)); + } + + return default_channel_menu; +} + +void +MidiTimeAxisView::set_default_channel (int chn) +{ + midi_track()->set_default_channel (chn); +} + +void +MidiTimeAxisView::toggle_midi_thru () +{ + if (!_midi_thru_item) { + return; + } + + bool view_yn = _midi_thru_item->get_active(); + if (view_yn != midi_track()->midi_thru()) { + midi_track()->set_midi_thru (view_yn); + } } void |