MyGUI  3.0.3
MyGUI_WidgetEvent.h
Go to the documentation of this file.
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__