MyGUI
3.0.1
|
00001 00007 /* 00008 This file is part of MyGUI. 00009 00010 MyGUI is free software: you can redistribute it and/or modify 00011 it under the terms of the GNU Lesser General Public License as published by 00012 the Free Software Foundation, either version 3 of the License, or 00013 (at your option) any later version. 00014 00015 MyGUI is distributed in the hope that it will be useful, 00016 but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 GNU Lesser General Public License for more details. 00019 00020 You should have received a copy of the GNU Lesser General Public License 00021 along with MyGUI. If not, see <http://www.gnu.org/licenses/>. 00022 */ 00023 #ifndef __MYGUI_WIDGET_EVENT_H__ 00024 #define __MYGUI_WIDGET_EVENT_H__ 00025 00026 #include "MyGUI_Prerequest.h" 00027 #include "MyGUI_Macros.h" 00028 #include "MyGUI_WidgetDefines.h" 00029 #include "MyGUI_WidgetToolTip.h" 00030 #include "MyGUI_InputDefine.h" 00031 00032 namespace MyGUI 00033 { 00034 00035 // делегаты для событий виджета 00036 typedef delegates::CDelegate1<Widget*> EventHandle_WidgetVoid; 00037 typedef delegates::CDelegate2<Widget*, Widget*> EventHandle_WidgetWidget; 00038 typedef delegates::CDelegate2<Widget*, bool> EventHandle_WidgetBool; 00039 typedef delegates::CDelegate2<Widget*, int> EventHandle_WidgetInt; 00040 typedef delegates::CDelegate2<Widget*, size_t> EventHandle_WidgetSizeT; 00041 typedef delegates::CDelegate3<Widget*, int, int> EventHandle_WidgetIntInt; 00042 typedef delegates::CDelegate4<Widget*, int, int, MouseButton> EventHandle_WidgetIntIntButton; 00043 typedef delegates::CDelegate2<Widget*, KeyCode> EventHandle_WidgetKeyCode; 00044 typedef delegates::CDelegate3<Widget*, KeyCode, Char> EventHandle_WidgetKeyCodeChar; 00045 typedef delegates::CDelegate3<Widget*, const std::string&, const std::string&> EventHandle_WidgetStringString; 00046 typedef delegates::CDelegate3<Widget*, Widget*&, size_t &> EventHandle_WidgetRefWidgetRefSizeT; 00047 typedef delegates::CDelegate2<Widget*, const ToolTipInfo& > EventHandle_WidgetToolTip; 00048 00073 class MYGUI_EXPORT WidgetEvent 00074 { 00075 friend class InputManager; 00076 00077 public: 00078 virtual ~WidgetEvent() { } 00079 00080 protected: 00081 WidgetEvent() : 00082 mWidgetEventSender(0), 00083 mRootMouseActive(false), 00084 mRootKeyActive(false) 00085 { 00086 } 00087 00088 public: 00089 00095 EventHandle_WidgetWidget eventMouseLostFocus; 00096 00102 EventHandle_WidgetWidget eventMouseSetFocus; 00103 00110 EventHandle_WidgetIntInt eventMouseDrag; 00111 00118 EventHandle_WidgetIntInt eventMouseMove; 00119 00125 EventHandle_WidgetInt eventMouseWheel; 00126 00134 EventHandle_WidgetIntIntButton eventMouseButtonPressed; 00135 00143 EventHandle_WidgetIntIntButton eventMouseButtonReleased; 00144 00149 EventHandle_WidgetVoid eventMouseButtonClick; 00150 00155 EventHandle_WidgetVoid eventMouseButtonDoubleClick; 00156 00162 EventHandle_WidgetWidget eventKeyLostFocus; 00163 00169 EventHandle_WidgetWidget eventKeySetFocus; 00170 00177 EventHandle_WidgetKeyCodeChar eventKeyButtonPressed; 00178 00184 EventHandle_WidgetKeyCode eventKeyButtonReleased; 00185 00192 EventHandle_WidgetBool eventRootMouseChangeFocus; 00193 00200 EventHandle_WidgetBool eventRootKeyChangeFocus; 00201 00207 EventHandle_WidgetToolTip eventToolTip; 00208 00215 EventHandle_WidgetStringString eventActionInfo; 00216 00223 EventHandle_WidgetRefWidgetRefSizeT _requestGetContainer; 00224 00231 EventHandle_WidgetStringString eventChangeProperty; 00232 00233 protected: 00234 00235 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00236 virtual void onMouseLostFocus(Widget* _new) 00237 { 00238 eventMouseLostFocus(mWidgetEventSender, _new); 00239 } 00240 00241 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00242 virtual void onMouseSetFocus(Widget* _old) 00243 { 00244 eventMouseSetFocus(mWidgetEventSender, _old); 00245 } 00246 00247 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00248 virtual void onMouseDrag(int _left, int _top) 00249 { 00250 eventMouseDrag(mWidgetEventSender, _left, _top); 00251 } 00252 00253 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00254 virtual void onMouseMove(int _left, int _top) 00255 { 00256 eventMouseMove(mWidgetEventSender, _left, _top); 00257 } 00258 00259 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00260 virtual void onMouseWheel(int _rel) 00261 { 00262 eventMouseWheel(mWidgetEventSender, _rel); 00263 } 00264 00265 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00266 virtual void onMouseButtonPressed(int _left, int _top, MouseButton _id) 00267 { 00268 eventMouseButtonPressed(mWidgetEventSender, _left, _top, _id); 00269 } 00270 00271 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00272 virtual void onMouseButtonReleased(int _left, int _top, MouseButton _id) 00273 { 00274 eventMouseButtonReleased(mWidgetEventSender, _left, _top, _id); 00275 } 00276 00277 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00278 virtual void onMouseButtonClick() 00279 { 00280 eventMouseButtonClick(mWidgetEventSender); 00281 } 00282 00283 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00284 virtual void onMouseButtonDoubleClick() 00285 { 00286 eventMouseButtonDoubleClick(mWidgetEventSender); 00287 } 00288 00289 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00290 virtual void onKeyLostFocus(Widget* _new) 00291 { 00292 eventKeyLostFocus(mWidgetEventSender, _new); 00293 } 00294 00295 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00296 virtual void onKeySetFocus(Widget* _old) 00297 { 00298 eventKeySetFocus(mWidgetEventSender, _old); 00299 } 00300 00301 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00302 virtual void onKeyButtonPressed(KeyCode _key, Char _char) 00303 { 00304 eventKeyButtonPressed(mWidgetEventSender, _key, _char); 00305 } 00306 00307 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00308 virtual void onKeyButtonReleased(KeyCode _key) 00309 { 00310 eventKeyButtonReleased(mWidgetEventSender, _key); 00311 } 00312 00313 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00314 virtual void onMouseChangeRootFocus(bool _focus) 00315 { 00316 eventRootMouseChangeFocus(mWidgetEventSender, _focus); 00317 } 00318 00319 // !!! ОБЯЗАТЕЛЬНО в родительском классе вызывать последним 00320 virtual void onKeyChangeRootFocus(bool _focus) 00321 { 00322 eventRootKeyChangeFocus(mWidgetEventSender, _focus); 00323 } 00324 00325 // от чьего имени мы посылаем сообщения 00326 Widget* mWidgetEventSender; 00327 00328 private: 00329 bool mRootMouseActive; 00330 bool mRootKeyActive; 00331 }; 00332 00333 } // namespace MyGUI 00334 00335 #endif // __MYGUI_WIDGET_EVENT_H__