3 # include <simgear_config.h>
6 #include "AtomicChangeListener.hxx"
12 #include <boost/bind.hpp>
14 #include <simgear/structure/Singleton.hxx>
20 MultiChangeListener::MultiChangeListener()
24 void MultiChangeListener::valueChanged(SGPropertyNode* node)
26 valueChangedImplementation();
29 void MultiChangeListener::valueChangedImplementation()
33 AtomicChangeListener::AtomicChangeListener(std::vector<SGPropertyNode*>& nodes)
34 : _dirty(false), _valid(true)
36 listenToProperties(nodes.begin(), nodes.end());
39 void AtomicChangeListener::unregister_property(SGPropertyNode* node)
42 // not necessary, but good hygine
43 vector<SGPropertyNode*>::iterator itr
44 = find(_watched.begin(), _watched.end(), node);
45 if (itr != _watched.end())
47 MultiChangeListener::unregister_property(node);
50 void AtomicChangeListener::fireChangeListeners()
52 vector<SGSharedPtr<AtomicChangeListener> >& listeners
53 = ListenerListSingleton::instance()->listeners;
54 for (vector<SGSharedPtr<AtomicChangeListener> >::iterator itr = listeners.begin(),
55 end = listeners.end();
58 (*itr)->valuesChanged();
59 (*itr)->_dirty = false;
64 void AtomicChangeListener::valueChangedImplementation()
69 ListenerListSingleton::instance()->listeners.push_back(this);
73 void AtomicChangeListener::valuesChanged()