From 6ed65a4a3b14d204a24ab63fa907f8e9adce01dc Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 10 Jun 2008 17:41:26 +0000 Subject: Fix 'disconnect' operation for all objects (inc. patch ports). Fixes ticket #147. git-svn-id: http://svn.drobilla.net/lad/ingen@1265 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/events/DisconnectNodeEvent.cpp | 135 ------------------------- 1 file changed, 135 deletions(-) delete mode 100644 src/libs/engine/events/DisconnectNodeEvent.cpp (limited to 'src/libs/engine/events/DisconnectNodeEvent.cpp') diff --git a/src/libs/engine/events/DisconnectNodeEvent.cpp b/src/libs/engine/events/DisconnectNodeEvent.cpp deleted file mode 100644 index 4fa92af0..00000000 --- a/src/libs/engine/events/DisconnectNodeEvent.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* This file is part of Ingen. - * Copyright (C) 2007 Dave Robillard - * - * 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 -#include -#include -#include -#include "ClientBroadcaster.hpp" -#include "ConnectionImpl.hpp" -#include "DisconnectNodeEvent.hpp" -#include "DisconnectionEvent.hpp" -#include "Engine.hpp" -#include "InputPort.hpp" -#include "NodeImpl.hpp" -#include "ObjectStore.hpp" -#include "OutputPort.hpp" -#include "PatchImpl.hpp" -#include "PortImpl.hpp" -#include "Responder.hpp" -#include "util.hpp" - -namespace Ingen { - - -DisconnectNodeEvent::DisconnectNodeEvent(Engine& engine, SharedPtr responder, SampleCount timestamp, const string& node_path) -: QueuedEvent(engine, responder, timestamp), - _node_path(node_path), - _patch(NULL), - _node(NULL), - _succeeded(true), - _lookup(true) -{ -} - - -/** Internal version, disconnects parent port as well (in the case of InputNode, etc). - */ -DisconnectNodeEvent::DisconnectNodeEvent(Engine& engine, NodeImpl* node) -: QueuedEvent(engine), - _node_path(node->path()), - _patch(node->parent_patch()), - _node(node), - _succeeded(true), - _lookup(false) -{ -} - - -DisconnectNodeEvent::~DisconnectNodeEvent() -{ - for (Raul::List::iterator i = _disconnection_events.begin(); i != _disconnection_events.end(); ++i) - delete (*i); -} - - -void -DisconnectNodeEvent::pre_process() -{ - if (_lookup) { - _patch = _engine.object_store()->find_patch(_node_path.parent()); - - if (_patch == NULL) { - _succeeded = false; - QueuedEvent::pre_process(); - return; - } - - _node = _engine.object_store()->find_node(_node_path); - - if (_node == NULL) { - _succeeded = false; - QueuedEvent::pre_process(); - return; - } - } - - for (PatchImpl::Connections::const_iterator i = _patch->connections().begin(); i != _patch->connections().end(); ++i) { - ConnectionImpl* c = (ConnectionImpl*)i->get(); - if ((c->src_port()->parent_node() == _node || c->dst_port()->parent_node() == _node) && !c->pending_disconnection()) { - DisconnectionEvent* ev = new DisconnectionEvent(_engine, SharedPtr(new Responder()), _time, - c->src_port(), c->dst_port()); - ev->pre_process(); - _disconnection_events.push_back(new Raul::List::Node(ev)); - c->pending_disconnection(true); - } - } - - _succeeded = true; - QueuedEvent::pre_process(); -} - - -void -DisconnectNodeEvent::execute(ProcessContext& context) -{ - QueuedEvent::execute(context); - - if (_succeeded) { - for (Raul::List::iterator i = _disconnection_events.begin(); i != _disconnection_events.end(); ++i) - (*i)->execute(context); - } -} - - -void -DisconnectNodeEvent::post_process() -{ - if (_succeeded) { - if (_responder) - _responder->respond_ok(); - for (Raul::List::iterator i = _disconnection_events.begin(); i != _disconnection_events.end(); ++i) - (*i)->post_process(); - } else { - if (_responder) - _responder->respond_error("Unable to disconnect all ports."); - } -} - - -} // namespace Ingen - -- cgit v1.2.1