X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fpbd%2Fpbd%2Fcontrollable.h;h=9fa374ebc66c842b126c04d28b3c55a5467ba3ae;hb=d6ce0641a79607bdf5e648d541dbb4238d3d99e3;hp=ff8f8a9b52004a1b8342bdf67fed3d526a28da19;hpb=fedf3d34f32264ac57c6a222b678dc90f2bb1a88;p=ardour.git diff --git a/libs/pbd/pbd/controllable.h b/libs/pbd/pbd/controllable.h index ff8f8a9b52..9fa374ebc6 100644 --- a/libs/pbd/pbd/controllable.h +++ b/libs/pbd/pbd/controllable.h @@ -1,35 +1,54 @@ +/* + Copyright (C) 2000-2007 Paul Davis + + This program is free software; you can redistribute it and/or modify + 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + #ifndef __pbd_controllable_h__ #define __pbd_controllable_h__ #include +#include #include #include -#include -#include +#include class XMLNode; namespace PBD { -class Controllable : public virtual sigc::trackable, public Stateful { +class Controllable : public PBD::StatefulDestructible { public: Controllable (std::string name); - virtual ~Controllable() { GoingAway (this); } + virtual ~Controllable() { Destroyed (this); } virtual void set_value (float) = 0; virtual float get_value (void) const = 0; - virtual bool can_send_feedback() const { return true; } - sigc::signal LearningFinished; - - static sigc::signal GoingAway; + static sigc::signal CreateBinding; + static sigc::signal DeleteBinding; static sigc::signal StartLearning; static sigc::signal StopLearning; + static sigc::signal Destroyed; + sigc::signal Changed; int set_state (const XMLNode&); @@ -37,8 +56,32 @@ class Controllable : public virtual sigc::trackable, public Stateful { std::string name() const { return _name; } + static Controllable* by_id (const PBD::ID&); + static Controllable* by_name (const std::string&); + private: std::string _name; + + void add (); + void remove (); + + typedef std::set Controllables; + static Glib::Mutex* registry_lock; + static Controllables registry; +}; + +/* a utility class for the occasions when you need but do not have + a Controllable +*/ + +class IgnorableControllable : public Controllable +{ + public: + IgnorableControllable () : PBD::Controllable ("ignoreMe") {} + ~IgnorableControllable () {} + + void set_value (float v){} + float get_value () const { return 0.0; } }; }