start to make mouse modes better when in note edit mode by allowing mouse ops on non-MIDI objects to proceed normally. not finished
git-svn-id: svn://localhost/ardour2/branches/3.0@6115 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
a0dfdef24a
commit
9931171b69
@ -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) {
|
||||
assert (_drag == 0);
|
||||
_drag = new NoteResizeDrag (this, item);
|
||||
_drag->start_grab (event);
|
||||
return true;
|
||||
} else if (mouse_mode == MouseObject) {
|
||||
assert (_drag == 0);
|
||||
_drag = new NoteDrag (this, item);
|
||||
_drag->start_grab (event);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
switch (mouse_mode) {
|
||||
case MouseRange:
|
||||
switch (item_type) {
|
||||
case StartSelectionTrimItem:
|
||||
|
||||
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 SelectionDrag (this, item, SelectionDrag::SelectionStartTrim);
|
||||
_drag = new SelectionDrag (this, item, SelectionDrag::SelectionMove);
|
||||
_drag->start_grab (event);
|
||||
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 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;
|
||||
|
||||
default:
|
||||
} 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);
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
|
||||
case MouseObject:
|
||||
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 SelectionDrag (this, item, SelectionDrag::CreateSelection);
|
||||
_drag->start_grab (event);
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
|
||||
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 RubberbandSelectDrag (this, item);
|
||||
_drag = new NoteDrag (this, item);
|
||||
_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;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)) &&
|
||||
event->type == GDK_BUTTON_PRESS) {
|
||||
|
||||
assert (_drag == 0);
|
||||
_drag = new RubberbandSelectDrag (this, item);
|
||||
_drag->start_grab (event);
|
||||
|
||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||
|
||||
case MouseGain:
|
||||
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:
|
||||
/* 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 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;
|
||||
|
||||
case ControlPointItem:
|
||||
assert (_drag == 0);
|
||||
_drag = new ControlPointDrag (this, item);
|
||||
_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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
||||
case MouseAudition:
|
||||
_drag = new ScrubDrag (this, item);
|
||||
case GainLineItem:
|
||||
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);
|
||||
return true;
|
||||
|
||||
case ControlPointItem:
|
||||
assert (_drag == 0);
|
||||
_drag = new ControlPointDrag (this, item);
|
||||
_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);
|
||||
break;
|
||||
|
||||
case AutomationLineItem:
|
||||
assert (_drag == 0);
|
||||
_drag = new LineDrag (this, item);
|
||||
_drag->start_grab (event);
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user