start to make mouse modes better when in note edit mode by allowing mouse ops on...
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 18 Nov 2009 13:24:43 +0000 (13:24 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 18 Nov 2009 13:24:43 +0000 (13:24 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6115 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor_mouse.cc

index 52105155417dd9fd90336da1f529f40fed3261af..1b0f5bb229d45745a4fad2d802838594c62b5db2 100644 (file)
@@ -601,278 +601,279 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                break;
        }
 
-       if (internal_editing()) {
+       switch (mouse_mode) {
+       case MouseRange:
                switch (item_type) {
-               case StreamItem:
+               case StartSelectionTrimItem:
                        assert (_drag == 0);
-                       _drag = new RegionCreateDrag (this, item, clicked_axisview);
+                       _drag = new SelectionDrag (this, item, SelectionDrag::SelectionStartTrim);
                        _drag->start_grab (event);
-                       return true;
-               case NoteItem:
-                       /* Note: we don't get here if not in internal_editing() mode */
-                       if (mouse_mode == MouseTimeFX) {
+                       break;
+
+               case EndSelectionTrimItem:
+                       assert (_drag == 0);
+                       _drag = new SelectionDrag (this, item, SelectionDrag::SelectionEndTrim);
+                       _drag->start_grab (event);
+                       break;
+
+               case SelectionItem:
+                       if (Keyboard::modifier_state_contains
+                           (event->button.state, Keyboard::ModifierMask(Keyboard::SecondaryModifier))) {
+                               // contains and not equals because I can't use alt as a modifier alone.
+                               start_selection_grab (item, event);
+                       } else if (Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
+                               /* grab selection for moving */
                                assert (_drag == 0);
-                               _drag = new NoteResizeDrag (this, item);
+                               _drag = new SelectionDrag (this, item, SelectionDrag::SelectionMove);
                                _drag->start_grab (event);
-                               return true;
-                       } else if (mouse_mode == MouseObject) {
+                       } else {
+                               /* this was debated, but decided the more common action was to
+                                  make a new selection */
                                assert (_drag == 0);
-                               _drag = new NoteDrag (this, item);
+                               _drag = new SelectionDrag (this, item, SelectionDrag::CreateSelection);
                                _drag->start_grab (event);
-                               return true;
-                       } else {
-                               return false;
                        }
                        break;
+
                default:
-                       return true;
+                       assert (_drag == 0);
+                       _drag = new SelectionDrag (this, item, SelectionDrag::CreateSelection);
+                       _drag->start_grab (event);
                }
-       } else {
-               switch (mouse_mode) {
-               case MouseRange:
-                       switch (item_type) {
-                       case StartSelectionTrimItem:
-                               assert (_drag == 0);
-                               _drag = new SelectionDrag (this, item, SelectionDrag::SelectionStartTrim);
-                               _drag->start_grab (event);
-                               break;
+               return true;
+               break;
 
-                       case EndSelectionTrimItem:
+       case MouseObject:
+               switch (item_type) {
+               case NoteItem:
+                       if (internal_editing()) {
+                               /* Note: we don't get here if not in internal_editing() mode */
                                assert (_drag == 0);
-                               _drag = new SelectionDrag (this, item, SelectionDrag::SelectionEndTrim);
+                               _drag = new NoteDrag (this, item);
                                _drag->start_grab (event);
-                               break;
+                               return true;
+                       }
+                       break;
+                       
+               default:
+                       break;
+               }
 
-                       case SelectionItem:
-                               if (Keyboard::modifier_state_contains
-                                   (event->button.state, Keyboard::ModifierMask(Keyboard::SecondaryModifier))) {
-                                       // contains and not equals because I can't use alt as a modifier alone.
-                                       start_selection_grab (item, event);
-                               } else if (Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
-                                       /* grab selection for moving */
-                                       assert (_drag == 0);
-                                       _drag = new SelectionDrag (this, item, SelectionDrag::SelectionMove);
-                                       _drag->start_grab (event);
-                               } else {
-                                       /* this was debated, but decided the more common action was to
-                                          make a new selection */
-                                       assert (_drag == 0);
-                                       _drag = new SelectionDrag (this, item, SelectionDrag::CreateSelection);
-                                       _drag->start_grab (event);
-                               }
-                               break;
+               if (Keyboard::modifier_state_contains (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)) &&
+                   event->type == GDK_BUTTON_PRESS) {
 
-                       default:
+                       assert (_drag == 0);
+                       _drag = new RubberbandSelectDrag (this, item);
+                       _drag->start_grab (event);
+
+               } else if (event->type == GDK_BUTTON_PRESS) {
+
+                       switch (item_type) {
+                       case FadeInHandleItem:
+                       {
                                assert (_drag == 0);
-                               _drag = new SelectionDrag (this, item, SelectionDrag::CreateSelection);
+                               RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
+                               _drag = new FadeInDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), s);
                                _drag->start_grab (event);
+                               return true;
                        }
-                       return true;
-                       break;
-
-               case MouseObject:
-                       if (Keyboard::modifier_state_contains (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)) &&
-                           event->type == GDK_BUTTON_PRESS) {
 
+                       case FadeOutHandleItem:
+                       {
                                assert (_drag == 0);
-                               _drag = new RubberbandSelectDrag (this, item);
+                               RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
+                               _drag = new FadeOutDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), s);
                                _drag->start_grab (event);
-
-                       } else if (event->type == GDK_BUTTON_PRESS) {
-
-                               switch (item_type) {
-                               case FadeInHandleItem:
-                               {
-                                       assert (_drag == 0);
-                                       RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
-                                       _drag = new FadeInDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), s);
-                                       _drag->start_grab (event);
-                                       return true;
-                               }
-
-                               case FadeOutHandleItem:
-                               {
-                                       assert (_drag == 0);
-                                       RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
-                                       _drag = new FadeOutDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), s);
-                                       _drag->start_grab (event);
-                                       return true;
-                               }
-
-                               case RegionItem:
-                                       if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) {
-                                               start_region_copy_grab (item, event, clicked_regionview);
-                                       } else if (Keyboard::the_keyboard().key_is_down (GDK_b)) {
-                                               start_region_brush_grab (item, event, clicked_regionview);
-                                       } else {
-                                               start_region_grab (item, event, clicked_regionview);
-                                       }
-                                       break;
-
-                               case RegionViewNameHighlight:
-                               {
-                                       assert (_drag == 0);
-                                       RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
-                                       _drag = new TrimDrag (this, item, clicked_regionview, s.by_layer());
-                                       _drag->start_grab (event);
-                                       return true;
-                                       break;
-                               }
-
-                               case RegionViewName:
-                               {
-                                       /* rename happens on edit clicks */
-                                       assert (_drag == 0);
-                                       RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
-                                       _drag = new TrimDrag (this, clicked_regionview->get_name_highlight(), clicked_regionview, s.by_layer());
-                                       _drag->start_grab (event);
-                                       return true;
-                                       break;
-                               }
-
-                               case ControlPointItem:
-                                       assert (_drag == 0);
-                                       _drag = new ControlPointDrag (this, item);
-                                       _drag->start_grab (event);
-                                       return true;
-                                       break;
-
-                               case AutomationLineItem:
-                                       assert (_drag == 0);
-                                       _drag = new LineDrag (this, item);
-                                       _drag->start_grab (event);
-                                       return true;
-                                       break;
-
-                               case StreamItem:
-                               case AutomationTrackItem:
-                                       assert (_drag == 0);
-                                       _drag = new RubberbandSelectDrag (this, item);
-                                       _drag->start_grab (event);
-                                       break;
-
-#ifdef WITH_CMT
-                               case ImageFrameHandleStartItem:
-                                       imageframe_start_handle_op(item, event) ;
-                                       return(true) ;
-                                       break ;
-                               case ImageFrameHandleEndItem:
-                                       imageframe_end_handle_op(item, event) ;
-                                       return(true) ;
-                                       break ;
-                               case MarkerViewHandleStartItem:
-                                       markerview_item_start_handle_op(item, event) ;
-                                       return(true) ;
-                                       break ;
-                               case MarkerViewHandleEndItem:
-                                       markerview_item_end_handle_op(item, event) ;
-                                       return(true) ;
-                                       break ;
-                               case MarkerViewItem:
-                                       start_markerview_grab(item, event) ;
-                                       break ;
-                               case ImageFrameItem:
-                                       start_imageframe_grab(item, event) ;
-                                       break ;
-#endif
-
-                               case MarkerBarItem:
-
-                                       break;
-
-                               default:
-                                       break;
-                               }
+                               return true;
                        }
