X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fcontrollable.h;h=eb4b7ff14291c00df03b9b1c7b42720d28371a55;hb=130df9c2b195e82ba223ef8541802d775e947610;hp=3ae27f72c2f2650558492ff34ea8220105ab27b9;hpb=ece5093234e4c185cf536d2b4e5edfeb90622409;p=ardour.git diff --git a/libs/pbd/pbd/controllable.h b/libs/pbd/pbd/controllable.h index 3ae27f72c2..eb4b7ff142 100644 --- a/libs/pbd/pbd/controllable.h +++ b/libs/pbd/pbd/controllable.h @@ -2,7 +2,7 @@ Copyright (C) 2000-2007 Paul Davis This program is free software; you can redistribute it and/or modify -v it under the terms of the GNU General Public License as published by + it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. @@ -24,8 +24,9 @@ v it under the terms of the GNU General Public License as published by #include #include +#include "pbd/libpbd_visibility.h" #include "pbd/signals.h" -#include +#include #include "pbd/statefuldestructible.h" @@ -33,19 +34,35 @@ class XMLNode; namespace PBD { -class Controllable : public PBD::StatefulDestructible { +class LIBPBD_API Controllable : public PBD::StatefulDestructible { public: enum Flag { Toggle = 0x1, - Discrete = 0x2, - GainLike = 0x4, - IntegerOnly = 0x8 + GainLike = 0x2, }; Controllable (const std::string& name, Flag f = Flag (0)); virtual ~Controllable() { Destroyed (this); } + /* We express Controllable values in one of three ways: + * 1. `user' --- as presented to the user (e.g. dB, Hz, etc.) + * 2. `interface' --- as used in some cases for the UI representation + * (in order to make controls behave logarithmically). + * 3. `internal' --- as passed to a processor, track, plugin, or whatever. + * + * Note that in some cases user and processor may be the same + * (and interface different) e.g. frequency, which is presented + * to the user and passed to the processor in linear terms, but + * which needs log scaling in the interface. + * + * In other cases, user and interface may be the same (and processor different) + * e.g. gain, which is presented to the user in log terms (dB) + * but passed to the processor as a linear quantity. + */ + + /** Set `internal' value */ virtual void set_value (double) = 0; + /** @return `internal' value */ virtual double get_value (void) const = 0; PBD::Signal0 LearningFinished; @@ -68,9 +85,7 @@ class Controllable : public PBD::StatefulDestructible { void set_touching (bool yn) { _touching = yn; } bool is_toggle() const { return _flags & Toggle; } - bool is_discrete() const { return _flags & Discrete; } bool is_gain_like() const { return _flags & GainLike; } - bool is_integral_only() const { return _flags & IntegerOnly; } virtual double lower() const { return 0.0; } virtual double upper() const { return 1.0; } @@ -78,11 +93,9 @@ class Controllable : public PBD::StatefulDestructible { Flag flags() const { return _flags; } void set_flags (Flag f); - virtual uint32_t get_discrete_values (std::list&) { return 0; /* no values returned */ } - static Controllable* by_id (const PBD::ID&); static Controllable* by_name (const std::string&); - + static const std::string xml_node_name; private: std::string _name; @@ -93,7 +106,7 @@ class Controllable : public PBD::StatefulDestructible { static void remove (Controllable*); typedef std::set Controllables; - static Glib::StaticRWLock registry_lock; + static Glib::Threads::RWLock registry_lock; static Controllables registry; }; @@ -101,7 +114,7 @@ class Controllable : public PBD::StatefulDestructible { a Controllable */ -class IgnorableControllable : public Controllable +class LIBPBD_API IgnorableControllable : public Controllable { public: IgnorableControllable () : PBD::Controllable ("ignoreMe") {}