switch to 5 new fade curves, taken from mixbus2 branch. make xfade context menus...
[ardour.git] / gtk2_ardour / editor_mouse.cc
index 0842403d7385ff84ff0e829ca91bfbea4437eb44..d7d1c342806d02168fc29b142b4737048052392d 100644 (file)
@@ -456,9 +456,9 @@ Editor::mouse_mode_toggled (MouseMode m)
        instant_save ();
 
        if (!internal_editing()) {
-               if (mouse_mode != MouseRange && _join_object_range_state == JOIN_OBJECT_RANGE_NONE) {
+               if (mouse_mode != MouseRange && mouse_mode != MouseGain && _join_object_range_state == JOIN_OBJECT_RANGE_NONE) {
 
-                       /* in all modes except range and joined object/range, hide the range selection,
+                       /* in all modes except range, gain and joined object/range, hide the range selection,
                           show the object (region) selection.
                        */
 
@@ -640,11 +640,12 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
                }
                break;
 
-
        case FadeInHandleItem:
        case FadeInItem:
        case FadeOutHandleItem:
        case FadeOutItem:
+       case StartCrossFadeItem:
+       case EndCrossFadeItem:
                if (doing_object_stuff() || (mouse_mode != MouseRange && mouse_mode != MouseObject)) {
                        set_selected_regionview_from_click (press, op);
                } else if (event->type == GDK_BUTTON_PRESS) {
@@ -655,7 +656,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
        case ControlPointItem:
                set_selected_track_as_side_effect (op);
                if (doing_object_stuff() || (mouse_mode != MouseRange && mouse_mode != MouseObject)) {
-                       set_selected_control_point_from_click (op, false);
+                       set_selected_control_point_from_click (press, op);
                }
                break;
 
@@ -824,7 +825,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                        AutomationTimeAxisView* atv = dynamic_cast<AutomationTimeAxisView*> (tvp.first);
                                        if (smart_mode_action->get_active() && atv) {
                                                /* smart "join" mode: drag automation */
-                                               _drags->set (new AutomationRangeDrag (this, atv->base_item(), selection->time), event, _cursors->up_down);
+                                               _drags->set (new AutomationRangeDrag (this, atv, selection->time), event, _cursors->up_down);
                                        } else {
                                                /* this was debated, but decided the more common action was to
                                                   make a new selection */
@@ -889,6 +890,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                default:
                        break;
                }
+               break;
 
        case MouseObject:
                switch (item_type) {
@@ -930,6 +932,14 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                return true;
                        }
 
+                       case StartCrossFadeItem:
+                               _drags->set (new CrossfadeEdgeDrag (this, reinterpret_cast<AudioRegionView*>(item->get_data("regionview")), item, true), event, 0);
+                               break;
+
+                       case EndCrossFadeItem:
+                               _drags->set (new CrossfadeEdgeDrag (this, reinterpret_cast<AudioRegionView*>(item->get_data("regionview")), item, false), event, 0);
+                               break;
+
                        case FeatureLineItem:
                        {
                                if (Keyboard::modifier_state_contains (event->button.state, Keyboard::TertiaryModifier)) {
@@ -1040,7 +1050,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                                /* if we're over an automation track, start a drag of its data */
                                                AutomationTimeAxisView* atv = dynamic_cast<AutomationTimeAxisView*> (tvp.first);
                                                if (atv) {
-                                                       _drags->set (new AutomationRangeDrag (this, atv->base_item(), selection->time), event, _cursors->up_down);
+                                                       _drags->set (new AutomationRangeDrag (this, atv, selection->time), event, _cursors->up_down);
                                                }
 
                                                /* if we're over a track and a region, and in the `object' part of a region,
@@ -1119,6 +1129,17 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        return true;
                        break;
 
+               case SelectionItem:
+               {
+                       AudioRegionView* arv = dynamic_cast<AudioRegionView *> (clicked_regionview);
+                       if (arv) {
+                               _drags->set (new AutomationRangeDrag (this, arv, selection->time), event, _cursors->up_down);
+                               _drags->start_grab (event);
+                       }
+                       return true;
+                       break;
+               }
+
                case AutomationLineItem:
                        _drags->set (new LineDrag (this, item), event);
                        break;
@@ -1286,7 +1307,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
                        break;
 
                case RegionItem:
-                       if (!dynamic_cast<MidiRegionView*> (clicked_regionview)) {
+                       if (!dynamic_cast<MidiRegionView*> (clicked_regionview) && !dynamic_cast<AutomationRegionView*> (clicked_regionview)) {
                                leave_internal_edit_mode = true;
                        }
                        break;
@@ -1459,6 +1480,14 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                popup_fade_context_menu (1, event->button.time, item, item_type);
                                break;
 
+                       case StartCrossFadeItem:
+                               popup_xfade_in_context_menu (1, event->button.time, item, item_type);
+                               break;
+
+                       case EndCrossFadeItem:
+                               popup_xfade_out_context_menu (1, event->button.time, item, item_type);
+                               break;
+
                        case StreamItem:
                                popup_track_context_menu (1, event->button.time, item_type, false);
                                break;
@@ -1474,7 +1503,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                        case SelectionItem:
                                popup_track_context_menu (1, event->button.time, item_type, true);
                                break;
-
+                               
                        case AutomationTrackItem:
                                popup_track_context_menu (1, event->button.time, item_type, false);
                                break;