-                       return true;
-                       break;
 
-               case MouseGain:
-                       switch (item_type) {
                        case RegionItem:
-                               /* start a grab so that if we finish after moving
-                                  we can tell what happened.
-                               */
-                               assert (_drag == 0);
-                               _drag = new RegionGainDrag (this, item);
-                               _drag->start_grab (event, current_canvas_cursor);
+                               if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) {
+                                       start_region_copy_grab (item, event, clicked_regionview);
+                               } else if (Keyboard::the_keyboard().key_is_down (GDK_b)) {
+                                       start_region_brush_grab (item, event, clicked_regionview);
+                               } else {
+                                       start_region_grab (item, event, clicked_regionview);
+                               }
                                break;
 
-                       case GainLineItem:
+                       case RegionViewNameHighlight:
+                       {
                                assert (_drag == 0);
-                               _drag = new LineDrag (this, item);
+                               RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
+                               _drag = new TrimDrag (this, item, clicked_regionview, s.by_layer());
                                _drag->start_grab (event);
                                return true;
+                               break;
+                       }
 
-                       case ControlPointItem:
+                       case RegionViewName:
+                       {
+                               /* rename happens on edit clicks */
                                assert (_drag == 0);
-                               _drag = new ControlPointDrag (this, item);
+                               RegionSelection s = get_equivalent_regions (selection->regions, RouteGroup::Edit);
+                               _drag = new TrimDrag (this, clicked_regionview->get_name_highlight(), clicked_regionview, s.by_layer());
                                _drag->start_grab (event);
                                return true;
                                break;
-
-                       default:
-                               break;
                        }
