summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_mouse.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-07-17 20:10:31 +0000
committerCarl Hetherington <carl@carlh.net>2011-07-17 20:10:31 +0000
commit982bfd08db00143df984fa168de3754f7f1e3e86 (patch)
tree42217b87d524ba1b9859b066f0563313619d47a4 /gtk2_ardour/editor_mouse.cc
parent8786d5c9c21322e0cd08488b31ee3b4bed2c68d6 (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.cc32
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) {