make step edit cursor follow zoom (and change its color a bit)
[ardour.git] / gtk2_ardour / editor_drag.cc
index 19213498939deafed1d8a3b451d81deb1c3356bd..98ceca5b8ae0330201bc8ba703e2a7690dda3001 100644 (file)
@@ -2110,12 +2110,24 @@ CursorDrag::start_grab (GdkEvent* event, Gdk::Cursor* c)
        if (_cursor == _editor->playhead_cursor) {
                _editor->_dragging_playhead = true;
 
-               if (_editor->session() && _was_rolling && _stop) {
-                       _editor->session()->request_stop ();
-               }
+               Session* s = _editor->session ();
+
+               if (s) {
+                       if (_was_rolling && _stop) {
+                               s->request_stop ();
+                       }
 
-               if (_editor->session() && _editor->session()->is_auditioning()) {
-                       _editor->session()->cancel_audition ();
+                       if (s->is_auditioning()) {
+                               s->cancel_audition ();
+                       }
+
+                       s->request_suspend_timecode_transmission ();
+
+                       if (s->timecode_transmission_suspended ()) {
+                               nframes64_t const f = _editor->playhead_cursor->current_frame;
+                               s->send_mmc_locate (f);
+                               s->send_full_time_code (f);
+                       }
                }
        }
 
@@ -2137,10 +2149,11 @@ CursorDrag::motion (GdkEvent* event, bool)
 
        _editor->show_verbose_time_cursor (_cursor->current_frame, 10);
 
-       if (_editor->session() && _item == &_editor->playhead_cursor->canvas_item) {
+       Session* s = _editor->session ();
+       if (s && _item == &_editor->playhead_cursor->canvas_item && s->timecode_transmission_suspended ()) {
                nframes64_t const f = _editor->playhead_cursor->current_frame;
-               _editor->session()->send_mmc_locate (f);
-               _editor->session()->send_full_time_code (f);
+               s->send_mmc_locate (f);
+               s->send_full_time_code (f);
        }
        
 
@@ -2162,9 +2175,11 @@ CursorDrag::finished (GdkEvent* event, bool movement_occurred)
        motion (event, false);
 
        if (_item == &_editor->playhead_cursor->canvas_item) {
-               if (_editor->session()) {
-                       _editor->session()->request_locate (_editor->playhead_cursor->current_frame, _was_rolling);
+               Session* s = _editor->session ();
+               if (s) {
+                       s->request_locate (_editor->playhead_cursor->current_frame, _was_rolling);
                        _editor->_pending_locate_request = true;
+                       s->request_resume_timecode_transmission ();
                }
        }
 }
@@ -2172,7 +2187,11 @@ CursorDrag::finished (GdkEvent* event, bool movement_occurred)
 void
 CursorDrag::aborted ()
 {
-       _editor->_dragging_playhead = false;
+       if (_editor->_dragging_playhead) {
+               _editor->session()->request_resume_timecode_transmission ();
+               _editor->_dragging_playhead = false;
+       }
+       
        _cursor->set_position (adjusted_frame (grab_frame (), 0, false));
 }
 
@@ -2813,7 +2832,7 @@ ControlPointDrag::finished (GdkEvent* event, bool movement_occurred)
 
                /* just a click */
 
-               if ((event->type == GDK_BUTTON_RELEASE) && (event->button.button == 1) && Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
+               if (Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
                        _editor->reset_point_selection ();
                }
 
@@ -3088,9 +3107,9 @@ RubberbandSelectDrag::finished (GdkEvent* event, bool movement_occurred)
                _editor->begin_reversible_command (_("rubberband selection"));
 
                if (grab_frame() < last_pointer_frame()) {
-                       committed = _editor->select_all_within (grab_frame(), last_pointer_frame() - 1, y1, y2, _editor->track_views, op);
+                       committed = _editor->select_all_within (grab_frame(), last_pointer_frame() - 1, y1, y2, _editor->track_views, op, false);
                } else {
-                       committed = _editor->select_all_within (last_pointer_frame(), grab_frame() - 1, y1, y2, _editor->track_views, op);
+                       committed = _editor->select_all_within (last_pointer_frame(), grab_frame() - 1, y1, y2, _editor->track_views, op, false);
                }
 
                if (!committed) {
@@ -3485,7 +3504,7 @@ RangeMarkerBarDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
        Gdk::Cursor* cursor = 0;
 
        if (!_editor->temp_location) {
-               _editor->temp_location = new Location;
+               _editor->temp_location = new Location (*_editor->session());
        }
 
        switch (_operation) {
@@ -3606,7 +3625,10 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred)
                                flags = Location::IsRangeMarker;
                                _editor->range_bar_drag_rect->hide();
                        }
-                       newloc = new Location(_editor->temp_location->start(), _editor->temp_location->end(), rangename, (Location::Flags) flags);
+                       newloc = new Location (
+                               *_editor->session(), _editor->temp_location->start(), _editor->temp_location->end(), rangename, (Location::Flags) flags
+                               );
+                       
                        _editor->session()->locations()->add (newloc, true);
                        XMLNode &after = _editor->session()->locations()->get_state();
                        _editor->session()->add_command(new MementoCommand<Locations>(*(_editor->session()->locations()), &before, &after));
@@ -3640,7 +3662,7 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred)
                        switch (_editor->mouse_mode) {
                        case MouseObject:
                                /* find the two markers on either side and then make the selection from it */
-                               _editor->select_all_within (start, end, 0.0f, FLT_MAX, _editor->track_views, Selection::Set);
+                               _editor->select_all_within (start, end, 0.0f, FLT_MAX, _editor->track_views, Selection::Set, false);
                                break;
 
                        case MouseRange:
@@ -3853,7 +3875,7 @@ NoteDrag::motion (GdkEvent*, bool)
                region->move_selection (dx, dy);
 
                 char buf[12];
-                snprintf (buf, sizeof (buf), "%s (%d)", Evoral::midi_note_name (cnote->note()->note()).c_str(),
+                snprintf (buf, sizeof (buf), "%s (%d)", Evoral::midi_note_name (cnote->note()->note() + drag_delta_note).c_str(),
                           (int) floor ((cnote->note()->note() + drag_delta_note)));
                _editor->show_verbose_canvas_cursor_with (buf);
         }