add ActionManager::set_sensitive() for Gtk::ActionGroup
[ardour.git] / libs / panners / 1in2out / panner_1in2out.cc
index 12e7896cfb5a7166bc45d353c0b7d5934b0b2336..b279914f94ebde690c9bc21bc07f09afecab991d 100644 (file)
 
 #include <cmath>
 #include <cerrno>
-#include <fstream>
 #include <cstdlib>
 #include <string>
 #include <cstdio>
 #include <locale.h>
 #include <unistd.h>
 #include <float.h>
-#include <iomanip>
 
 #include <glibmm.h>
 
@@ -51,8 +49,9 @@
 #include "ardour/buffer_set.h"
 #include "ardour/audio_buffer.h"
 #include "ardour/pannable.h"
+#include "ardour/profile.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 #include "panner_1in2out.h"
 
 #include "pbd/mathfix.h"
@@ -65,20 +64,22 @@ static PanPluginDescriptor _descriptor = {
         "Mono to Stereo Panner",
         "http://ardour.org/plugin/panner_1in2out",
         "http://ardour.org/plugin/panner_1in2out#ui",
-        1, 2, 
+        1, 2,
         10000,
         Panner1in2out::factory
 };
 
-extern "C" { PanPluginDescriptor* panner_descriptor () { return &_descriptor; } }
+extern "C" ARDOURPANNER_API PanPluginDescriptor*  panner_descriptor () { return &_descriptor; }
 
 Panner1in2out::Panner1in2out (boost::shared_ptr<Pannable> p)
        : Panner (p)
 {
-        if (!_pannable->has_state()) {
-                _pannable->pan_azimuth_control->set_value (0.5);
+        if (!Profile->get_trx () ) {
+            if (!_pannable->has_state ()) {
+                   _pannable->pan_azimuth_control->set_value (0.5, Controllable::NoGroup);
+            }
         }
-        
+
         update ();
 
         left = desired_left;
@@ -111,7 +112,7 @@ void
 Panner1in2out::set_position (double p)
 {
         if (clamp_position (p)) {
-                _pannable->pan_azimuth_control->set_value (p);
+               _pannable->pan_azimuth_control->set_value (p, Controllable::NoGroup);
         }
 }
 
@@ -130,7 +131,7 @@ Panner1in2out::position_range () const
        return make_pair (0, 1);
 }
 
-double 
+double
 Panner1in2out::position () const
 {
         return _pannable->pan_azimuth_control->get_value ();
@@ -146,7 +147,7 @@ Panner1in2out::distribute_one (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gai
        pan_t pan;
 
        Sample* const src = srcbuf.data();
-        
+
        /* LEFT OUTPUT */
 
        dst = obufs.get_audio(0).data();
@@ -154,7 +155,7 @@ Panner1in2out::distribute_one (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gai
        if (fabsf ((delta = (left - desired_left))) > 0.002) { // about 1 degree of arc
 
                /* we've moving the pan by an appreciable amount, so we must
-                  interpolate over 64 frames or nframes, whichever is smaller */
+                  interpolate over 64 samples or nframes, whichever is smaller */
 
                pframes_t const limit = min ((pframes_t) 64, nframes);
                pframes_t n;
@@ -197,7 +198,7 @@ Panner1in2out::distribute_one (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gai
                        /* pan is 1 so we can just copy the input samples straight in */
 
                        mix_buffers_no_gain(dst,src,nframes);
-                        
+
                        /* XXX it would be nice to mark that we wrote into the buffer */
                }
        }
@@ -209,7 +210,7 @@ Panner1in2out::distribute_one (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gai
        if (fabsf ((delta = (right - desired_right))) > 0.002) { // about 1 degree of arc
 
                /* we're moving the pan by an appreciable amount, so we must
-                  interpolate over 64 frames or nframes, whichever is smaller */
+                  interpolate over 64 samples or nframes, whichever is smaller */
 
                pframes_t const limit = min ((pframes_t) 64, nframes);
                pframes_t n;
@@ -240,7 +241,7 @@ Panner1in2out::distribute_one (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gai
                        if (pan != 0.0f) {
 
                                /* pan is not 1 but also not 0, so we must do it "properly" */
-                               
+
                                mix_buffers_with_gain(dst,src,nframes,pan);
 
                                /* XXX it would be nice to mark the buffer as written to */
@@ -249,7 +250,7 @@ Panner1in2out::distribute_one (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gai
                } else {
 
                        /* pan is 1 so we can just copy the input samples straight in */
-                       
+
                        mix_buffers_no_gain(dst,src,nframes);
 
                        /* XXX it would be nice to mark the buffer as written to */
@@ -260,7 +261,7 @@ Panner1in2out::distribute_one (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gai
 
 void
 Panner1in2out::distribute_one_automated (AudioBuffer& srcbuf, BufferSet& obufs,
-                                         framepos_t start, framepos_t end, pframes_t nframes,
+                                         samplepos_t start, samplepos_t end, pframes_t nframes,
                                          pan_t** buffers, uint32_t which)
 {
        assert (obufs.count().n_audio() == 2);
@@ -293,10 +294,10 @@ Panner1in2out::distribute_one_automated (AudioBuffer& srcbuf, BufferSet& obufs,
                 /* note that are overwriting buffers, but its OK
                    because we're finished with their old contents
                    (position automation data) and are
-                   replacing it with panning/gain coefficients 
+                   replacing it with panning/gain coefficients
                    that we need to actually process the data.
                 */
-                
+
                 buffers[0][n] = panL * (scale * panL + 1.0f - scale);
                 buffers[1][n] = panR * (scale * panR + 1.0f - scale);
         }
@@ -335,14 +336,14 @@ XMLNode&
 Panner1in2out::get_state ()
 {
        XMLNode& root (Panner::get_state ());
-       root.add_property (X_("uri"), _descriptor.panner_uri);
+       root.set_property (X_("uri"), _descriptor.panner_uri);
        /* this is needed to allow new sessions to load with old Ardour: */
-       root.add_property (X_("type"), _descriptor.name);
+       root.set_property (X_("type"), _descriptor.name);
        return root;
 }
 
 
-std::set<Evoral::Parameter> 
+std::set<Evoral::Parameter>
 Panner1in2out::what_can_be_automated() const
 {
         set<Evoral::Parameter> s;
@@ -361,8 +362,8 @@ Panner1in2out::describe_parameter (Evoral::Parameter p)
         }
 }
 
-string 
-Panner1in2out::value_as_string (boost::shared_ptr<AutomationControl> ac) const
+string
+Panner1in2out::value_as_string (boost::shared_ptr<const AutomationControl> ac) const
 {
         /* DO NOT USE LocaleGuard HERE */
         double val = ac->get_value();
@@ -370,9 +371,9 @@ Panner1in2out::value_as_string (boost::shared_ptr<AutomationControl> ac) const
         switch (ac->parameter().type()) {
         case PanAzimuthAutomation:
                 /* We show the position of the center of the image relative to the left & right.
-                   This is expressed as a pair of percentage values that ranges from (100,0) 
+                   This is expressed as a pair of percentage values that ranges from (100,0)
                    (hard left) through (50,50) (hard center) to (0,100) (hard right).
-                   
+
                    This is pretty wierd, but its the way audio engineers expect it. Just remember that
                    the center of the USA isn't Kansas, its (50LA, 50NY) and it will all make sense.
 
@@ -380,12 +381,12 @@ Panner1in2out::value_as_string (boost::shared_ptr<AutomationControl> ac) const
                   panner GUIs can do their own version of this if they need
                   something less compact.
                 */
-                
+
                 return string_compose (_("L%1R%2"), (int) rint (100.0 * (1.0 - val)),
                                        (int) rint (100.0 * val));
-                
+
         default:
-                return _pannable->value_as_string (ac);
+                return _("unused");
         }
 }