00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 #ifndef _WG_MESSAGE_H_
00026 #define _WG_MESSAGE_H_
00027 
00028 #include "wg_point.h"
00029 #include "wg_rect.h"
00030 #include "SDL.h"
00031 #include <string>
00032 
00033 
00034 namespace wGui
00035 {
00036 
00037 class CMessageClient;
00038 
00040 
00043 
00044 class CMessage
00045 {
00046 public:
00048      enum EMessageType
00049      {
00050           UNKNOWN = 0,  
00051           APP_DESTROY_FRAME,  
00052           APP_EXIT,  
00053           APP_PAINT,     
00054           CTRL_DOUBLELCLICK,  
00055           CTRL_DOUBLEMCLICK,  
00056           CTRL_DOUBLERCLICK,  
00057           CTRL_GAININGKEYFOCUS,  
00058           CTRL_GAININGMOUSEFOCUS,  
00059           CTRL_LOSINGKEYFOCUS,  
00060           CTRL_LOSINGMOUSEFOCUS,   
00061           CTRL_MESSAGEBOXRETURN,   
00062           CTRL_RESIZE,  
00063           CTRL_SINGLELCLICK,  
00064           CTRL_SINGLEMCLICK,  
00065           CTRL_SINGLERCLICK,  
00066           CTRL_TIMER, 
00067           CTRL_VALUECHANGE,  
00068           CTRL_VALUECHANGING,  
00069           KEYBOARD_KEYDOWN,  
00070           KEYBOARD_KEYUP,  
00071           MOUSE_BUTTONDOWN,  
00072           MOUSE_BUTTONUP,  
00073           MOUSE_MOVE,  
00074           SDL,  
00075           USER  
00076      };
00077 
00082      CMessage(const EMessageType MessageType, const CMessageClient* pDestination, const CMessageClient* pSource);
00083 
00085      virtual ~CMessage(void) { }
00086 
00089      const EMessageType MessageType(void) { return m_MessageType; }
00090 
00093      const CMessageClient* Destination(void) { return m_pDestination; }
00094 
00097      const CMessageClient* Source(void) { return m_pSource; }
00098 
00099 protected:
00101      const EMessageType m_MessageType;
00102 
00104      const CMessageClient* m_pDestination;
00105 
00107      const CMessageClient* m_pSource;
00108 
00109 private:
00110      void operator=(CMessage) { }  
00111 };
00112 
00113 
00115 
00116 class CSDLMessage : public CMessage
00117 {
00118 public:
00124      CSDLMessage(const EMessageType MessageType, const CMessageClient* pDestination, const CMessageClient* pSource, SDL_Event SDLEvent);
00125 
00126      SDL_Event SDLEvent;  
00127 };
00128 
00129 
00131 
00132 class CKeyboardMessage : public CMessage
00133 {
00134 public:
00143      CKeyboardMessage(const EMessageType MessageType, const CMessageClient* pDestination, const CMessageClient* pSource,
00144           unsigned char ScanCode, SDLMod Modifiers, SDLKey Key, Uint16 Unicode);
00145 
00146      unsigned char ScanCode;  
00147      SDLMod Modifiers;  
00148      SDLKey Key;  
00149      Uint16 Unicode;  
00150 };
00151 
00152 
00154 
00155 class CMouseMessage : public CMessage
00156 {
00157 public:
00159      enum EMouseButton
00160      {
00161           NONE = 0,                
00162           LEFT = 1,                
00163           RIGHT = 2,               
00164           MIDDLE = 4,              
00165           WHEELUP = 8,        
00166           WHEELDOWN = 16 
00167      };
00168 
00176      CMouseMessage(const EMessageType MessageType, const CMessageClient* pDestination, const CMessageClient* pSource,
00177           CPoint Point, CPoint Relative, unsigned int Button);
00178 
00180      static unsigned int TranslateSDLButton(Uint8 SDLButton);
00181 
00183      static unsigned int TranslateSDLButtonState(Uint8 SDLButtonState);
00184 
00185      CPoint Point;  
00186      CPoint Relative;  
00187      unsigned int Button;  
00188 };
00189 
00190 
00193 
00194 template<typename T>
00195 class CValueMessage : public CMessage
00196 {
00197 public:
00198 
00204      CValueMessage(const EMessageType MessageType, const CMessageClient* pDestination, const CMessageClient* pSource, const T& Value ) :
00205           CMessage(MessageType, pDestination, pSource),
00206           m_Value(Value)
00207      { }
00208 
00211      const T& Value(void) { return m_Value; }
00212 
00215      void SetValue(const T& Value) { m_Value = Value; }
00216 
00217 protected:
00218 
00220      T m_Value;
00221 };
00222 
00223 
00225 
00226 typedef CValueMessage<int> TIntMessage;  
00227 typedef CValueMessage<float> TFloatMessage;  
00228 typedef CValueMessage<double> TDoubleMessage;  
00229 typedef CValueMessage<std::wstring> TStringMessage;  
00230 typedef CValueMessage<CPoint> TPointMessage;  
00231 typedef CValueMessage<CRect> TRectMessage;  
00232 
00233 }
00234 
00235 
00236 #include "unit_tests/wg_message_unittests.h"
00237 
00238 #endif // _WG_MESSAGE_H_
00239