enough with umpteen "i18n.h" files. Consolidate on pbd/i18n.h
[ardour.git] / libs / panners / 1in2out / panner_1in2out.cc
index cce2ec9b715237ca53741cb66c547004384f5076..3dc3b53e2c4097e0998546a14db129d86c08808b 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"
@@ -63,19 +62,24 @@ using namespace PBD;
 
 static PanPluginDescriptor _descriptor = {
         "Mono to Stereo Panner",
-        1, 2, 
+        "http://ardour.org/plugin/panner_1in2out",
+        "http://ardour.org/plugin/panner_1in2out#ui",
+        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;
@@ -108,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);
         }
 }
 
@@ -121,7 +125,13 @@ Panner1in2out::clamp_position (double& p)
         return true;
 }
 
-double 
+pair<double, double>
+Panner1in2out::position_range () const
+{
+       return make_pair (0, 1);
+}
+
+double
 Panner1in2out::position () const
 {
         return _pannable->pan_azimuth_control->get_value ();
@@ -137,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();
@@ -188,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 */
                }
        }
@@ -231,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 */
@@ -240,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 */
@@ -284,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);
         }
@@ -317,34 +327,23 @@ Panner1in2out::distribute_one_automated (AudioBuffer& srcbuf, BufferSet& obufs,
 
 
 Panner*
-Panner1in2out::factory (boost::shared_ptr<Pannable> p, Speakers& /* ignored */)
+Panner1in2out::factory (boost::shared_ptr<Pannable> p, boost::shared_ptr<Speakers> /* ignored */)
 {
        return new Panner1in2out (p);
 }
 
 XMLNode&
-Panner1in2out::get_state (void)
-{
-       return state (true);
-}
-
-XMLNode&
-Panner1in2out::state (bool /*full_state*/)
+Panner1in2out::get_state ()
 {
        XMLNode& root (Panner::get_state ());
+       root.add_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);
        return root;
 }
 
-int
-Panner1in2out::set_state (const XMLNode& node, int version)
-{
-       LocaleGuard lg (X_("POSIX"));
-       Panner::set_state (node, version);
-       return 0;
-}
 
-std::set<Evoral::Parameter> 
+std::set<Evoral::Parameter>
 Panner1in2out::what_can_be_automated() const
 {
         set<Evoral::Parameter> s;
@@ -363,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();
@@ -372,17 +371,28 @@ 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.
+
+                  This is designed to be as narrow as possible. Dedicated
+                  panner GUIs can do their own version of this if they need
+                  something less compact.
                 */
-                
-                return string_compose (_("L:%1 R:%2"), (int) rint (100.0 * (1.0 - val)),
+
+                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");
         }
 }
+
+void
+Panner1in2out::reset ()
+{
+       set_position (0.5);
+       update ();
+}