add toggles for region fade in/out/both active, plus toggle for region fades visibility
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 9 Oct 2008 21:55:05 +0000 (21:55 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 9 Oct 2008 21:55:05 +0000 (21:55 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@3904 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/ardour-sae.menus
gtk2_ardour/ardour.menus
gtk2_ardour/audio_region_view.cc
gtk2_ardour/audio_region_view.h
gtk2_ardour/audio_streamview.cc
gtk2_ardour/audio_streamview.h
gtk2_ardour/editor.h
gtk2_ardour/editor_actions.cc
gtk2_ardour/editor_canvas.cc
gtk2_ardour/editor_ops.cc

index 01482d61a38e69f5c347869978173f55a6f0cc98..dd57e2aa36b9250aa825c5e3526e88c5cffd1db7 100644 (file)
              <menuitem action='cut-region-gain'/>                         
              <menuitem action='pitch-shift-region'/>
              <separator/>
+             <menuitem action='toggle-selected-region-fades'/>
              <menuitem action='toggle-region-fades'/>
         </menu>         
 
               <menuitem action='show-editor-mixer'/>
                <menuitem action='ToggleMeasureVisibility'/>
               <menuitem action='ToggleLogoVisibility'/>
+              <menuitem action='toggle-region-fades-visible'/>
               <separator/>
               <menu action="PrimaryClockMenu">
                     <menuitem action="primary-clock-bbt"/>
index c56abbbcee73bdb03f2d70d3e4a2cc03b1249645..eab75387a43b97b1810e50c0c474b0f4ce3b2027 100644 (file)
              <menuitem action='boost-region-gain'/>
              <menuitem action='cut-region-gain'/>                         
              <menuitem action='pitch-shift-region'/>
+             <menuitem action='toggle-opaque-region'/>
+             <menuitem action='toggle-selected-region-fade-in'/>
+             <menuitem action='toggle-selected-region-fade-out'/>
+             <menuitem action='toggle-selected-region-fades'/>
              <separator/>
              <menuitem action='duplicate-region'/>
              <menuitem action='multi-duplicate-region'/>
                <menuitem action='toggle-waveform-visible'/>
                <menuitem action='ToggleWaveformsWhileRecording'/>
               <menuitem action='SyncEditorAndMixerTrackOrder'/>
+              <menuitem action='toggle-region-fades-visible'/>
         </menu>
         <menu name='JACK' action='JACK'>
                <menuitem action='JACKDisconnect'/>
index 1c52a05ea61b5538f418649ba26e58c9fc2e3d55..40046cd9a1a8f0f6f81e6812af55159ca526a464 100644 (file)
@@ -567,7 +567,9 @@ AudioRegionView::reset_fade_in_shape_width (nframes_t width)
                return;
        }
 
-       fade_in_shape->show();
+       if (Config->get_show_region_fades()) {
+               fade_in_shape->show();
+       }
 
        float curve[npoints];
        audio_region()->fade_in()->curve().get_vector (0, audio_region()->fade_in()->back()->when, curve, npoints);
@@ -653,7 +655,9 @@ AudioRegionView::reset_fade_out_shape_width (nframes_t width)
                return;
        } 
        
-       fade_out_shape->show();
+       if (Config->get_show_region_fades()) {
+               fade_out_shape->show();
+       }
 
        float curve[npoints];
        audio_region()->fade_out()->curve().get_vector (0, audio_region()->fade_out()->back()->when, curve, npoints);
@@ -1313,3 +1317,34 @@ AudioRegionView::set_frame_color ()
        }
 }
 
+void
+AudioRegionView::set_fade_visibility (bool yn)
+{
+       if (yn) {
+               if (fade_in_shape) {
+                       fade_in_shape->show();
+               }
+               if (fade_out_shape) {
+                       fade_out_shape->show ();
+               } 
+               if (fade_in_handle) {
+                       fade_in_handle->show ();
+               } 
+               if (fade_out_handle) {
+                       fade_out_handle->show ();
+               }
+       } else {
+               if (fade_in_shape) {
+                       fade_in_shape->hide();
+               }
+               if (fade_out_shape) {
+                       fade_out_shape->hide ();
+               } 
+               if (fade_in_handle) {
+                       fade_in_handle->hide ();
+               } 
+               if (fade_out_handle) {
+                       fade_out_handle->hide ();
+               }
+       }
+}
index b8e337087785e66136582cdce1ac28b072db683b..a43ba0db86b7e429cbbe5b314f30831baa4b550c 100644 (file)
@@ -106,6 +106,8 @@ class AudioRegionView : public RegionView
        void reset_fade_in_shape_width (nframes_t);
        void reset_fade_out_shape_width (nframes_t);
 
