diff options
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 409 |
1 files changed, 205 insertions, 204 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 5210515541..1b0f5bb229 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -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; |