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