only the last step-edited note remains selected after each note addition; waf install...
[ardour.git] / gtk2_ardour / route_ui.cc
index 6e9f5a73d1912811bf289a4465cf00f225eca5cc..c56bde907d08e09afcd1d187f19278dab891235b 100644 (file)
@@ -589,23 +589,32 @@ RouteUI::build_record_menu ()
         /* no rec-button context menu for non-MIDI tracks 
          */
 
-        if (!is_midi_track()) {
-                return;
-        }
-        
-        record_menu = new Menu;
-        record_menu->set_name ("ArdourContextMenu");
-
-        using namespace Menu_Helpers;
-       MenuList& items = record_menu->items();
+        if (is_midi_track()) {
+                record_menu = new Menu;
+                record_menu->set_name ("ArdourContextMenu");
+                
+                using namespace Menu_Helpers;
+                MenuList& items = record_menu->items();
+                
+                items.push_back (CheckMenuElem (_("Step Edit"), sigc::mem_fun (*this, &RouteUI::toggle_step_edit)));
+                step_edit_item = dynamic_cast<CheckMenuItem*> (&items.back());
+
+                if (_route->record_enabled()) {
+                        step_edit_item->set_sensitive (false);
+                }
 
-        items.push_back (CheckMenuElem (_("Step Edit"), sigc::mem_fun (*this, &RouteUI::toggle_step_edit)));
-        step_edit_item = dynamic_cast<CheckMenuItem*> (&items.back());
+                step_edit_item->set_active (midi_track()->step_editing());
+        }
 }
 
 void
 RouteUI::toggle_step_edit ()
 {
+        if (!is_midi_track() || _route->record_enabled()) {
+                return;
+        }
+
+        midi_track()->set_step_editing (step_edit_item->get_active());
 }
 
 void
@@ -615,10 +624,24 @@ RouteUI::step_edit_changed (bool yn)
                 if (rec_enable_button) {
                         rec_enable_button->set_visual_state (3);
                 } 
+
+                start_step_editing ();
+
+                if (step_edit_item) {
+                        step_edit_item->set_active (true);
+                }
+
         } else {
+
                 if (rec_enable_button) {
                         rec_enable_button->set_visual_state (0);
                 } 
+
+                stop_step_editing ();
+
+                if (step_edit_item) {
+                        step_edit_item->set_active (false);
+                }
         }
 }
 
@@ -1020,9 +1043,18 @@ RouteUI::update_rec_display ()
                         
                 }
 
+                if (step_edit_item) {
+                        step_edit_item->set_sensitive (false);
+                }
+
        } else {
                rec_enable_button->set_visual_state (0);
+
+                if (step_edit_item) {
+                        step_edit_item->set_sensitive (true);
+                }
        }
+        
 
        check_rec_enable_sensitivity ();
 }
@@ -1476,6 +1508,12 @@ RouteUI::midi_track() const
        return boost::dynamic_pointer_cast<MidiTrack>(_route);
 }
 
+bool
+RouteUI::has_audio_outputs () const
+{
+       return (_route->n_outputs().n_audio() > 0);
+}
+
 string
 RouteUI::name() const
 {