Added AddPortEvent
git-svn-id: http://svn.drobilla.net/lad@65 a436a847-0d15-0410-975c-d299462d15a1
This commit is contained in:
parent
5da27f13a8
commit
9455eb5206
|
@ -0,0 +1,119 @@
|
||||||
|
/* This file is part of Om. Copyright (C) 2006 Dave Robillard.
|
||||||
|
*
|
||||||
|
* Om 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.
|
||||||
|
*
|
||||||
|
* Om 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.,
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "AddPortEvent.h"
|
||||||
|
#include "Responder.h"
|
||||||
|
#include "Patch.h"
|
||||||
|
#include "Tree.h"
|
||||||
|
#include "Plugin.h"
|
||||||
|
#include "Om.h"
|
||||||
|
#include "OmApp.h"
|
||||||
|
#include "Patch.h"
|
||||||
|
#include "Maid.h"
|
||||||
|
#include "util/Path.h"
|
||||||
|
#include "ObjectStore.h"
|
||||||
|
#include "ClientBroadcaster.h"
|
||||||
|
#include "util/Path.h"
|
||||||
|
#include "Port.h"
|
||||||
|
#include "AudioDriver.h"
|
||||||
|
#include "List.h"
|
||||||
|
|
||||||
|
namespace Om {
|
||||||
|
|
||||||
|
|
||||||
|
AddPortEvent::AddPortEvent(CountedPtr<Responder> responder, const string& path, const string& type, bool is_output)
|
||||||
|
: QueuedEvent(responder),
|
||||||
|
_path(path),
|
||||||
|
_type(type),
|
||||||
|
_is_output(is_output),
|
||||||
|
_data_type(DataType::UNKNOWN),
|
||||||
|
_patch(NULL),
|
||||||
|
_port(NULL),
|
||||||
|
_succeeded(true)
|
||||||
|
{
|
||||||
|
string type_str;
|
||||||
|
if (type == "CONTROL" || type == "AUDIO")
|
||||||
|
_data_type = DataType::FLOAT;
|
||||||
|
else if (type == "MIDI")
|
||||||
|
_data_type = DataType::MIDI;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AddPortEvent::~AddPortEvent()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AddPortEvent::pre_process()
|
||||||
|
{
|
||||||
|
if (om->object_store()->find(_path) != NULL) {
|
||||||
|
QueuedEvent::pre_process();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch = om->object_store()->find_patch(_path.parent());
|
||||||
|
|
||||||
|
if (_patch != NULL) {
|
||||||
|
assert(_patch->path() == _path.parent());
|
||||||
|
|
||||||
|
size_t buffer_size = 1;
|
||||||
|
if (_type == "AUDIO" || _type == "MIDI")
|
||||||
|
buffer_size = om->audio_driver()->buffer_size();
|
||||||
|
|
||||||
|
_port = _patch->create_port(_path.name(), _data_type, buffer_size, _is_output);
|
||||||
|
if (_port) {
|
||||||
|
if (_is_output)
|
||||||
|
_patch->add_output(new ListNode<Port*>(_port));
|
||||||
|
else
|
||||||
|
_patch->add_input(new ListNode<Port*>(_port));
|
||||||
|
_ports_array = new Array<Port*>(_patch->num_ports() + 1, _patch->external_ports());
|
||||||
|
_ports_array->at(_patch->num_ports()) = _port;
|
||||||
|
om->object_store()->add(_port);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QueuedEvent::pre_process();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AddPortEvent::execute(samplecount offset)
|
||||||
|
{
|
||||||
|
QueuedEvent::execute(offset);
|
||||||
|
|
||||||
|
if (_port) {
|
||||||
|
om->maid()->push(_patch->external_ports());
|
||||||
|
//_patch->add_port(_port);
|
||||||
|
_patch->external_ports(_ports_array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AddPortEvent::post_process()
|
||||||
|
{
|
||||||
|
if (!_succeeded) {
|
||||||
|
const string msg = string("Could not create port - ").append(_path);// + " already exists.";
|
||||||
|
m_responder->respond_error(msg);
|
||||||
|
} else {
|
||||||
|
m_responder->respond_ok();
|
||||||
|
om->client_broadcaster()->send_port(_port);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace Om
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
/* This file is part of Om. Copyright (C) 2006 Dave Robillard.
|
||||||
|
*
|
||||||
|
* Om 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.
|
||||||
|
*
|
||||||
|
* Om 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.,
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ADDPORTEVENT_H
|
||||||
|
#define ADDPORTEVENT_H
|
||||||
|
|
||||||
|
#include "QueuedEvent.h"
|
||||||
|
#include "util/Path.h"
|
||||||
|
#include "DataType.h"
|
||||||
|
#include "Array.h"
|
||||||
|
#include <string>
|
||||||
|
using std::string;
|
||||||
|
|
||||||
|
template <typename T> class Array;
|
||||||
|
|
||||||
|
namespace Om {
|
||||||
|
|
||||||
|
class Patch;
|
||||||
|
class Port;
|
||||||
|
class Plugin;
|
||||||
|
|
||||||
|
|
||||||
|
/** An event to add a Port to a Patch.
|
||||||
|
*
|
||||||
|
* \ingroup engine
|
||||||
|
*/
|
||||||
|
class AddPortEvent : public QueuedEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AddPortEvent(CountedPtr<Responder> responder, const string& path, const string& type, bool is_output);
|
||||||
|
~AddPortEvent();
|
||||||
|
|
||||||
|
void pre_process();
|
||||||
|
void execute(samplecount offset);
|
||||||
|
void post_process();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Path _path;
|
||||||
|
string _type;
|
||||||
|
bool _is_output;
|
||||||
|
DataType _data_type;
|
||||||
|
Patch* _patch;
|
||||||
|
Port* _port;
|
||||||
|
Array<Port*>* _ports_array; // New (external) ports array for Patch
|
||||||
|
bool _succeeded;
|
||||||
|
/*
|
||||||
|
string m_patch_name;
|
||||||
|
Path m_path;
|
||||||
|
Plugin* m_plugin;
|
||||||
|
bool m_poly;
|
||||||
|
Patch* m_patch;
|
||||||
|
Node* m_node;
|
||||||
|
Array<Node*>* m_process_order; // Patch's new process order
|
||||||
|
bool m_node_already_exists;*/
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace Om
|
||||||
|
|
||||||
|
#endif // ADDPORTEVENT_H
|
Loading…
Reference in New Issue