00001
00002
00014 #ifndef _Observable_H_
00015 #define _Observable_H_
00016
00017 #include "libhippo.h"
00018
00019 #ifdef _MSC_VER
00020 #include <msdevstudio/MSconfig.h>
00021 #endif
00022
00023 #include <list>
00024
00025 namespace hippodraw
00026 {
00027 class Observer;
00028 }
00029
00040 class MDL_HIPPOPLOT_API Observable
00041 {
00042 public:
00043
00046 typedef std::list < hippodraw::Observer * > ObserverList_t;
00047
00048 private:
00049
00052 ObserverList_t m_list;
00053
00054 protected:
00055
00057 Observable();
00058
00059 public:
00060
00063 virtual ~ Observable ();
00064
00066 void addObserver ( hippodraw::Observer * );
00067
00069 const ObserverList_t & getObservers () const;
00070
00072 void removeObserver ( hippodraw::Observer * );
00073
00080 virtual void notifyObservers () const;
00081
00083 typedef void ( hippodraw::Observer::*Action ) ( const Observable * );
00084
00085 protected:
00086
00089 void notifyObservers ( Action action ) const;
00090
00091 };
00092
00093 #endif // _Observable_H_