summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_time_axis.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-06-13 17:24:15 +0000
committerCarl Hetherington <carl@carlh.net>2012-06-13 17:24:15 +0000
commitb524fe05d57e7f42bc5fd62593a11ea5c72c2046 (patch)
treea87ddb854e60aa7b32bac4c387f1112217bff5e4 /gtk2_ardour/midi_time_axis.cc
parent5dc49d678f4f0024ddc2f5197cf1dfd61255a218 (diff)
Make a few more MIDI track menu options apply to the current selection (#4106).
git-svn-id: svn://localhost/ardour2/branches/3.0@12706 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_time_axis.cc')
-rw-r--r--gtk2_ardour/midi_time_axis.cc96
1 files changed, 49 insertions, 47 deletions
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index 6259b1e431..80a5a50c0c 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -383,12 +383,12 @@ MidiTimeAxisView::append_extra_display_menu_items ()
range_menu->set_name ("ArdourContextMenu");
range_items.push_back (MenuElem (_("Show Full Range"), sigc::bind (
- sigc::mem_fun(*this, &MidiTimeAxisView::set_note_range_for_selection),
- MidiStreamView::FullRange)));
+ sigc::mem_fun(*this, &MidiTimeAxisView::set_note_range),
+ MidiStreamView::FullRange, true)));
range_items.push_back (MenuElem (_("Fit Contents"), sigc::bind (
- sigc::mem_fun(*this, &MidiTimeAxisView::set_note_range_for_selection),
- MidiStreamView::ContentsRange)));
+ sigc::mem_fun(*this, &MidiTimeAxisView::set_note_range),
+ MidiStreamView::ContentsRange, true)));
items.push_back (MenuElem (_("Note Range"), *range_menu));
items.push_back (MenuElem (_("Note Mode"), *build_note_mode_menu()));
@@ -730,13 +730,13 @@ MidiTimeAxisView::build_note_mode_menu()
mode_menu->set_name ("ArdourContextMenu");
RadioMenuItem::Group mode_group;
- items.push_back (RadioMenuElem (mode_group, _("Sustained"),
- sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_note_mode), Sustained)));
+ items.push_back (RadioMenuElem (mode_group,_("Sustained"),
+ sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_note_mode), Sustained, true)));
_note_mode_item = dynamic_cast<RadioMenuItem*>(&items.back());
_note_mode_item->set_active(_note_mode == Sustained);
items.push_back (RadioMenuElem (mode_group, _("Percussive"),
- sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_note_mode), Percussive)));
+ sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_note_mode), Percussive, true)));
_percussion_mode_item = dynamic_cast<RadioMenuItem*>(&items.back());
_percussion_mode_item->set_active(_note_mode == Percussive);
@@ -755,19 +755,19 @@ MidiTimeAxisView::build_color_mode_menu()
RadioMenuItem::Group mode_group;
items.push_back (RadioMenuElem (mode_group, _("Meter Colors"),
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_color_mode),
- MeterColors, false, true)));
+ MeterColors, false, true, true)));
_meter_color_mode_item = dynamic_cast<RadioMenuItem*>(&items.back());
_meter_color_mode_item->set_active(_color_mode == MeterColors);
items.push_back (RadioMenuElem (mode_group, _("Channel Colors"),
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_color_mode),
- ChannelColors, false, true)));
+ ChannelColors, false, true, true)));
_channel_color_mode_item = dynamic_cast<RadioMenuItem*>(&items.back());
_channel_color_mode_item->set_active(_color_mode == ChannelColors);
items.push_back (RadioMenuElem (mode_group, _("Track Color"),
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_color_mode),
- TrackColor, false, true)));
+ TrackColor, false, true, true)));
_channel_color_mode_item = dynamic_cast<RadioMenuItem*>(&items.back());
_channel_color_mode_item->set_active(_color_mode == TrackColor);
@@ -775,59 +775,61 @@ MidiTimeAxisView::build_color_mode_menu()
}
void
-MidiTimeAxisView::set_note_mode(NoteMode mode)
+MidiTimeAxisView::set_note_mode(NoteMode mode, bool apply_to_selection)
{
- if (_note_mode != mode || midi_track()->note_mode() != mode) {
- _note_mode = mode;
- midi_track()->set_note_mode(mode);
- set_gui_property ("note-mode", enum_2_string(_note_mode));
- _view->redisplay_track();
- }
-}
-
-void
-MidiTimeAxisView::set_color_mode (ColorMode mode, bool force, bool redisplay)
-{
- if (_color_mode == mode && !force) {
- return;
- }
-
- if (mode == ChannelColors) {
- _channel_selector.set_channel_colors(CanvasNoteEvent::midi_channel_colors);
+ if (apply_to_selection) {
+ _editor.get_selection().tracks.foreach_midi_time_axis (boost::bind (&MidiTimeAxisView::set_note_mode, _1, mode, false));
} else {
- _channel_selector.set_default_channel_color();
- }
-
- _color_mode = mode;
- set_gui_property ("color-mode", enum_2_string(_color_mode));
- if (redisplay) {
- _view->redisplay_track();
+ if (_note_mode != mode || midi_track()->note_mode() != mode) {
+ _note_mode = mode;
+ midi_track()->set_note_mode(mode);
+ set_gui_property ("note-mode", enum_2_string(_note_mode));
+ _view->redisplay_track();
+ }
}
}
void
-MidiTimeAxisView::set_note_range(MidiStreamView::VisibleNoteRange range)
+MidiTimeAxisView::set_color_mode (ColorMode mode, bool force, bool redisplay, bool apply_to_selection)
{
- if (!_ignore_signals) {
- midi_view()->set_note_range(range);
+ if (apply_to_selection) {
+ _editor.get_selection().tracks.foreach_midi_time_axis (
+ boost::bind (&MidiTimeAxisView::set_color_mode, _1, mode, force, redisplay, false)
+ );
+ } else {
+
+ if (_color_mode == mode && !force) {
+ return;
+ }
+
+ if (mode == ChannelColors) {
+ _channel_selector.set_channel_colors(CanvasNoteEvent::midi_channel_colors);
+ } else {
+ _channel_selector.set_default_channel_color();
+ }
+
+ _color_mode = mode;
+ set_gui_property ("color-mode", enum_2_string(_color_mode));
+ if (redisplay) {
+ _view->redisplay_track();
+ }
}
}
-/** Set the note range for all selected MIDI tracks */
void
-MidiTimeAxisView::set_note_range_for_selection (MidiStreamView::VisibleNoteRange range)
+MidiTimeAxisView::set_note_range (MidiStreamView::VisibleNoteRange range, bool apply_to_selection)
{
- TrackSelection& ts = _editor.get_selection().tracks;
-
- for (TrackSelection::iterator i = ts.begin(); i != ts.end(); ++i) {
- MidiTimeAxisView* mtv = dynamic_cast<MidiTimeAxisView*> (*i);
- if (mtv) {
- mtv->set_note_range (range);
+ if (apply_to_selection) {
+ _editor.get_selection().tracks.foreach_midi_time_axis (
+ boost::bind (&MidiTimeAxisView::set_note_range, _1, range, false)
+ );
+ } else {
+ if (!_ignore_signals) {
+ midi_view()->set_note_range(range);
}
}
}
-
void
MidiTimeAxisView::update_range()
{