Changeset 5866 for code/branches/core5/src/libraries/core/BaseObject.cc
- Timestamp:
- Oct 3, 2009, 6:32:05 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core5/src/libraries/core/BaseObject.cc
r5858 r5866 94 94 if (this->isInitialized()) 95 95 { 96 for (std:: list<BaseObject*>::const_iterator it = this->events_.begin(); it != this->events_.end(); ++it)97 (*it)->unregisterEventListener(this);98 99 for (std:: map<BaseObject*, std::string>::const_iterator it = this->eventListeners_.begin(); it != this->eventListeners_.end(); ++it)100 it->first->removeEvent(this);96 for (std::map<BaseObject*, std::string>::const_iterator it = this->eventSources_.begin(); it != this->eventSources_.end(); ) 97 this->removeEventSource((it++)->first); 98 99 for (std::set<BaseObject*>::const_iterator it = this->eventListeners_.begin(); it != this->eventListeners_.end(); ) 100 (*(it++))->removeEventSource(this); 101 101 102 102 for (std::map<std::string, EventContainer*>::const_iterator it = this->eventContainers_.begin(); it != this->eventContainers_.end(); ++it) … … 145 145 { 146 146 std::string sectionname = (*it); 147 ExecutorMember<BaseObject>* loadexecutor = createExecutor(createFunctor(&BaseObject::addEvent ), std::string( "BaseObject" ) + "::" + "addEvent");148 ExecutorMember<BaseObject>* saveexecutor = createExecutor(createFunctor(&BaseObject::getEvent ), std::string( "BaseObject" ) + "::" + "getEvent");147 ExecutorMember<BaseObject>* loadexecutor = createExecutor(createFunctor(&BaseObject::addEventSource), std::string( "BaseObject" ) + "::" + "addEventSource"); 148 ExecutorMember<BaseObject>* saveexecutor = createExecutor(createFunctor(&BaseObject::getEventSource), std::string( "BaseObject" ) + "::" + "getEventSource"); 149 149 loadexecutor->setDefaultValue(1, sectionname); 150 saveexecutor->setDefaultValue(1, sectionname); 150 151 151 152 XMLPortClassObjectContainer<BaseObject, BaseObject>* container = 0; … … 224 225 } 225 226 226 void BaseObject::addEvent(BaseObject* event, const std::string& sectionname) 227 { 228 event->registerEventListener(this, sectionname); 229 this->events_.push_back(event); 230 } 231 232 void BaseObject::removeEvent(BaseObject* event) 233 { 234 this->events_.remove(event); 235 } 236 237 BaseObject* BaseObject::getEvent(unsigned int index) const 227 /** 228 @brief Adds a new event source for a specific state. 229 @param source The object which sends events to this object 230 @param state The state of this object which will be affected by the events 231 */ 232 void BaseObject::addEventSource(BaseObject* source, const std::string& state) 233 { 234 this->eventSources_[source] = state; 235 source->registerEventListener(this); 236 } 237 238 /** 239 @brief Removes an eventsource (but doesn't unregister itself at the source). 240 */ 241 void BaseObject::removeEventSource(BaseObject* source) 242 { 243 this->eventSources_.erase(source); 244 source->unregisterEventListener(this); 245 } 246 247 /** 248 @brief Returns an eventsource with a given index. 249 */ 250 BaseObject* BaseObject::getEventSource(unsigned int index, const std::string& state) const 238 251 { 239 252 unsigned int i = 0; 240 for (std::list<BaseObject*>::const_iterator it = this->events_.begin(); it != this->events_.end(); ++it) 241 { 253 for (std::map<BaseObject*, std::string>::const_iterator it = this->eventSources_.begin(); it != this->eventSources_.end(); ++it) 254 { 255 if (it->second != state) 256 continue; 257 242 258 if (i == index) 243 return (*it);259 return it->first; 244 260 ++i; 245 261 } … … 268 284 } 269 285 286 /** 287 @brief Fires an event (without a state). 288 */ 270 289 void BaseObject::fireEvent() 271 290 { … … 274 293 } 275 294 295 /** 296 @brief Fires an event which activates or deactivates a state. 297 */ 276 298 void BaseObject::fireEvent(bool activate) 277 299 { … … 279 301 } 280 302 303 /** 304 @brief Fires an event which activates or deactivates a state with agiven originator (the object which sends the event). 305 */ 281 306 void BaseObject::fireEvent(bool activate, BaseObject* originator) 282 307 { 283 308 Event event(activate, originator); 284 309 285 for (std::map<BaseObject*, std::string>::iterator it = this->eventListeners_.begin(); it != this->eventListeners_.end(); ++it) 286 { 287 event.sectionname_ = it->second; 288 it->first->processEvent(event); 289 } 290 } 291 310 for (std::set<BaseObject*>::iterator it = this->eventListeners_.begin(); it != this->eventListeners_.end(); ++it) 311 { 312 event.sectionname_ = (*it)->eventSources_[this]; 313 (*it)->processEvent(event); 314 } 315 } 316 317 /** 318 @brief Fires an event, using the Event struct. 319 */ 292 320 void BaseObject::fireEvent(Event& event) 293 321 { 294 for (std:: map<BaseObject*, std::string>::iterator it = this->eventListeners_.begin(); it != this->eventListeners_.end(); ++it)295 it->first->processEvent(event);322 for (std::set<BaseObject*>::iterator it = this->eventListeners_.begin(); it != this->eventListeners_.end(); ++it) 323 (*it)->processEvent(event); 296 324 } 297 325
Note: See TracChangeset
for help on using the changeset viewer.