_session->request_transport_speed (0.0, true);
}
- if (mouse_mode == m) {
- /* switch to the same mode, act like a toggle and switch back to previous mode */
- Glib::RefPtr<Action> pact = get_mouse_mode_action(previous_mouse_mode);
- Glib::RefPtr<ToggleAction> ptact = Glib::RefPtr<ToggleAction>::cast_dynamic(pact);
- ptact->set_active(true);
- return;
- }
-
const bool was_internal = internal_editing();
- previous_mouse_mode = mouse_mode;
mouse_mode = m;
+ /* Switch snap type/mode if we're moving to/from an internal tool. Note
+ this must toggle the actions and not call set_snap_*() directly,
+ otherwise things get out of sync and the combo box stops working. */
if (!was_internal && internal_editing()) {
- /* switched to internal, switch to internal snap settings */
- set_snap_to(internal_snap_type);
- set_snap_mode(internal_snap_mode);
+ snap_type_action(internal_snap_type)->set_active(true);
+ snap_mode_action(internal_snap_mode)->set_active(true);
} else if (was_internal && !internal_editing()) {
- /* switched out of internal, switch to non-internal snap settings */
- set_snap_to(pre_internal_snap_type);
- set_snap_mode(pre_internal_snap_mode);
+ snap_type_action(pre_internal_snap_type)->set_active(true);
+ snap_mode_action(pre_internal_snap_mode)->set_active(true);
}
instant_save ();
update_time_selection_display ();
+ update_all_enter_cursors ();
+
MouseModeChanged (); /* EMIT SIGNAL */
}
case RegionViewName:
case StreamItem:
case AutomationTrackItem:
- _drags->set (new RegionCutDrag (this, item, canvas_event_sample (event)), event, current_canvas_cursor);
+ _drags->set (new RegionCutDrag (this, item, canvas_event_sample (event)), event, get_canvas_cursor());
return true;
break;
default:
/* Existing note: allow trimming/motion */
if ((note = reinterpret_cast<NoteBase*> (item->get_data ("notebase")))) {
if (note->big_enough_to_trim() && note->mouse_near_ends()) {
- _drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
+ _drags->set (new NoteResizeDrag (this, item), event, get_canvas_cursor());
} else {
_drags->set (new NoteDrag (this, item), event);
}
if ((note = reinterpret_cast<NoteBase*>(item->get_data ("notebase")))) {
if (note->big_enough_to_trim() && note->mouse_near_ends()) {
/* Note is big and pointer is near the end, trim */
- _drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
+ _drags->set (new NoteResizeDrag (this, item), event, get_canvas_cursor());
} else {
/* Drag note */
_drags->set (new NoteDrag (this, item), event);
/* resize-drag notes */
if ((note = reinterpret_cast<NoteBase*>(item->get_data ("notebase")))) {
if (note->big_enough_to_trim()) {
- _drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
+ _drags->set (new NoteResizeDrag (this, item), event, get_canvas_cursor());
}
}
return true;
break;
case MouseAudition:
- _drags->set (new ScrubDrag (this, item), event);
+ _drags->set (new ScrubDrag (this, item), event, _cursors->transparent);
scrub_reversals = 0;
scrub_reverse_distance = 0;
last_scrub_x = event->button.x;
scrubbing_direction = 0;
- push_canvas_cursor (_cursors->transparent);
return true;
break;
return false;
}
- pre_press_cursor = current_canvas_cursor;
-
_track_canvas->grab_focus();
if (_session && _session->actively_recording()) {
}
//not rolling, range mode click + join_play_range : locate the PH here
- if ( !_drags->active () && !_session->transport_rolling() && ( effective_mouse_mode() == MouseRange ) && Config->get_follow_edits() ) {
+ if ( !_drags->active () && !_session->transport_rolling() && ( effective_mouse_mode() == MouseRange ) && ARDOUR_UI::config()->get_follow_edits() ) {
framepos_t where = canvas_event_sample (event);
snap_to(where);
_session->request_locate (where, false);
framepos_t where = canvas_event_sample (event);
AutomationTimeAxisView* atv = 0;
- if (pre_press_cursor) {
- set_canvas_cursor (pre_press_cursor);
- pre_press_cursor = 0;
- }
+ _press_cursor_ctx.reset();
/* no action if we're recording */
popup_control_point_context_menu (item, event);
break;
+ case NoteItem:
+ if (internal_editing()) {
+ popup_note_context_menu (item, event);
+ }
+ break;
+
default:
break;
}
break;
case MouseAudition:
- pop_canvas_cursor ();
if (scrubbing_direction == 0) {
/* no drag, just a click */
switch (item_type) {
* (e.g. the actual entered regionview)
*/
- choose_canvas_cursor_on_entry (&event->crossing, item_type);
+ choose_canvas_cursor_on_entry (item_type);
switch (item_type) {
case ControlPointItem:
bool is_start;
bool ret = true;
- reset_canvas_cursor ();
+ _enter_stack.pop_back();
switch (item_type) {
case ControlPointItem:
}
void
-Editor::edit_notes (TimeAxisViewItem& tavi)
+Editor::edit_notes (MidiRegionView* mrv)
{
- MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(&tavi);
-
- if (!mrv) {
- return;
- }
-
MidiRegionView::Selection const & s = mrv->selection();
if (s.empty ()) {
return;
}
- EditNoteDialog* d = new EditNoteDialog (&(*s.begin())->region_view(), s);
+ EditNoteDialog* d = new EditNoteDialog (mrv, s);
d->show_all ();
ensure_float (*d);
double const c = item_space.y / entered_regionview->height();
_join_object_range_state = c <= 0.5 ? JOIN_OBJECT_RANGE_RANGE : JOIN_OBJECT_RANGE_OBJECT;
-
- if (_join_object_range_state != old) {
- set_canvas_cursor (which_track_cursor ());
+
+ Editor::EnterContext* ctx = get_enter_context(RegionItem);
+ if (_join_object_range_state != old && ctx) {
+ ctx->cursor_ctx->change(which_track_cursor());
}
} else if (entered_track) {
entered_route_view->canvas_display()->canvas_to_item (cx, cy);
double track_height = entered_route_view->view()->child_height();
- if (Config->get_show_name_highlight()) {
+ if (ARDOUR_UI::config()->get_show_name_highlight()) {
track_height -= TimeAxisViewItem::NAME_HIGHLIGHT_SIZE;
}
double const c = cy / track_height;
_join_object_range_state = JOIN_OBJECT_RANGE_OBJECT;
}
- if (_join_object_range_state != old) {
- set_canvas_cursor (which_track_cursor ());
+ Editor::EnterContext* ctx = get_enter_context(StreamItem);
+ if (_join_object_range_state != old && ctx) {
+ ctx->cursor_ctx->change(which_track_cursor());
}
}
}