OpenLexocad  27.1
AbstractBehaviorMode.h
Go to the documentation of this file.
1 
8 #ifndef ABSTRACTBEHAVIORMODE_H
9 #define ABSTRACTBEHAVIORMODE_H
10 
11 #include <Base/Base.h>
12 #include <Base/Observer.h>
13 #include <Core/EventInterface.h>
14 #include <Core/GUIInterface.h>
15 #include <Core/ServiceInterface.h>
16 #include <Core/ViewInterface.h>
17 
18 #include <string>
19 
20 
21 namespace Core
22 {
24 
25 
26 
27 //
28 #pragma warning(disable : 4251)
29 
30 
31 typedef std::map<std::string, bool> BehaviorAttributeMap;
32 
33 
38 class LX_CORE_EXPORT AbstractBehaviorMode : public Base::BaseClass, public Base::Subject<BehaviorModeNotification>
39 {
41 
42 protected:
44 
45 public:
46  virtual ~AbstractBehaviorMode(void);
47  void setInterfaces(ViewMgrInterface* vi, GUIInterface* gi, ServiceInterface* si);
48  void setViewInterface(ViewMgrInterface* vi);
49  void setGuiInterface(GUIInterface* gi);
50  void setServiceInterface(ServiceInterface* si);
51 
52  virtual void keyPress(const KeyEvent& event);
53  virtual void keyRelease(const KeyEvent& event);
54  virtual void wheel(const MWheelEvent& event);
55  virtual void mouseMove(const MouseEvent& event);
56  virtual void mousePress(const MouseEvent& event);
57  virtual void mouseRelease(const MouseEvent& event);
58  virtual void mouseEnter(void);
59  virtual void mouseLeave(void);
60  virtual void resize(const ResizeEvent& event);
61 
62  virtual void reset(void) = 0;
63  virtual void initialProcedure(void) = 0;
64  virtual void finalProcedure(void) = 0;
65 
66  virtual void setTextInput(const std::string& input);
67  virtual void setAttributes(const BehaviorAttributeMap& attributes);
68 
69  virtual const char* subject_name(void) { return "AbstractBehaviorMode"; };
70 
71 
72 
73 protected:
74  ViewMgrInterface* _view_i;
77 
78 
81 
82 
83  void defaultEnd(void);
84 };
85 
86 
87 
92 class LX_CORE_EXPORT AbstractBehaviorSubMode
93 {
94 public:
96  virtual ~AbstractBehaviorSubMode(void);
97 
98  virtual void keyPress(const KeyEvent& event);
99  virtual void wheel(const MWheelEvent& event);
100  virtual void mouseMove(const MouseEvent& event);
101  virtual void mousePress(const MouseEvent& event);
102  virtual void mouseRelease(const MouseEvent& event);
103  virtual void mouseEnter(void);
104  virtual void mouseLeave(void);
105 
106  virtual void setTextInput(const std::string& input);
107  virtual int getId(void) const = 0;
108 };
109 
110 
111 
115 class LX_CORE_EXPORT BehaviorModeNotification
116 {
117 public:
118  enum Reason
119  {
122  UNBLOCK_MOUSE_REQUEST
123  };
124 
126 };
127 
128 
129 
134 class LX_CORE_EXPORT BehaviorModeFactory
135 {
136 public:
137  BehaviorModeFactory(void);
138  ~BehaviorModeFactory(void);
139 
140  virtual AbstractBehaviorMode* createByFactory(ViewMgrInterface* vi, GUIInterface* gi, ServiceInterface* si) = 0;
141 
142  static std::map<std::string, BehaviorModeFactory*> _registry;
143  static bool registerFactory(const std::string& name, BehaviorModeFactory* fact);
144 
145  static AbstractBehaviorMode* create(ViewMgrInterface* vi, GUIInterface* gi, ServiceInterface* si, const std::string& type);
146 };
147 
148 
149 
150 } // namespace Core
151 
152 
153 
154 #define ADD_BEHAVIORMODE_FACTORY(_factoryName_, _class_) \
155  class _factoryName_ : public Core::BehaviorModeFactory \
156  { \
157  private: \
158  virtual Core::AbstractBehaviorMode* createByFactory(Core::ViewMgrInterface* vi, Core::GUIInterface* gi, Core::ServiceInterface* si) \
159  { \
160  Core::AbstractBehaviorMode* o = new _class_; \
161  o->setInterfaces(vi, gi, si); \
162  return o; \
163  } \
164  };
165 
166 
167 #define REGISTER_BEHAVIORMODE_FACTORY(_factoryName_, _class_) \
168  Core::BehaviorModeFactory::_registry[#_class_] = (Core::BehaviorModeFactory*)new _factoryName_();
169 
170 
171 
172 //#define INIT_TEST \
173 // if (!_view_i || !_gui_i || !_service_i) \
174 // { \
175 // L2D_Debug::l_DebugE(L2D_Debug::WARNINGS, "Behavior Mode has no valid interfaces!\n"); \
176 // return; \
177 // } \
178 
179 
180 #endif
std::map< std::string, bool > BehaviorAttributeMap
Definition: AbstractBehaviorMode.h:23
ServiceInterface * _service_i
Definition: AbstractBehaviorMode.h:76
Definition: AbstractBehaviorMode.h:38
Core::PropertyText name
Definition: CoreDocument.h:167
Definition: AbstractBehaviorMode.h:134
int _old_mouse_y
Definition: AbstractBehaviorMode.h:80
Definition: AbstractBehaviorMode.h:115
Definition: EventInterface.h:147
Definition: EventInterface.h:86
Definition: AbstractBehaviorMode.h:92
BaseClass class and root of the type system.
Definition: Base.h:85
Reason
Definition: AbstractBehaviorMode.h:118
Definition: Observer.h:16
Definition: Base.h:12
Definition: ServiceInterface.h:95
Definition: AbstractBehaviorMode.h:120
GUIInterface * _gui_i
Definition: AbstractBehaviorMode.h:75
Definition: EventInterface.h:138
Definition: ViewInterface.h:34
Definition: AbstractBehaviorMode.h:121
static std::map< std::string, BehaviorModeFactory * > _registry
Definition: AbstractBehaviorMode.h:142
int _old_mouse_x
Definition: AbstractBehaviorMode.h:79
Definition: EventInterface.h:117
Reason _why
Definition: AbstractBehaviorMode.h:125
Definition: GUIInterface.h:20
virtual const char * subject_name(void)
Definition: AbstractBehaviorMode.h:69
TYPESYSTEM_HEADER()