summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/automatable.h1
-rw-r--r--libs/ardour/ardour/pannable.h2
-rw-r--r--libs/ardour/ardour/panner.h1
-rw-r--r--libs/ardour/automatable.cc20
-rw-r--r--libs/ardour/pannable.cc12
-rw-r--r--libs/ardour/panner.cc6
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/barcontroller.h2
-rw-r--r--libs/panners/1in2out/panner_1in2out.cc24
-rw-r--r--libs/panners/1in2out/panner_1in2out.h1
-rw-r--r--libs/panners/2in2out/panner_2in2out.cc27
-rw-r--r--libs/panners/2in2out/panner_2in2out.h1
-rw-r--r--libs/panners/vbap/vbap.cc18
-rw-r--r--libs/panners/vbap/vbap.h1
13 files changed, 114 insertions, 2 deletions
diff --git a/libs/ardour/ardour/automatable.h b/libs/ardour/ardour/automatable.h
index c9e900e6a9..1abfb4faf1 100644
--- a/libs/ardour/ardour/automatable.h
+++ b/libs/ardour/ardour/automatable.h
@@ -63,6 +63,7 @@ public:
virtual void transport_stopped (framepos_t now);
virtual std::string describe_parameter(Evoral::Parameter param);
+ virtual std::string value_as_string (boost::shared_ptr<AutomationControl>) const;
AutoState get_parameter_automation_state (Evoral::Parameter param);
virtual void set_parameter_automation_state (Evoral::Parameter param, AutoState);
diff --git a/libs/ardour/ardour/pannable.h b/libs/ardour/ardour/pannable.h
index dff64cec4b..3dc4ccb8fd 100644
--- a/libs/ardour/ardour/pannable.h
+++ b/libs/ardour/ardour/pannable.h
@@ -65,6 +65,8 @@ struct Pannable : public PBD::Stateful, public Automatable, public SessionHandle
return ((_auto_state & Write) || ((_auto_state & Touch) && touching()));
}
+ std::string value_as_string (boost::shared_ptr<AutomationControl>) const;
+
void start_touch (double when);
void stop_touch (bool mark, double when);
bool touching() const { return g_atomic_int_get (&_touching); }
diff --git a/libs/ardour/ardour/panner.h b/libs/ardour/ardour/panner.h
index f43be2dbbc..c26d1a6a2c 100644
--- a/libs/ardour/ardour/panner.h
+++ b/libs/ardour/ardour/panner.h
@@ -93,6 +93,7 @@ class Panner : public PBD::Stateful, public PBD::ScopedConnectionList
virtual std::set<Evoral::Parameter> what_can_be_automated() const;
virtual std::string describe_parameter (Evoral::Parameter);
+ virtual std::string value_as_string (boost::shared_ptr<AutomationControl>) const;
bool touching() const;
diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc
index 0d24135710..20dc910f61 100644
--- a/libs/ardour/automatable.cc
+++ b/libs/ardour/automatable.cc
@@ -492,3 +492,23 @@ Automatable::clear_controls ()
_control_connections.drop_connections ();
ControlSet::clear_controls ();
}
+
+string
+Automatable::value_as_string (boost::shared_ptr<AutomationControl> ac) const
+{
+ std::stringstream s;
+
+ /* this is a the default fallback for this virtual method. Derived Automatables
+ are free to override this to display the values of their parameters/controls
+ in different ways.
+ */
+
+ // Hack to display CC as integer value, rather than double
+ if (ac->parameter().type() == MidiCCAutomation) {
+ s << lrint (ac->get_value());
+ } else {
+ s << std::fixed << std::setprecision(3) << ac->get_value();
+ }
+
+ return s.str ();
+}
diff --git a/libs/ardour/pannable.cc b/libs/ardour/pannable.cc
index 4243ab45df..1e2d5f5594 100644
--- a/libs/ardour/pannable.cc
+++ b/libs/ardour/pannable.cc
@@ -23,9 +23,11 @@
#include "ardour/automation_control.h"
#include "ardour/automation_list.h"
#include "ardour/pannable.h"
+#include "ardour/panner.h"
#include "ardour/pan_controllable.h"
#include "ardour/session.h"
+using namespace std;
using namespace PBD;
using namespace ARDOUR;
@@ -245,6 +247,12 @@ Pannable::set_state (const XMLNode& root, int /*version - not used*/)
return 0;
}
+string
+Pannable::value_as_string (boost::shared_ptr<AutomationControl> ac) const
+{
+ if (_panner) {
+ return _panner->value_as_string (ac);
+ }
-
-
+ return Automatable::value_as_string (ac);
+}
diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc
index bfee68a342..1cb5e310aa 100644
--- a/libs/ardour/panner.cc
+++ b/libs/ardour/panner.cc
@@ -161,3 +161,9 @@ Panner::describe_parameter (Evoral::Parameter p)
{
return _pannable->describe_parameter (p);
}
+
+string
+Panner::value_as_string (boost::shared_ptr<AutomationControl> ac) const
+{
+ return _pannable->value_as_string (ac);
+}
diff --git a/libs/gtkmm2ext/gtkmm2ext/barcontroller.h b/libs/gtkmm2ext/gtkmm2ext/barcontroller.h
index e0e14f1c26..c65d8abe81 100644
--- a/libs/gtkmm2ext/gtkmm2ext/barcontroller.h
+++ b/libs/gtkmm2ext/gtkmm2ext/barcontroller.h
@@ -82,6 +82,8 @@ class BarController : public Gtk::Frame
Gtk::SpinButton spinner;
bool use_parent;
bool logarithmic;
+ sigc::slot<std::string> _label_slot;
+ bool _use_slot;
virtual std::string get_label (int& /*x*/) {
return "";
diff --git a/libs/panners/1in2out/panner_1in2out.cc b/libs/panners/1in2out/panner_1in2out.cc
index 7a59aa04cc..cce2ec9b71 100644
--- a/libs/panners/1in2out/panner_1in2out.cc
+++ b/libs/panners/1in2out/panner_1in2out.cc
@@ -362,3 +362,27 @@ Panner1in2out::describe_parameter (Evoral::Parameter p)
return _pannable->describe_parameter (p);
}
}
+
+string
+Panner1in2out::value_as_string (boost::shared_ptr<AutomationControl> ac) const
+{
+ /* DO NOT USE LocaleGuard HERE */
+ double val = ac->get_value();
+
+ 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)
+ (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.
+ */
+
+ return string_compose (_("L:%1 R:%2"), (int) rint (100.0 * (1.0 - val)),
+ (int) rint (100.0 * val));
+
+ default:
+ return _pannable->value_as_string (ac);
+ }
+}
diff --git a/libs/panners/1in2out/panner_1in2out.h b/libs/panners/1in2out/panner_1in2out.h
index ced467c11b..ffc67ac54d 100644
--- a/libs/panners/1in2out/panner_1in2out.h
+++ b/libs/panners/1in2out/panner_1in2out.h
@@ -60,6 +60,7 @@ class Panner1in2out : public Panner
static Panner* factory (boost::shared_ptr<Pannable>, Speakers&);
std::string describe_parameter (Evoral::Parameter);
+ std::string value_as_string (boost::shared_ptr<AutomationControl>) const;
XMLNode& state (bool full_state);
XMLNode& get_state (void);
diff --git a/libs/panners/2in2out/panner_2in2out.cc b/libs/panners/2in2out/panner_2in2out.cc
index 2c2856361c..30d971d118 100644
--- a/libs/panners/2in2out/panner_2in2out.cc
+++ b/libs/panners/2in2out/panner_2in2out.cc
@@ -473,3 +473,30 @@ Panner2in2out::describe_parameter (Evoral::Parameter p)
return _pannable->describe_parameter (p);
}
}
+
+string
+Panner2in2out::value_as_string (boost::shared_ptr<AutomationControl> ac) const
+{
+ /* DO NOT USE LocaleGuard HERE */
+ double val = ac->get_value();
+
+ 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)
+ (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.
+ */
+
+ return string_compose (_("L:%1 R:%2"), (int) rint (100.0 * (1.0 - val)),
+ (int) rint (100.0 * val));
+
+ case PanWidthAutomation:
+ return string_compose (_("Width: %1%%"), (int) floor (100.0 * val));
+
+ default:
+ return _pannable->value_as_string (ac);
+ }
+}
diff --git a/libs/panners/2in2out/panner_2in2out.h b/libs/panners/2in2out/panner_2in2out.h
index 0bb38fa27f..2014bb032e 100644
--- a/libs/panners/2in2out/panner_2in2out.h
+++ b/libs/panners/2in2out/panner_2in2out.h
@@ -60,6 +60,7 @@ class Panner2in2out : public Panner
static Panner* factory (boost::shared_ptr<Pannable>, Speakers&);
std::string describe_parameter (Evoral::Parameter);
+ std::string value_as_string (boost::shared_ptr<AutomationControl>) const;
XMLNode& state (bool full_state);
XMLNode& get_state (void);
diff --git a/libs/panners/vbap/vbap.cc b/libs/panners/vbap/vbap.cc
index 6088a2d0d6..239a253f19 100644
--- a/libs/panners/vbap/vbap.cc
+++ b/libs/panners/vbap/vbap.cc
@@ -313,3 +313,21 @@ VBAPanner::describe_parameter (Evoral::Parameter p)
return _pannable->describe_parameter (p);
}
}
+
+string
+VBAPanner::value_as_string (boost::shared_ptr<AutomationControl> ac) const
+{
+ /* DO NOT USE LocaleGuard HERE */
+ double val = ac->get_value();
+
+ switch (ac->parameter().type()) {
+ case PanAzimuthAutomation: /* direction */
+ return string_compose (_("%1"), val * 360.0);
+
+ case PanWidthAutomation: /* diffusion */
+ return string_compose (_("%1%%"), (int) floor (100.0 * fabs(val)));
+
+ default:
+ return _pannable->value_as_string (ac);
+ }
+}
diff --git a/libs/panners/vbap/vbap.h b/libs/panners/vbap/vbap.h
index 2b80b032cb..cf010cc331 100644
--- a/libs/panners/vbap/vbap.h
+++ b/libs/panners/vbap/vbap.h
@@ -53,6 +53,7 @@ public:
void set_azimuth_elevation (double azimuth, double elevation);
std::string describe_parameter (Evoral::Parameter);
+ std::string value_as_string (boost::shared_ptr<AutomationControl>) const;
XMLNode& state (bool full_state);
XMLNode& get_state ();