#pragma once

class CPoint;
typedef unsigned int UINT;

namespace roy {

    namespace ih {

        class input_handler
        {
        public:
            input_handler(void);
            virtual ~input_handler(void);

            virtual bool    OnLButtonDown(UINT nFlags, CPoint point);
            virtual bool    OnLButtonUp(UINT nFlags, CPoint point);
            virtual bool    OnLButtonDblClk(UINT nFlags, CPoint point);

            virtual bool    OnRButtonDown(UINT nFlags, CPoint point);
            virtual bool    OnRButtonUp(UINT nFlags, CPoint point);
            virtual bool    OnRButtonDblClk(UINT nFlags, CPoint point);

            virtual bool    OnMButtonDown(UINT nFlags, CPoint point);
            virtual bool    OnMButtonUp(UINT nFlags, CPoint point);
            virtual bool    OnMButtonDblClk(UINT nFlags, CPoint point);

            virtual bool    OnMouseWheel(UINT nFlags, short zDelta, CPoint point);

            virtual bool    OnMouseMove(UINT nFlags, CPoint point);

            virtual bool    OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
            virtual bool    OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);

            //------------------------------------------------------------------------------------------------------------
            // Entering / Leaving 
            //------------------------------------------------------------------------------------------------------------
            //
            // @note        It is assumed that these two methods are called before/after all
            //              of the message calls.
            //
            virtual void    OnEntering(void);
            virtual void    OnLeaving(void);
        };

    }

}

