#ifndef __WFX_INPUT_MOUSEEVENT_H__
#define __WFX_INPUT_MOUSEEVENT_H__

#include <WFX/WFXIncludes.h>

namespace WFX {

    namespace input {
    
        /**
         * Mouse event
         * contains information about the mouse event
         */
        class MouseEvent {
            public:
                /** absolute Coordinates */
                UInt X, Y;

                /**
                 * Ctor
                 * @param: x - x axis coordinate
                 * @param: y - y axis coordinate
                 */
                MouseEvent(UInt x, UInt y) : X(x), Y(y) {
                }
                
            protected:

            private:
        };

        /**
         * MouseButtonEvent
         * Describes a Mousebutton press
         */
        class MouseButtonEvent : public MouseEvent {
            public:
                /** 
                 */
                enum BtnState {
                    BS_PRESSED,
                    BS_RELEASED
                };

                /**
                 * Mousebuttons
                 */
                enum MouseButton {
                    MB_LEFT,
                    MB_MIDDLE, 
                    MB_RIGHT,
                    MB_OTHER
                };

                /** which button */
                MouseButton Button;
                
                /** State - Up or Down */
                BtnState State;

                /**
                 * Ctor
                 * @see MouseEvent::MouseEvent()
                 * @param: btn - Button index
                 * @param: s - Current state of the button
                 */
                MouseButtonEvent(UInt x, UInt y, MouseButton btn, BtnState s);
        };

       /**
        * MouseMotionEvent
        * describes a mouse motion
        */
        class MouseMotionEvent : public MouseEvent {
            public:
                /** relative coordinates */
                Int XRel, YRel;

                /**
                 * Ctor
                 * @see MouseEvent::MouseEvent()
                 * @param: xr - x axis relative motion
                 * @param: yr - y axis relative motion
                 */
                MouseMotionEvent(UInt x, UInt y, Int xr, Int yr);

                /** prints some debug information */
                void printDebug();
                
            protected:
            private:
        };
            

        
    }

}



#endif
