summaryrefslogtreecommitdiffstats
path: root/src/engine/events/SetMetadataEvent.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-05-27 23:21:34 +0000
committerDavid Robillard <d@drobilla.net>2009-05-27 23:21:34 +0000
commit2f595631859574bfa7779ebb42f42b8590f5424c (patch)
treec91c0cddcd93af991161c6cde4eceaaf45c5c8d5 /src/engine/events/SetMetadataEvent.cpp
parent20ff9af76b21b751ac29b354cf557e86b69c52f7 (diff)
downloadingen-2f595631859574bfa7779ebb42f42b8590f5424c.tar.gz
ingen-2f595631859574bfa7779ebb42f42b8590f5424c.tar.bz2
ingen-2f595631859574bfa7779ebb42f42b8590f5424c.zip
Remove 'property' vs 'variable' dichotomy in favour of 'meta objects' (to match serialisation).
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2016 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/events/SetMetadataEvent.cpp')
-rw-r--r--src/engine/events/SetMetadataEvent.cpp77
1 files changed, 40 insertions, 37 deletions
diff --git a/src/engine/events/SetMetadataEvent.cpp b/src/engine/events/SetMetadataEvent.cpp
index af36b5d3..482656ca 100644
--- a/src/engine/events/SetMetadataEvent.cpp
+++ b/src/engine/events/SetMetadataEvent.cpp
@@ -37,20 +37,21 @@ SetMetadataEvent::SetMetadataEvent(
Engine& engine,
SharedPtr<Responder> responder,
SampleCount timestamp,
- bool property,
+ bool meta,
const URI& subject,
const URI& key,
const Atom& value)
: QueuedEvent(engine, responder, timestamp)
, _error(NO_ERROR)
, _special_type(NONE)
- , _property(property)
, _subject(subject)
, _key(key)
, _value(value)
, _object(NULL)
, _patch(NULL)
, _compiled_patch(NULL)
+ , _is_meta(meta)
+ , _success(false)
{
}
@@ -70,40 +71,45 @@ SetMetadataEvent::pre_process()
}
/*cerr << "SET " << _object->path() << (_property ? " PROP " : " VAR ")
- << _key << " :: " << _value.type() << endl;*/
+ << _key << " :: " << _value.type() << endl;*/
- if (_property || !dynamic_cast<GraphObjectImpl*>(_object))
- _object->set_property(_key, _value);
- else
- dynamic_cast<GraphObjectImpl*>(_object)->set_variable(_key, _value);
-
- _patch = dynamic_cast<PatchImpl*>(_object);
-
- if (_key.str() == "ingen:broadcast") {
- _special_type = ENABLE_BROADCAST;
- } else if (_patch) {
- if (!_property && _key.str() == "ingen:enabled") {
- if (_value.type() == Atom::BOOL) {
- _special_type = ENABLE;
- if (_value.get_bool() && !_patch->compiled_patch())
- _compiled_patch = _patch->compile();
- } else {
- _error = BAD_TYPE;
- }
- } else if (!_property && _key.str() == "ingen:polyphonic") {
- if (_value.type() == Atom::BOOL) {
- _special_type = POLYPHONIC;
- } else {
- _error = BAD_TYPE;
- }
- } else if (_property && _key.str() == "ingen:polyphony") {
- if (_value.type() == Atom::INT) {
- _special_type = POLYPHONY;
- _patch->prepare_internal_poly(_value.get_int32());
- } else {
- _error = BAD_TYPE;
+ GraphObjectImpl* obj = dynamic_cast<GraphObjectImpl*>(_object);
+ if (obj) {
+ if (_is_meta)
+ obj->meta().set_property(_key, _value);
+ else
+ obj->set_property(_key, _value);
+
+ _patch = dynamic_cast<PatchImpl*>(_object);
+
+ if (_key.str() == "ingen:broadcast") {
+ _special_type = ENABLE_BROADCAST;
+ } else if (_patch) {
+ if (_key.str() == "ingen:enabled") {
+ if (_value.type() == Atom::BOOL) {
+ _special_type = ENABLE;
+ if (_value.get_bool() && !_patch->compiled_patch())
+ _compiled_patch = _patch->compile();
+ } else {
+ _error = BAD_TYPE;
+ }
+ } else if (_key.str() == "ingen:polyphonic") {
+ if (_value.type() == Atom::BOOL) {
+ _special_type = POLYPHONIC;
+ } else {
+ _error = BAD_TYPE;
+ }
+ } else if (_key.str() == "ingen:polyphony") {
+ if (_value.type() == Atom::INT) {
+ _special_type = POLYPHONY;
+ _patch->prepare_internal_poly(_value.get_int32());
+ } else {
+ _error = BAD_TYPE;
+ }
}
}
+ } else {
+ _object->set_property(_key, _value);
}
QueuedEvent::pre_process();
@@ -155,10 +161,7 @@ SetMetadataEvent::post_process()
switch (_error) {
case NO_ERROR:
_responder->respond_ok();
- if (_property)
- _engine.broadcaster()->send_property_change(_subject, _key, _value);
- else
- _engine.broadcaster()->send_variable_change(_subject, _key, _value);
+ _engine.broadcaster()->send_property_change(_subject, _key, _value);
break;
case NOT_FOUND:
_responder->respond_error((boost::format(