Changeset 10517 for code/branches/core7
- Timestamp:
- May 31, 2015, 10:54:39 AM (9 years ago)
- Location:
- code/branches/core7/src/libraries/core/singleton
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core7/src/libraries/core/singleton/ScopeManager.cc
r10516 r10517 64 64 { 65 65 this->listeners_[scope].insert(listener); 66 if (this->isActive(scope))67 this->activateListener(listener);68 66 } 69 67 70 68 void ScopeManager::removeListener(ScopeListener* listener, ScopeID::Value scope) 71 69 { 72 if (this->isActive(scope))73 this->deactivateListener(listener);74 70 this->listeners_[scope].erase(listener); 75 71 } … … 84 80 { 85 81 for (std::set<ScopeListener*>::iterator it = this->listeners_[scope].begin(); it != this->listeners_[scope].end(); ++it) 86 this->deactivateListener(*it); 82 if ((*it)->bActivated_) 83 this->deactivateListener(*it); 87 84 } 88 85 … … 95 92 void ScopeManager::deactivateListener(ScopeListener* listener) 96 93 { 97 if (listener->bActivated_) 94 try 95 { listener->deactivated(); } 96 catch (...) 97 { orxout(internal_warning) << "ScopeListener::deactivated() failed! This MUST NOT happen, fix it!" << endl; } 98 listener->bActivated_ = false; 99 } 100 101 void ScopeManager::updateListeners() 102 { 103 std::map<ScopeID::Value, std::set<ScopeListener*> >::iterator it1; 104 for (it1 = this->listeners_.begin(); it1 != this->listeners_.end(); ++it1) 98 105 { 99 try 100 { listener->deactivated(); } 101 catch (...) 102 { orxout(internal_warning) << "ScopeListener::deactivated() failed! This MUST NOT happen, fix it!" << endl; } 103 listener->bActivated_ = false; 106 const ScopeID::Value& scope = it1->first; 107 const std::set<ScopeListener*>& listeners = it1->second; 108 109 bool scopeIsActive = this->isActive(scope); 110 for (std::set<ScopeListener*>::const_iterator it2 = listeners.begin(); it2 != listeners.end(); ++it2) 111 { 112 ScopeListener* listener = (*it2); 113 114 if (scopeIsActive && !listener->bActivated_) 115 this->activateListener(listener); 116 else if (!scopeIsActive && listener->bActivated_) 117 this->deactivateListener(listener); 118 } 104 119 } 105 120 } -
code/branches/core7/src/libraries/core/singleton/ScopeManager.h
r10515 r10517 64 64 bool isActive(ScopeID::Value scope); 65 65 66 /** Registers a listener for the given scope. If the scope is already active, the listener is activate immediately.*/66 /** Registers a listener for the given scope. */ 67 67 void addListener(ScopeListener* listener, ScopeID::Value scope); 68 /** Unregisters a listener for the given scope. If the scope is still active, the listener is deactivated before removal.*/68 /** Unregisters a listener for the given scope. */ 69 69 void removeListener(ScopeListener* listener, ScopeID::Value scope); 70 71 /** 72 * Checks for all listeners if their activity matches the activity of the scope. 73 * If not, listeners are activated or deactivated depending on their state. 74 */ 75 void updateListeners(); 70 76 71 77 private:
Note: See TracChangeset
for help on using the changeset viewer.