diff options
author | Carl Hetherington <carl@carlh.net> | 2011-07-17 20:10:31 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-07-17 20:10:31 +0000 |
commit | 982bfd08db00143df984fa168de3754f7f1e3e86 (patch) | |
tree | 42217b87d524ba1b9859b066f0563313619d47a4 /gtk2_ardour/editor_mouse.cc | |
parent | 8786d5c9c21322e0cd08488b31ee3b4bed2c68d6 (diff) |
Add context menu for control points.
git-svn-id: svn://localhost/ardour2/branches/3.0@9890 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_mouse.cc')
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 30e117fb59..0e1278ab1f 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1340,6 +1340,10 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT popup_track_context_menu (1, event->button.time, item_type, false); break; + case ControlPointItem: + popup_control_point_context_menu (item, event); + break; + #ifdef WITH_CMT case ImageFrameItem: popup_imageframe_edit_menu(1, event->button.time, item, true) ; @@ -1389,11 +1393,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT break; case ControlPointItem: - if (eff == MouseGain) { - remove_gain_control_point (item, event); - } else { - remove_control_point (item, event); - } + remove_control_point (item); break; case NoteItem: @@ -2065,8 +2065,8 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from return true; } -void -Editor::remove_gain_control_point (ArdourCanvas::Item*item, GdkEvent* /*event*/) +bool +Editor::can_remove_control_point (ArdourCanvas::Item* item) { ControlPoint* control_point; @@ -2075,18 +2075,24 @@ Editor::remove_gain_control_point (ArdourCanvas::Item*item, GdkEvent* /*event*/) /*NOTREACHED*/ } - // We shouldn't remove the first or last gain point - if (control_point->line().is_last_point(*control_point) || - control_point->line().is_first_point(*control_point)) { - return; + AutomationLine& line = control_point->line (); + if (dynamic_cast<AudioRegionGainLine*> (&line)) { + /* we shouldn't remove the first or last gain point in region gain lines */ + if (line.is_last_point(*control_point) || line.is_first_point(*control_point)) { + return false; + } } - control_point->line().remove_point (*control_point); + return true; } void -Editor::remove_control_point (ArdourCanvas::Item* item, GdkEvent* /*event*/) +Editor::remove_control_point (ArdourCanvas::Item* item) { + if (!can_remove_control_point (item)) { + return; + } + ControlPoint* control_point; if ((control_point = reinterpret_cast<ControlPoint *> (item->get_data ("control_point"))) == 0) { |