properly track step edit status in editor & mixer windows
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 3 Aug 2010 21:50:15 +0000 (21:50 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 3 Aug 2010 21:50:15 +0000 (21:50 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7533 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/midi_time_axis.cc
gtk2_ardour/midi_time_axis.h
gtk2_ardour/route_ui.cc
gtk2_ardour/route_ui.h
gtk2_ardour/step_entry.cc

index 098b96b5b20879f6586b98806b1edcdb6526d215..bc36d6fbe83697fe8c233931f70dda475cfb387e 100644 (file)
@@ -891,20 +891,6 @@ MidiTimeAxisView::route_active_changed ()
        }
 }
 
-void
-MidiTimeAxisView::toggle_step_edit ()
-{
-        if (_route->record_enabled()) {
-                return;
-        }
-
-        if (midi_track()->step_editing ()) {
-                stop_step_editing ();
-        } else {
-                start_step_editing ();
-        }
-}
-
 void
 MidiTimeAxisView::start_step_editing ()
 {
@@ -923,7 +909,6 @@ MidiTimeAxisView::start_step_editing ()
                step_edit_region_view = 0;
        }
 
-       midi_track()->set_step_editing (true);
 
         if (step_editor == 0) {
                 step_editor = new StepEntry (*this);
@@ -937,15 +922,14 @@ MidiTimeAxisView::start_step_editing ()
 bool
 MidiTimeAxisView::step_editor_hidden (GdkEventAny*)
 {
-        stop_step_editing ();
+        /* everything else will follow the change in the model */
+       midi_track()->set_step_editing (false);
         return true;
 }
 
 void
 MidiTimeAxisView::stop_step_editing ()
 {
-       midi_track()->set_step_editing (false);
-
         if (step_editor) {
                 step_editor->hide ();
         }
index abe5218be3f2a5111de65f501b8c43d3677722b3..12ca3a9bfeabd56ac44dcad43994d553ca841264 100644 (file)
@@ -87,9 +87,6 @@ class MidiTimeAxisView : public RouteTimeAxisView
                return _midi_patch_settings_changed;
        }
 
-        void toggle_step_edit ();
-       void start_step_editing ();
-       void stop_step_editing ();
        void check_step_edit ();
        void step_edit_rest ();
         int  step_add_note (uint8_t channel, uint8_t pitch, uint8_t velocity, 
@@ -102,7 +99,11 @@ class MidiTimeAxisView : public RouteTimeAxisView
        const MidiMultipleChannelSelector& channel_selector() { return _channel_selector; }
 
        Gtk::CheckMenuItem* automation_child_menu_item (Evoral::Parameter);
-       
+
+  protected:
+       void start_step_editing ();
+       void stop_step_editing ();
+
   private:
        sigc::signal<void, std::string, std::string>  _midi_patch_settings_changed;
 
index 6e9f5a73d1912811bf289a4465cf00f225eca5cc..1cbdadbe0513f336d2acac6285b295330c7270a2 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 ();
 }
index 8d819de50508a0eddbcc1e3b9d5afc24274cceef..4f7aaddea5f0245b56efef3c42a5449756ea3cf5 100644 (file)
@@ -184,9 +184,9 @@ class RouteUI : public virtual AxisView
         void build_record_menu ();
 
        Gtk::CheckMenuItem *step_edit_item;
-       virtual void toggle_step_edit ();
+       void toggle_step_edit ();
        virtual void step_edit_changed (bool);
-
+        
        virtual void polarity_changed ();
 
        Gtk::CheckMenuItem *denormal_menu_item;
@@ -221,6 +221,8 @@ class RouteUI : public virtual AxisView
        void reset ();
 
        void self_delete ();
+        virtual void start_step_editing () {}
+        virtual void stop_step_editing() {}
 
   private:
        void check_rec_enable_sensitivity ();
index f585cba057b4ee07c4a430975791be6559c6cc18..18fa5c773093d5a47df778173bd8f73f88151daf 100644 (file)
@@ -173,8 +173,6 @@ StepEntry::StepEntry (MidiTimeAxisView& mtv)
         upper_box.pack_start (channel_spinner, false, false);
 
         _piano = (PianoKeyboard*) piano_keyboard_new ();
-        piano_keyboard_set_keyboard_cue (PIANO_KEYBOARD(_piano), 1);
-        
         piano = Glib::wrap ((GtkWidget*) _piano);
 
         piano->set_flags (Gtk::CAN_FOCUS);