X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2Fengine%2FDispatcher.cxx;h=46d649cfd021f122661fba471fc420baff87eeb1;hb=255150e4eec79294bbd06c7c464f309b4a264960;hp=3a9914ff5652e4576a8abf8d90d7cb5230547db8;hpb=216c15bc1ec59372c7313d273cc0fa1d206a68d4;p=modules%2Fyacs.git diff --git a/src/engine/Dispatcher.cxx b/src/engine/Dispatcher.cxx index 3a9914ff5..46d649cfd 100644 --- a/src/engine/Dispatcher.cxx +++ b/src/engine/Dispatcher.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2006-2014 CEA/DEN, EDF R&D +// Copyright (C) 2006-2023 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -35,6 +35,16 @@ void Observer::notifyObserver(Node* object, const std::string& event) DEBTRACE("notifyObserver " << event << object ); } +void Observer::notifyObserver2(Node* object,const std::string& event, void *something) +{ + DEBTRACE("notifyObserver2 " << event << object ); +} + +void Observer::notifyObserverFromClone(Node *originalInstance, const std::string& event, Node *clonedInstanceGeneratingEvent) +{ + DEBTRACE("notifyObserverFromClone " << event << originalInstance ); +} + Dispatcher* Dispatcher::_singleton = 0; Dispatcher::~Dispatcher() @@ -75,17 +85,43 @@ void Dispatcher::printObservers() void Dispatcher::dispatch(Node* object, const std::string& event) { DEBTRACE("Dispatcher::dispatch " << event ); - typedef std::set::iterator jt; std::pair key(object,event); - if(_observers.count(key) != 0) + std::map< std::pair , std::set >::const_iterator it(_observers.find(key)); + if(it!=_observers.end()) { - for(jt iter=_observers[key].begin();iter!=_observers[key].end();iter++) + for(std::set::const_iterator iter=(*it).second.begin();iter!=(*it).second.end();iter++) { (*iter)->notifyObserver(object,event); } } } +void Dispatcher::dispatch2(Node* object,const std::string& event, void *something) +{ + std::pair key(object,event); + std::map< std::pair , std::set >::const_iterator it(_observers.find(key)); + if(it!=_observers.end()) + { + for(std::set::const_iterator iter=(*it).second.begin();iter!=(*it).second.end();iter++) + { + (*iter)->notifyObserver2(object,event,something); + } + } +} + +void Dispatcher::dispatchFromClone(Node *originalInstance, const std::string& event, Node *clonedInstanceGeneratingEvent) +{ + std::pair key(originalInstance,event); + std::map< std::pair , std::set >::const_iterator it(_observers.find(key)); + if(it!=_observers.end()) + { + for(std::set::const_iterator iter=(*it).second.begin();iter!=(*it).second.end();iter++) + { + (*iter)->notifyObserverFromClone(originalInstance,event,clonedInstanceGeneratingEvent); + } + } +} + void Dispatcher::addObserver(Observer* observer,Node* object, const std::string& event) { _observers[std::pair(object,event)].insert(observer);