-                       return true;
-                       break;
 
-                       switch (item_type) {
                        case ControlPointItem:
                                assert (_drag == 0);
                                _drag = new ControlPointDrag (this, item);
                                _drag->start_grab (event);
+                               return true;
                                break;
 
                        case AutomationLineItem:
                                assert (_drag == 0);
                                _drag = new LineDrag (this, item);
                                _drag->start_grab (event);
+                               return true;
                                break;
 
-                       case RegionItem:
-                               // XXX need automation mode to identify which
-                               // line to use
-                               // start_line_grab_from_regionview (item, event);
+                       case StreamItem:
+                               if (internal_editing()) {
+                                       assert (_drag == 0);
+                                       _drag = new RegionCreateDrag (this, item, clicked_axisview);
+                                       _drag->start_grab (event);
+                                       return true;
+                               }
+                               /* fallthru */
+                       case AutomationTrackItem:
+                               assert (_drag == 0);
+                               _drag = new RubberbandSelectDrag (this, item);
+                               _drag->start_grab (event);
+                               break;
+
+#ifdef WITH_CMT
+                       case ImageFrameHandleStartItem:
+                               imageframe_start_handle_op(item, event) ;
+                               return(true) ;
+                               break ;
+                       case ImageFrameHandleEndItem:
+                               imageframe_end_handle_op(item, event) ;
+                               return(true) ;
+                               break ;
+                       case MarkerViewHandleStartItem:
+                               markerview_item_start_handle_op(item, event) ;
+                               return(true) ;
+                               break ;
+                       case MarkerViewHandleEndItem:
+                               markerview_item_end_handle_op(item, event) ;
+                               return(true) ;
+                               break ;
+                       case MarkerViewItem:
+                               start_markerview_grab(item, event) ;
+                               break ;
+                       case ImageFrameItem:
+                               start_imageframe_grab(item, event) ;
+                               break ;
+#endif
+
+                       case MarkerBarItem:
+
                                break;
 
                        default:
                                break;
                        }
