diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 33054f2ca9..cffc4afd1b 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -2558,9 +2558,27 @@ Editor::set_internal_edit (bool yn) if (yn) { mouse_select_button.set_image (*(manage (new Image (::get_icon("midi_tool_pencil"))))); + + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + MidiTimeAxisView* mtv = dynamic_cast (*i); + if (mtv) { + mtv->start_step_editing (); + } + } + } else { + mouse_select_button.set_image (*(manage (new Image (::get_xpm("tool_range.xpm"))))); + + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + MidiTimeAxisView* mtv = dynamic_cast (*i); + if (mtv) { + mtv->stop_step_editing (); + } + } } set_canvas_cursor (); + + } diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index d3af36ab92..9ad82707d7 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -2248,8 +2248,7 @@ MidiRegionView::add_note (uint8_t channel, uint8_t number, uint8_t velocity, /* potentially extend region to hold new note */ - - nframes64_t end_frame = _region->position() + beats_to_frames (new_note->length()); + nframes64_t end_frame = _region->position() + beats_to_frames (new_note->end_time()); nframes64_t region_end = _region->position() + _region->length() - 1; if (end_frame > region_end) { diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 33315cfaa6..3b7ec82807 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -559,44 +559,6 @@ MidiTimeAxisView::route_active_changed () } } -void -MidiTimeAxisView::build_rec_context_menu () -{ - using namespace Menu_Helpers; - - if (!is_track()) { - return; - } - - rec_context_menu = manage (new Menu); - rec_context_menu->set_name ("ArdourContextMenu"); - - MenuList& items = rec_context_menu->items(); - - items.push_back (CheckMenuElem (_("Step Edit"), - (mem_fun (*this, &MidiTimeAxisView::toggle_step_editing)))); - _step_edit_item = dynamic_cast(&items.back()); - _step_edit_item->set_active (midi_track()->step_editing()); -} - -void -MidiTimeAxisView::toggle_step_editing () -{ - if (!is_track()) { - return; - } - - bool yn = _step_edit_item->get_active(); - - if (yn) { - start_step_editing (); - } else { - stop_step_editing (); - } - - midi_track()->set_step_editing (yn); -} - void MidiTimeAxisView::start_step_editing () { @@ -611,12 +573,15 @@ MidiTimeAxisView::start_step_editing () } else { step_edit_region_view = 0; } + + midi_track()->set_step_editing (true); } void MidiTimeAxisView::stop_step_editing () { step_edit_connection.disconnect (); + midi_track()->set_step_editing (false); } bool diff --git a/gtk2_ardour/midi_time_axis.h b/gtk2_ardour/midi_time_axis.h index 850fb90e34..6635c3de41 100644 --- a/gtk2_ardour/midi_time_axis.h +++ b/gtk2_ardour/midi_time_axis.h @@ -88,6 +88,9 @@ class MidiTimeAxisView : public RouteTimeAxisView return _midi_patch_settings_changed; } + void start_step_editing (); + void stop_step_editing (); + private: sigc::signal _midi_patch_settings_changed; @@ -104,7 +107,6 @@ class MidiTimeAxisView : public RouteTimeAxisView void set_note_range(MidiStreamView::VisibleNoteRange range); void route_active_changed (); - void build_rec_context_menu (); void add_insert_to_subplugin_menu (ARDOUR::Processor *); @@ -132,9 +134,6 @@ class MidiTimeAxisView : public RouteTimeAxisView boost::shared_ptr step_edit_region; MidiRegionView* step_edit_region_view; - void toggle_step_editing (); - void start_step_editing (); - void stop_step_editing (); bool check_step_edit (); }; diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 6c42de5848..f46450a0bc 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -95,7 +95,6 @@ RouteUI::init () mute_menu = 0; solo_menu = 0; sends_menu = 0; - rec_context_menu = 0; ignore_toggle = false; wait_for_release = false; route_active_menu_item = 0; @@ -512,31 +511,9 @@ RouteUI::rec_enable_press(GdkEventButton* ev) return true; } - -void -RouteUI::show_rec_context_menu () -{ - if (!rec_context_menu) { - cerr << "build menu\n"; - build_rec_context_menu (); - } - - if (rec_context_menu) { - /* only do this if build_rec_context_menu() actually did something */ - cerr << "show menu\n"; - rec_context_menu->popup (1, gtk_get_current_event_time()); - } -} - bool RouteUI::rec_enable_release (GdkEventButton* ev) { - cerr << "release\n"; - if (Keyboard::is_context_menu_event(ev)) { - cerr << "context\n"; - show_rec_context_menu (); - } - return true; } diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index 17e5f77cf6..1ac87a0404 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -98,10 +98,6 @@ class RouteUI : public virtual AxisView Gtk::Menu* mute_menu; Gtk::Menu* solo_menu; Gtk::Menu* sends_menu; - Gtk::Menu* rec_context_menu; - - virtual void build_rec_context_menu () { } - void show_rec_context_menu (); XMLNode *xml_node; void ensure_xml_node (); diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index 267cacf787..876187656c 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -463,7 +463,7 @@ MidiTrack::no_roll (nframes_t nframes, sframes_t start_frame, sframes_t end_fram { int ret = Track::no_roll (nframes, start_frame, end_frame, state_changing, can_record, rec_monitors_input); - if (ret == 0 && _step_editing) { + if (ret == 0 && diskstream()->record_enabled() && _step_editing) { push_midi_input_to_step_edit_ringbuffer (nframes); }