summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/events
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/engine/events')
-rw-r--r--src/libs/engine/events/EnablePortBroadcastingEvent.cpp76
-rw-r--r--src/libs/engine/events/EnablePortBroadcastingEvent.hpp60
-rw-r--r--src/libs/engine/events/Makefile.am2
-rw-r--r--src/libs/engine/events/SetMetadataEvent.cpp13
-rw-r--r--src/libs/engine/events/SetMetadataEvent.hpp1
5 files changed, 14 insertions, 138 deletions
diff --git a/src/libs/engine/events/EnablePortBroadcastingEvent.cpp b/src/libs/engine/events/EnablePortBroadcastingEvent.cpp
deleted file mode 100644
index 1d3d2c9e..00000000
--- a/src/libs/engine/events/EnablePortBroadcastingEvent.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/* This file is part of Ingen.
- * Copyright (C) 2007 Dave Robillard <http://drobilla.net>
- *
- * Ingen 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.
- *
- * Ingen 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 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.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <string>
-#include "interface/ClientInterface.hpp"
-#include "events/EnablePortBroadcastingEvent.hpp"
-#include "Responder.hpp"
-#include "Engine.hpp"
-#include "PortImpl.hpp"
-#include "EngineStore.hpp"
-#include "ClientBroadcaster.hpp"
-#include "AudioBuffer.hpp"
-
-using std::string;
-
-namespace Ingen {
-
-
-EnablePortBroadcastingEvent::EnablePortBroadcastingEvent(Engine& engine,
- SharedPtr<Responder> responder,
- SampleCount timestamp,
- const std::string& port_path,
- bool enable)
-: QueuedEvent(engine, responder, timestamp),
- _port_path(port_path),
- _port(NULL),
- _enable(enable)
-{
-}
-
-
-void
-EnablePortBroadcastingEvent::pre_process()
-{
- _port = _engine.engine_store()->find_port(_port_path);
-
- QueuedEvent::pre_process();
-}
-
-
-void
-EnablePortBroadcastingEvent::execute(ProcessContext& context)
-{
- QueuedEvent::execute(context);
-
- if (_port)
- _port->broadcast(_enable);
-}
-
-
-void
-EnablePortBroadcastingEvent::post_process()
-{
- if (_port)
- _responder->respond_ok();
- else
- _responder->respond_error("Unable to find port for get_value responder.");
-}
-
-
-} // namespace Ingen
-
diff --git a/src/libs/engine/events/EnablePortBroadcastingEvent.hpp b/src/libs/engine/events/EnablePortBroadcastingEvent.hpp
deleted file mode 100644
index f9bc4e98..00000000
--- a/src/libs/engine/events/EnablePortBroadcastingEvent.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/* This file is part of Ingen.
- * Copyright (C) 2007 Dave Robillard <http://drobilla.net>
- *
- * Ingen 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.
- *
- * Ingen 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 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.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef ENABLEPORTBROADCASTINGEVENT_H
-#define ENABLEPORTBROADCASTINGEVENT_H
-
-#include <string>
-#include "QueuedEvent.hpp"
-#include "types.hpp"
-
-using std::string;
-
-namespace Ingen {
-
-class PortImpl;
-namespace Shared { class ClientInterface; }
-using Shared::ClientInterface;
-
-
-/** Enable sending of dynamic value change notifications for a port.
- *
- * \ingroup engine
- */
-class EnablePortBroadcastingEvent : public QueuedEvent
-{
-public:
- EnablePortBroadcastingEvent(Engine& engine,
- SharedPtr<Responder> responder,
- SampleCount timestamp,
- const std::string& port_path,
- bool enable);
-
- void pre_process();
- void execute(ProcessContext& context);
- void post_process();
-
-private:
- const std::string _port_path;
- PortImpl* _port;
- bool _enable;
-};
-
-
-} // namespace Ingen
-
-#endif // ENABLEPORTBROADCASTINGEVENT_H
diff --git a/src/libs/engine/events/Makefile.am b/src/libs/engine/events/Makefile.am
index ccb9e6db..9a8cfbd5 100644
--- a/src/libs/engine/events/Makefile.am
+++ b/src/libs/engine/events/Makefile.am
@@ -23,8 +23,6 @@ EXTRA_DIST = \
DisconnectionEvent.hpp \
EnablePatchEvent.cpp \
EnablePatchEvent.hpp \
- EnablePortBroadcastingEvent.cpp \
- EnablePortBroadcastingEvent.hpp \
LoadPluginsEvent.cpp \
LoadPluginsEvent.hpp \
MidiLearnEvent.cpp \
diff --git a/src/libs/engine/events/SetMetadataEvent.cpp b/src/libs/engine/events/SetMetadataEvent.cpp
index 341fa06c..6e72d57b 100644
--- a/src/libs/engine/events/SetMetadataEvent.cpp
+++ b/src/libs/engine/events/SetMetadataEvent.cpp
@@ -20,6 +20,7 @@
#include <boost/format.hpp>
#include "Responder.hpp"
#include "Engine.hpp"
+#include "PortImpl.hpp"
#include "ClientBroadcaster.hpp"
#include "GraphObjectImpl.hpp"
#include "EngineStore.hpp"
@@ -39,6 +40,7 @@ SetMetadataEvent::SetMetadataEvent(
const Atom& value)
: QueuedEvent(engine, responder, timestamp)
, _error(NO_ERROR)
+ , _special_type(NONE)
, _property(property)
, _path(path)
, _key(key)
@@ -67,6 +69,11 @@ SetMetadataEvent::pre_process()
_object->set_property(_key, _value);
else
_object->set_variable(_key, _value);
+
+ if (_key == "ingen:broadcast") {
+ std::cout << "BROADCAST" << std::endl;
+ _special_type = ENABLE_BROADCAST;
+ }
QueuedEvent::pre_process();
}
@@ -75,6 +82,12 @@ SetMetadataEvent::pre_process()
void
SetMetadataEvent::execute(ProcessContext& context)
{
+ if (_special_type == ENABLE_BROADCAST) {
+ PortImpl* port = dynamic_cast<PortImpl*>(_object);
+ if (port)
+ port->broadcast(_value.get_bool());
+ }
+
QueuedEvent::execute(context);
// Do nothing
}
diff --git a/src/libs/engine/events/SetMetadataEvent.hpp b/src/libs/engine/events/SetMetadataEvent.hpp
index f6f8d3c3..6b9be81c 100644
--- a/src/libs/engine/events/SetMetadataEvent.hpp
+++ b/src/libs/engine/events/SetMetadataEvent.hpp
@@ -50,6 +50,7 @@ public:
private:
enum { NO_ERROR, INVALID_PATH } _error;
+ enum { NONE, ENABLE_BROADCAST } _special_type;
bool _property;
string _path;