Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

arsmessages.h

Go to the documentation of this file.
00001 #if !defined( __ARSMESSAGES_H__ )
00002 #define __ARSMESSAGES_H__
00003 
00004 namespace Ars
00005 {
00006 
00007 class MessageClient;
00008 
00009 class Message   {
00010 public:
00011 
00012         enum EMessageType
00013         {
00014                 UNKNOWN = 0,  
00015                 KEYBOARD_KEYDOWN = 1,  
00016                 KEYBOARD_KEYUP = 2,  
00017                 MOUSE_BUTTONDOWN = 3,  
00018                 MOUSE_BUTTONUP = 4,  
00019                 MOUSE_MOVE = 5,  
00020                 CTRL_LCLICK = 7,  
00021                 CTRL_RCLICK = 8,  
00022                 CTRL_MCLICK = 9,  
00023                 CTRL_VALUECHANGE = 10,  
00024                 CTRL_VALUECHANGING = 11,  
00025                 CTRL_RESIZE = 12,  
00026                 CTRL_TIMER = 13,        
00027                 APP_PAINT = 14,  
00028                 APP_EXIT = 15,  
00029                 SETUP_WINDOW = 16, 
00030                 LOST_FOCUS = 17 ,       
00031                 SET_FOCUS = 18 ,                
00032                 DEREG_CHILD = 19 ,      
00033                 PLAY_MPEG = 20 ,        
00034                 USER = 200 
00035         };
00036 
00037 private:
00038 
00040         const EMessageType messageType;
00041 
00043         MessageClient   *destination;
00044 
00045 public:
00046 
00047         void    *from;
00048         unsigned int    line;
00049         std::string     file;
00050 
00054         Message( const EMessageType MessageType , MessageClient *pdestination = 0 )
00055         : messageType( MessageType ) , destination( pdestination )      {}
00056 
00058         virtual ~Message( void )        {}
00059 
00061         const EMessageType MessageType( void ) const  { return messageType; }
00062 
00064         MessageClient *Destination( void ) const  { return destination; }
00065 
00066         void SetTarget( MessageClient *dest )   {       destination = dest;     }
00067 };
00068 
00069 class KeyboardMessage : public Message  {
00070 private:
00071 
00072 public:
00080         KeyboardMessage( const EMessageType MessageType, MessageClient *pDestination, const unsigned char ScanCode, const SDLMod Modifiers, const SDLKey Key, const Uint16 Unicode)
00081         : Message( MessageType , pDestination ) , ScanCode(ScanCode), Modifiers(Modifiers), Key(Key), Unicode(Unicode)
00082         {}
00083 
00084         const unsigned char ScanCode;  
00085         const SDLMod Modifiers;  
00086         const SDLKey Key;  
00087         const Uint16 Unicode;  
00088 };
00089 
00090 
00092 class MouseMessage : public Message     {
00093 public:
00095         enum EMouseButton
00096         {
00097                 NONE = 0, 
00098                 LEFT = 1,  
00099                 RIGHT = 2,  
00100                 MIDDLE = 4  
00101         };
00102 
00109         MouseMessage( const  EMessageType MessageType, MessageClient* pDestination, const  XPoint &Point, const XPoint &Relative, const unsigned int Button)
00110         : Message( MessageType , pDestination ) , Point(Point), Relative(Relative), Button(Button)
00111         {}
00112 
00113 
00115         static unsigned int TranslateSDLButton(Uint8 SDLButton);
00116 
00118         static unsigned int TranslateSDLButtonState(Uint8 SDLButtonState);
00119 
00120         const XPoint Point;  
00121         const XPoint Relative;  
00122         const unsigned int Button;  
00123 };
00124 
00125 
00127 class CtrlMessage : public Message      {
00128 public:
00134         CtrlMessage( const  EMessageType MessageType, MessageClient* pDestination, const  void* pSource, const  long int aValue = 0 )
00135         : Message( MessageType , pDestination ) , source( pSource ) , value( aValue )
00136         {}
00137 
00139         const void      *source;
00140 
00142         const long int value;
00143 };
00144 
00145 
00147 
00148 class ResizeMessage : public CtrlMessage        {
00149 public:
00155         ResizeMessage( const EMessageType MessageType, MessageClient* pDestination, const void* pSource, const XPoint& NewSize)
00156         : CtrlMessage( MessageType , pDestination , pSource ) , size( NewSize )
00157         {}
00158 
00159 
00161         const XPoint size;
00162 };
00163 
00164 
00166 class UserMessage : public Message      {
00167 private:
00169         const unsigned long int subMessage;
00170 
00172         const void *data;
00173 
00174 public:
00180         UserMessage( const EMessageType MessageType , MessageClient* pDestination , const unsigned long int aSubMessage , const void *pData = 0 )
00181         : Message( MessageType , pDestination ) , subMessage( aSubMessage ) , data( pData ) 
00182         {}
00183 
00184         const unsigned long int SubMessage( void ) const        {       return subMessage;      }
00185 
00186         const void *Data( void ) const  {       return data;    }
00187 };
00188 
00189 class MessageClient     {
00190 public:
00192         MessageClient( void );
00193 
00195         virtual ~MessageClient( void );
00196 
00201         virtual const bool HandleMessage( const Message &msg );
00202 
00203         virtual const bool IsVisible( void ) const      {       return true;    };
00204 
00205         virtual const bool evKeyDown( const KeyboardMessage &msg )      {       return false;   }
00206         virtual const bool evKeyUp( const KeyboardMessage &msg )        {       return false;   }
00207         virtual const bool evMouseButtonDown( const MouseMessage &msg ) {       return false;   }
00208         virtual const bool evMouseButtonUp( const MouseMessage &msg )   {       return false;   }
00209         virtual const bool evMouseMove( const MouseMessage &msg )       {       return false;   }
00210         virtual const bool evMouseLClick( const CtrlMessage &msg )      {       return false;   }
00211         virtual const bool evMouseMClick( const CtrlMessage &msg )      {       return false;   }
00212         virtual const bool evMouseRClick( const CtrlMessage &msg )      {       return false;   }
00213         virtual const bool evValueChange( const CtrlMessage &msg )      {       return false;   }
00214         virtual const bool evValueChanging( const CtrlMessage &msg )    {       return false;   }
00215         virtual const bool evTimer( const CtrlMessage &msg )    {       return false;   }
00216         virtual const bool wmResize( const ResizeMessage &msg ) {       return false;   }
00217         virtual const bool wmSetFocus( const Message &msg )     {       return false;   }
00218         virtual const bool wmLostFocus( const CtrlMessage &msg )        {       return false;   }
00219         virtual const bool wmPaint( const Message &msg )        {       return false;   }
00220         virtual const bool SetupWindow( const Message &msg )    {       return false;   }
00221         virtual const bool wmExit( const Message &msg ) {       return false;   }
00222         virtual const bool DeregChild( const CtrlMessage &msg ) {       return false;   }
00226         virtual const bool evPlayMpeg( const CtrlMessage &msg ) {       return false;   }
00227         virtual const bool evMessage( const UserMessage &msg )  {       return false;   }
00228 };
00229 
00231 //typedef std::multimap<unsigned char, CMessageClient*, std::greater<unsigned char> > t_MessageClientPriorityMap;
00232 
00234 //typedef std::map<CMessage::EMessageType, t_MessageClientPriorityMap> t_MessageClientMap;
00235 
00237 
00241 
00242 class MessageServer : public std::deque<Message *>      {
00243 protected:
00244 
00245         friend class Form;
00246 
00247         static MessageServer    *instance;  
00248         std::map< Message::EMessageType , std::vector< std::pair<MessageClient *, bool> > >     messageClients;  
00249 
00251         MessageServer(void);
00252 
00253 public:
00254 
00255         virtual ~MessageServer(void);
00256 
00258         static MessageServer& Instance( void );
00259 
00264         void RegisterMessageClient( MessageClient* pClient, const Message::EMessageType eMessageType );
00265 
00269         void DeregisterMessageClient( MessageClient* pClient, const Message::EMessageType eMessageType );
00270 
00273         void DeregisterMessageClient( MessageClient* pClient );
00274 
00276         void ProcessMessage( void );
00277 
00280         void QueueMessage( Message *msg , const int aLine , const std::string aFile , void *aFrom );
00281         
00283         void LaunchMessage( Message *msg);
00284 
00285         const bool IsRegistered( const Message::EMessageType &type , const MessageClient *target );
00286 
00287 private:
00288 
00289         void HandleTillRoot( Message &msg );
00290 };
00291 
00292 #define ArsPostMessage( a )     MessageServer::Instance().QueueMessage( new a , __LINE__ , __FILE__ , this )
00293 #define ArsSendMessage( a )     MessageServer::Instance().LaunchMessage( new a )
00294 
00295 }
00296 
00297 #endif

Generated on Fri Dec 5 04:05:59 2003 for Borqueror by doxygen 1.3.3