00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifdef __cplusplus
00024
00025 # ifndef OGS_CORE_MODIFIERS_H
00026 # define OGS_CORE_MODIFIERS_H
00027
00028 # include <cassert>
00029 # include <list>
00030
00031 # include <ogs/Support.h>
00032 # include <ogs/core/Modifier.h>
00033 # include <ogs/core/Namespace.h>
00034
00035 OGS_BEGIN_CORE_NAMESPACE
00036
00048 class Modifiers: public std::list<Modifier*>,
00049 public ogs::support::Object,
00050 private ogs::support::Observer {
00051 public:
00052 class Event;
00053
00054 Modifiers ();
00055
00056 void addModifier (Modifier& modifier);
00057 void removeModifier (Modifier& modifier);
00058
00059 Modifier::Value getValue () const;
00060
00061 private:
00062 Modifier::Value _value;
00063
00064 void handleEvent (ogs::support::Event& event);
00065 };
00066
00070 inline
00071 Modifiers::Modifiers ():
00072 _value (0) {
00073
00074 }
00075
00081 inline Modifier::Value
00082 Modifiers::getValue () const {
00083 return (this->_value);
00084 }
00085
00094 class Modifiers::Event: public ogs::support::Event {
00095 public:
00097 enum Type {
00099 ADDED,
00101 REMOVED,
00103 CHANGED
00104 };
00105
00106 Modifier::Value getPreviousValue () const;
00107 Type getType () const;
00108 Modifier& getModifier () const;
00109
00110 protected:
00111 Event (Modifiers& modifiers, Type type, Modifier& modifier);
00112
00113 friend void Modifiers::addModifier (Modifier& modifier);
00114 friend void Modifiers::removeModifier (Modifier& modifier);
00115 friend void Modifiers::handleEvent (ogs::support::Event& event);
00116
00117 private:
00118 Modifier::Value _value;
00119 Type _type;
00120 Modifier* _modifier;
00121 };
00122
00130 inline
00131 Modifiers::Event::Event (Modifiers& modifiers,
00132 Type type,
00133 Modifier& modifier):
00134 ogs::support::Event (modifiers),
00135 _value (modifiers.getValue ()),
00136 _type (type),
00137 _modifier (&modifier) {
00138
00139 }
00140
00146 inline Modifier::Value
00147 Modifiers::Event::getPreviousValue () const {
00148 return (this->_value);
00149 }
00150
00157 inline Modifiers::Event::Type
00158 Modifiers::Event::getType () const {
00159 return (this->_type);
00160 }
00161
00168 inline Modifier&
00169 Modifiers::Event::getModifier () const {
00170 assert (this->_modifier != NULL);
00171 return (*(this->_modifier));
00172 }
00173
00174 OGS_END_CORE_NAMESPACE
00175
00176 # endif
00177
00178 #endif
00179