better way to "engage" step edit, and extend region correctly as needed
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 3 Sep 2009 14:50:21 +0000 (14:50 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 3 Sep 2009 14:50:21 +0000 (14:50 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@5630 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor_mouse.cc
gtk2_ardour/midi_region_view.cc
gtk2_ardour/midi_time_axis.cc
gtk2_ardour/midi_time_axis.h
gtk2_ardour/route_ui.cc
gtk2_ardour/route_ui.h
libs/ardour/midi_track.cc

index 33054f2ca9cf64eaeb65763f0b9de5cf6091599d..cffc4afd1b3996a00d0244dafd7556560247e702 100644 (file)
@@ -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<MidiTimeAxisView*> (*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<MidiTimeAxisView*> (*i);
+                       if (mtv) {
+                               mtv->stop_step_editing ();
+                       }
+               }
        }
 
        set_canvas_cursor ();
+
+
 }
index d3af36ab925c727f770439522e76c416f9273df8..9ad82707d71ca8b156150ba234dd62b1adfb0e95 100644 (file)
@@ -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) {
index 33315cfaa61ec012dbad6a5a6564c864b3c9a924..3b7ec82807116fce6152265035c2811033ce676a 100644 (file)
@@ -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<CheckMenuItem*>(&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
index 850fb90e3416dfe392b9fab66f2702f3abaabc71..6635c3de41060137dda0f2e9d4b5961a4c5aeddc 100644 (file)
@@ -88,6 +88,9 @@ class MidiTimeAxisView : public RouteTimeAxisView
                return _midi_patch_settings_changed;
        }
        
+       void start_step_editing ();
+       void stop_step_editing ();
+
   private:
        sigc::signal<void, std::string, std::string>  _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<ARDOUR::Region> step_edit_region;
        MidiRegionView* step_edit_region_view;
 
-       void toggle_step_editing ();
-       void start_step_editing ();
-       void stop_step_editing ();
        bool check_step_edit ();
 };
 
index 6c42de58480f2108cf3a5f7104d0bbc99ddfc126..f46450a0bc8b45d8056ead43629d27a3fc9f34d2 100644 (file)
@@ -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;
 }
 
index 17e5f77cf63302b1e116854ec70be87630bf2a32..1ac87a04045eb16da2ba2632ace9c859607ea439 100644 (file)
@@ -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 ();
index 267cacf787bf1b57277eb700fa70d3974372af3a..876187656c7ba63bcaab2c9fba6e72f4a02e7120 100644 (file)
@@ -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);
        }