+       void set_fade_visibility (bool);
+
        virtual void entered ();
        virtual void exited ();
        
index 76e15aa5283021ffa105203f8a63826ab520ee01..7fc7be2db2441fd2a4541ab2e44d19d25101c175 100644 (file)
@@ -755,6 +755,28 @@ AudioStreamView::update_rec_regions ()
        }
 }
 
+void
+AudioStreamView::show_all_fades ()
+{
+       for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
+               AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+               if (arv) {
+                       arv->set_fade_visibility (true);
+               }
+       }
+}
+
+void
+AudioStreamView::hide_all_fades ()
+{
+       for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
+               AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+               if (arv) {
+                       arv->set_fade_visibility (false);
+               }
+       }
+}
+
 void
 AudioStreamView::show_all_xfades ()
 {
index c4db364618adb0206859e4d2fc8ec971a9415baa..85055249c5fc8eba9ed3f32e54368e73f6ac18fd 100644 (file)
@@ -72,6 +72,9 @@ class AudioStreamView : public StreamView
 
        void foreach_crossfadeview (void (CrossfadeView::*pmf)(void));
 
+       void show_all_fades ();
+       void hide_all_fades ();
+
        void show_all_xfades ();
        void hide_all_xfades ();
        void hide_xfades_involving (AudioRegionView&);
index 81dad3c2443b7396018149670ecfde06af5028fb..e21996621efd3a569bb6aba7cc001218240756fa 100644 (file)
@@ -339,6 +339,10 @@ class Editor : public PublicEditor
        /* fades/xfades */
 
        void toggle_region_fades ();
+       void toggle_region_fades_visible ();
+       void toggle_selected_region_fades (int dir);
+       void update_region_fade_visibility ();
+
        void toggle_auto_xfade ();
        void toggle_xfades_active ();
        void toggle_xfade_visibility ();
index fb5c8d04f4a2b4636b986d4021bbbd85ce6559e3..0f78b60f74c0b66d74ece2d6603f8ef59bd252ba 100644 (file)
@@ -118,7 +118,16 @@ Editor::register_actions ()
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_toggle_action (editor_actions, "toggle-auto-xfades", _("Created Automatically"), mem_fun(*this, &Editor::toggle_auto_xfade));
        ActionManager::session_sensitive_actions.push_back (act);
-       act = ActionManager::register_toggle_action (editor_actions, "toggle-region-fades", _("Active Region Fades"), mem_fun(*this, &Editor::toggle_region_fades));
+
+       act = ActionManager::register_toggle_action (editor_actions, "toggle-region-fades", _("Use Region Fades (global)"), mem_fun(*this, &Editor::toggle_region_fades));
+       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_toggle_action (editor_actions, "toggle-region-fades-visible", _("Show Region Fades"), mem_fun(*this, &Editor::toggle_region_fades_visible));
+       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "toggle-selected-region-fade-in", _("Toggle Region Fade In"), bind (mem_fun(*this, &Editor::toggle_selected_region_fades), 1));;
+       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "toggle-selected-region-fade-out", _("Toggle Region Fade Out"), bind (mem_fun(*this, &Editor::toggle_selected_region_fades), -1));;
+       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "toggle-selected-region-fades", _("Toggle Region Fades"), bind (mem_fun(*this, &Editor::toggle_selected_region_fades), 0));
        ActionManager::session_sensitive_actions.push_back (act);
 
        act = ActionManager::register_action (editor_actions, "playhead-to-next-region-boundary", _("Playhead to Next Region Boundary"), bind (mem_fun(*this, &Editor::cursor_to_next_region_boundary), playhead_cursor));
@@ -1664,6 +1673,12 @@ Editor::toggle_region_fades ()
        ActionManager::toggle_config_state ("Editor", "toggle-region-fades", &Configuration::set_use_region_fades, &Configuration::get_use_region_fades);
 }
 
