mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 11:46:25 +01:00
Remove c-pointer Controllable* registry
This commit is contained in:
parent
baed14c17e
commit
1dedadd03f
2 changed files with 1 additions and 71 deletions
|
|
@ -34,74 +34,13 @@ PBD::Signal1<bool,Controllable*> Controllable::StartLearning;
|
||||||
PBD::Signal1<void,Controllable*> Controllable::StopLearning;
|
PBD::Signal1<void,Controllable*> Controllable::StopLearning;
|
||||||
PBD::Signal1<void, boost::weak_ptr<PBD::Controllable> > Controllable::GUIFocusChanged;
|
PBD::Signal1<void, boost::weak_ptr<PBD::Controllable> > Controllable::GUIFocusChanged;
|
||||||
|
|
||||||
Glib::Threads::RWLock Controllable::registry_lock;
|
|
||||||
Controllable::Controllables Controllable::registry;
|
|
||||||
PBD::ScopedConnectionList* registry_connections = 0;
|
|
||||||
const std::string Controllable::xml_node_name = X_("Controllable");
|
const std::string Controllable::xml_node_name = X_("Controllable");
|
||||||
|
|
||||||
Controllable::Controllable (const string& name, Flag f)
|
Controllable::Controllable (const string& name, Flag f)
|
||||||
: _name (name)
|
: _name (name)
|
||||||
, _flags (f)
|
, _flags (f)
|
||||||
, _touching (false)
|
, _touching (false)
|
||||||
{
|
{}
|
||||||
add (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Controllable::add (Controllable& ctl)
|
|
||||||
{
|
|
||||||
using namespace boost;
|
|
||||||
|
|
||||||
Glib::Threads::RWLock::WriterLock lm (registry_lock);
|
|
||||||
registry.insert (&ctl);
|
|
||||||
|
|
||||||
if (!registry_connections) {
|
|
||||||
registry_connections = new ScopedConnectionList;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Controllable::remove() is static - no need to manage this connection */
|
|
||||||
|
|
||||||
ctl.DropReferences.connect_same_thread (*registry_connections, boost::bind (&Controllable::remove, &ctl));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Controllable::remove (Controllable* ctl)
|
|
||||||
{
|
|
||||||
Glib::Threads::RWLock::WriterLock lm (registry_lock);
|
|
||||||
|
|
||||||
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
|
|
||||||
if ((*i) == ctl) {
|
|
||||||
registry.erase (i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Controllable*
|
|
||||||
Controllable::by_id (const ID& id)
|
|
||||||
{
|
|
||||||
Glib::Threads::RWLock::ReaderLock lm (registry_lock);
|
|
||||||
|
|
||||||
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
|
|
||||||
if ((*i)->id() == id) {
|
|
||||||
return (*i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Controllable*
|
|
||||||
Controllable::by_name (const string& str)
|
|
||||||
{
|
|
||||||
Glib::Threads::RWLock::ReaderLock lm (registry_lock);
|
|
||||||
|
|
||||||
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
|
|
||||||
if ((*i)->_name == str) {
|
|
||||||
return (*i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
XMLNode&
|
XMLNode&
|
||||||
Controllable::get_state ()
|
Controllable::get_state ()
|
||||||
|
|
|
||||||
|
|
@ -150,8 +150,6 @@ public:
|
||||||
Flag flags() const { return _flags; }
|
Flag flags() const { return _flags; }
|
||||||
void set_flags (Flag f);
|
void set_flags (Flag f);
|
||||||
|
|
||||||
static Controllable* by_id (const PBD::ID&);
|
|
||||||
static Controllable* by_name (const std::string&);
|
|
||||||
static const std::string xml_node_name;
|
static const std::string xml_node_name;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -167,13 +165,6 @@ private:
|
||||||
std::string _units;
|
std::string _units;
|
||||||
Flag _flags;
|
Flag _flags;
|
||||||
bool _touching;
|
bool _touching;
|
||||||
|
|
||||||
static void add (Controllable&);
|
|
||||||
static void remove (Controllable*);
|
|
||||||
|
|
||||||
typedef std::set<PBD::Controllable*> Controllables;
|
|
||||||
static Glib::Threads::RWLock registry_lock;
|
|
||||||
static Controllables registry;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* a utility class for the occasions when you need but do not have
|
/* a utility class for the occasions when you need but do not have
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue