projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
initial, prototype modifications to permit compilation of local libraries as static...
[ardour.git]
/
libs
/
pbd
/
controllable.cc
diff --git
a/libs/pbd/controllable.cc
b/libs/pbd/controllable.cc
index 38780bddbe4ea64d8612731085fb1de01c121344..42e015ac6f90a6d179841ba25cd96a42d7f3ad52 100644
(file)
--- a/
libs/pbd/controllable.cc
+++ b/
libs/pbd/controllable.cc
@@
-21,6
+21,7
@@
#include "pbd/enumwriter.h"
#include "pbd/xml++.h"
#include "pbd/error.h"
#include "pbd/enumwriter.h"
#include "pbd/xml++.h"
#include "pbd/error.h"
+#include "pbd/locale_guard.h"
#include "i18n.h"
#include "i18n.h"
@@
-33,9
+34,10
@@
PBD::Signal1<void,Controllable*> Controllable::StopLearning;
PBD::Signal3<void,Controllable*,int,int> Controllable::CreateBinding;
PBD::Signal1<void,Controllable*> Controllable::DeleteBinding;
PBD::Signal3<void,Controllable*,int,int> Controllable::CreateBinding;
PBD::Signal1<void,Controllable*> Controllable::DeleteBinding;
-Glib::
StaticRWLock Controllable::registry_lock = GLIBMM_STATIC_RW_LOCK_INIT
;
+Glib::
Threads::RWLock Controllable::registry_lock
;
Controllable::Controllables Controllable::registry;
Controllable::Controllables Controllable::registry;
-PBD::ScopedConnectionList registry_connections;
+PBD::ScopedConnectionList* registry_connections = 0;
+const std::string Controllable::xml_node_name = X_("Controllable");
Controllable::Controllable (const string& name, Flag f)
: _name (name)
Controllable::Controllable (const string& name, Flag f)
: _name (name)
@@
-50,18
+52,22
@@
Controllable::add (Controllable& ctl)
{
using namespace boost;
{
using namespace boost;
- Glib::RWLock::WriterLock lm (registry_lock);
+ Glib::
Threads::
RWLock::WriterLock lm (registry_lock);
registry.insert (&ctl);
registry.insert (&ctl);
+ if (!registry_connections) {
+ registry_connections = new ScopedConnectionList;
+ }
+
/* Controllable::remove() is static - no need to manage this connection */
/* Controllable::remove() is static - no need to manage this connection */
- ctl.DropReferences.connect_same_thread (registry_connections, boost::bind (&Controllable::remove, &ctl));
+ ctl.DropReferences.connect_same_thread (
*
registry_connections, boost::bind (&Controllable::remove, &ctl));
}
void
Controllable::remove (Controllable* ctl)
{
}
void
Controllable::remove (Controllable* ctl)
{
- Glib::RWLock::WriterLock lm (registry_lock);
+ Glib::
Threads::
RWLock::WriterLock lm (registry_lock);
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i) == ctl) {
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i) == ctl) {
@@
-74,7
+80,7
@@
Controllable::remove (Controllable* ctl)
Controllable*
Controllable::by_id (const ID& id)
{
Controllable*
Controllable::by_id (const ID& id)
{
- Glib::RWLock::ReaderLock lm (registry_lock);
+ Glib::
Threads::
RWLock::ReaderLock lm (registry_lock);
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i)->id() == id) {
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i)->id() == id) {
@@
-87,7
+93,7
@@
Controllable::by_id (const ID& id)
Controllable*
Controllable::by_name (const string& str)
{
Controllable*
Controllable::by_name (const string& str)
{
- Glib::RWLock::ReaderLock lm (registry_lock);
+ Glib::
Threads::
RWLock::ReaderLock lm (registry_lock);
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i)->_name == str) {
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i)->_name == str) {
@@
-100,33
+106,48
@@
Controllable::by_name (const string& str)
XMLNode&
Controllable::get_state ()
{
XMLNode&
Controllable::get_state ()
{
- XMLNode* node = new XMLNode (X_("Controllable"));
+ XMLNode* node = new XMLNode (xml_node_name);
+ LocaleGuard lg (X_("POSIX"));
char buf[64];
node->add_property (X_("name"), _name); // not reloaded from XML state, just there to look at
char buf[64];
node->add_property (X_("name"), _name); // not reloaded from XML state, just there to look at
-
_id
.print (buf, sizeof (buf));
+
id()
.print (buf, sizeof (buf));
node->add_property (X_("id"), buf);
node->add_property (X_("flags"), enum_2_string (_flags));
node->add_property (X_("id"), buf);
node->add_property (X_("flags"), enum_2_string (_flags));
+ snprintf (buf, sizeof (buf), "%2.12f", get_value());
+ node->add_property (X_("value"), buf);
+
+ if (_extra_xml) {
+ node->add_child_copy (*_extra_xml);
+ }
return *node;
}
return *node;
}
+
int
Controllable::set_state (const XMLNode& node, int /*version*/)
{
int
Controllable::set_state (const XMLNode& node, int /*version*/)
{
+ LocaleGuard lg (X_("POSIX"));
const XMLProperty* prop;
const XMLProperty* prop;
- if ((prop = node.property (X_("id"))) != 0) {
- _id = prop->value();
- return 0;
- } else {
- error << _("Controllable state node has no ID property") << endmsg;
- return -1;
- }
+ Stateful::save_extra_xml (node);
+
+ set_id (node);
if ((prop = node.property (X_("flags"))) != 0) {
_flags = (Flag) string_2_enum (prop->value(), _flags);
}
if ((prop = node.property (X_("flags"))) != 0) {
_flags = (Flag) string_2_enum (prop->value(), _flags);
}
+
+ if ((prop = node.property (X_("value"))) != 0) {
+ float val;
+
+ if (sscanf (prop->value().c_str(), "%f", &val) == 1) {
+ set_value (val);
+ }
+ }
+
+ return 0;
}
void
}
void