+void
+Editor::toggle_region_fades_visible ()
+{
+       ActionManager::toggle_config_state ("Editor", "toggle-region-fades-visible", &Configuration::set_show_region_fades, &Configuration::get_show_region_fades);
+}
+
 void
 Editor::toggle_auto_xfade ()
 {
@@ -1716,6 +1731,9 @@ Editor::parameter_changed (const char* parameter_name)
        } else if (PARAM_IS ("xfades-visible")) {
                ActionManager::map_some_state ("Editor", "toggle-xfades-visible", &Configuration::get_xfades_visible);
                update_xfade_visibility ();
+       } else if (PARAM_IS ("show-region-fades")) {
+               ActionManager::map_some_state ("Editor", "toggle-region-fades-visible", &Configuration::get_show_region_fades);
+               update_region_fade_visibility ();
        } else if (PARAM_IS ("use-region-fades")) {
                ActionManager::map_some_state ("Editor", "toggle-region-fades", &Configuration::get_use_region_fades);
        } else if (PARAM_IS ("auto-xfade")) {
@@ -1754,3 +1772,4 @@ Editor::reset_canvas_action_sensitivity (bool onoff)
                (*x)->set_sensitive (onoff);
        }
 }
+
index 045ed9926f9880b441c45cde0e57ea6626fccb83..6e556ba506c123fc64d28b32e31756c345966a5e 100644 (file)
@@ -375,7 +375,7 @@ Editor::controls_layout_size_request (Requisition* req)
        if (!screen) {
                screen = Gdk::Screen::get_default();
        }
-       gint height = min ( (gint) pos, (screen->get_height() - 400));
+       gint height = min ( (gint) pos, (screen->get_height() - 600));
        gint width = max (edit_controls_vbox.get_width(),  controls_layout.get_width());
 
        /* don't get too big. the fudge factors here are just guesses */
index cac7be90bd3af04a88e944adc352af197a4eb435..f974792d50d59503e1335764b519713c56fb0047 100644 (file)
@@ -64,6 +64,7 @@
 #include "audio_time_axis.h"
 #include "automation_time_axis.h"
 #include "streamview.h"
+#include "audio_streamview.h"
 #include "audio_region_view.h"
 #include "midi_region_view.h"
 #include "rgb_macros.h"
@@ -4997,6 +4998,69 @@ Editor::set_fade_out_active (bool yn)
        commit_reversible_command ();
 }
 
+void
+Editor::toggle_selected_region_fades (int dir)
+{
+       RegionSelection rs;
+       RegionSelection::iterator i;
+       boost::shared_ptr<AudioRegion> ar;
+       bool yn;
+
+       get_regions_for_action (rs);
+       
+       if (rs.empty()) {
+               return;
+       }
+
+       for (i = rs.begin(); i != rs.end(); ++i) {
+               if ((ar = boost::dynamic_pointer_cast<AudioRegion>((*i)->region())) != 0) {
+                       if (dir == -1) {
+                               yn = ar->fade_out_active ();
+                       } else {
+                               yn = ar->fade_in_active ();
+                       }
+                       break;
+               }
+       }
+
+       if (i == rs.end()) {
+               return;
+       }
+
+       /* XXX should this undo-able? */
+
+       for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
+               if ((ar = boost::dynamic_pointer_cast<AudioRegion>((*i)->region())) == 0) {
+                       continue;
+               }
+               if (dir == 1 || dir == 0) {
+                       ar->set_fade_in_active (!yn);
+               }
+
+               if (dir == -1 || dir == 0) {
+                       ar->set_fade_out_active (!yn);
+               }
+       }
+}
+
+
+/** Update region fade visibility after its configuration has been changed */
+void
+Editor::update_region_fade_visibility ()
+{
+       bool _fade_visibility = Config->get_show_region_fades ();
+
+       for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+               AudioTimeAxisView* v = dynamic_cast<AudioTimeAxisView*>(*i);
+               if (v) {
+                       if (_fade_visibility) {
+                               v->audio_view()->show_all_fades ();
+                       } else {
+                               v->audio_view()->hide_all_fades ();
+                       }
+               }
+       }
+}
 
 /** Update crossfade visibility after its configuration has been changed */
 void
@@ -6120,3 +6184,4 @@ Editor::end_visual_state_op (uint32_t n)
 
        return false; // do not call again
 }
+