-                       return true;
+               }
+               return true;
+               break;
+
+       case MouseGain:
+               switch (item_type) {
+               case RegionItem:
+                       /* start a grab so that if we finish after moving
+                          we can tell what happened.
+                       */
+                       assert (_drag == 0);
+                       _drag = new RegionGainDrag (this, item);
+                       _drag->start_grab (event, current_canvas_cursor);
                        break;
 
-               case MouseZoom:
-                       if (event->type == GDK_BUTTON_PRESS) {
-                               assert (_drag == 0);
-                               _drag = new MouseZoomDrag (this, item);
-                               _drag->start_grab (event);
-                       }
+               case GainLineItem:
+                       assert (_drag == 0);
+                       _drag = new LineDrag (this, item);
+                       _drag->start_grab (event);
+                       return true;
 
+               case ControlPointItem:
+                       assert (_drag == 0);
+                       _drag = new ControlPointDrag (this, item);
+                       _drag->start_grab (event);
                        return true;
                        break;
 
-               case MouseTimeFX:
-                       if (item_type == RegionItem) {
-                               assert (_drag == 0);
-                               _drag = new TimeFXDrag (this, item, clicked_regionview, selection->regions.by_layer());
-                               _drag->start_grab (event);
-                       }
+               default:
+                       break;
+               }
+               return true;
+               break;
+
+               switch (item_type) {
+               case ControlPointItem:
+                       assert (_drag == 0);
+                       _drag = new ControlPointDrag (this, item);
+                       _drag->start_grab (event);
                        break;
 
-               case MouseAudition:
-                       _drag = new ScrubDrag (this, item);
+               case AutomationLineItem:
+                       assert (_drag == 0);
+                       _drag = new LineDrag (this, item);
                        _drag->start_grab (event);
-                       scrub_reversals = 0;
-                       scrub_reverse_distance = 0;
-                       last_scrub_x = event->button.x;
-                       scrubbing_direction = 0;
-                       track_canvas->get_window()->set_cursor (*transparent_cursor);
+                       break;
+
+               case RegionItem:
+                       // XXX need automation mode to identify which
+                       // line to use
+                       // start_line_grab_from_regionview (item, event);
                        break;
 
                default:
                        break;
                }
+               return true;
+               break;
+
+       case MouseZoom:
+               if (event->type == GDK_BUTTON_PRESS) {
+                       assert (_drag == 0);
+                       _drag = new MouseZoomDrag (this, item);
+                       _drag->start_grab (event);
+               }
+
+               return true;
+               break;
+
+       case MouseTimeFX:
+               if (internal_editing() && item_type == NoteItem) {
+                       assert (_drag == 0);
+                       _drag = new NoteResizeDrag (this, item);
+                       _drag->start_grab (event);
+                       return true;
+               } else if (!internal_editing() && item_type == RegionItem) {
+                       assert (_drag == 0);
+                       _drag = new TimeFXDrag (this, item, clicked_regionview, selection->regions.by_layer());
+                       _drag->start_grab (event);
+                       return true;
+               }
+               break;
+
+       case MouseAudition:
+               _drag = new ScrubDrag (this, item);
+               _drag->start_grab (event);
+               scrub_reversals = 0;
+               scrub_reverse_distance = 0;
+               last_scrub_x = event->button.x;
+               scrubbing_direction = 0;
+               track_canvas->get_window()->set_cursor (*transparent_cursor);
+               return true;
+               break;
+
+       default:
+               break;
        }
 
        return false;