/*****************************************************************************
 * $LastChangedDate: 2009-11-07 22:56:33 -0500 (Sat, 07 Nov 2009) $
 * @file
 * @author  Jim E. Brooks  http://www.palomino3d.org
 * @brief   Mouse device (Singleton).
 * @remarks device_keyboard and device_mouse are identical.
 *//*
 * LEGAL:   COPYRIGHT (C) 2009 JIM E. BROOKS
 *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
 *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
 *****************************************************************************/

#ifndef INPUT_DEVICE_MOUSE_HH
#define INPUT_DEVICE_MOUSE_HH 1

#define GET_MOUSE_DEVICE() (input::MouseDevice::GetInstance())

#include "input/event_mouse.hh"
#include "input/device.hh"

namespace input {

////////////////////////////////////////////////////////////////////////////////
/// @brief Mouse device (Singleton).
///
/// This is a special singleton that instantiates a system-specific derivative of itself.
///
class MouseDevice : public Device<MouseEvent>
{
PREVENT_COPYING(MouseDevice)
protected:
                    MouseDevice( void );
    virtual         ~MouseDevice();

//------------------------------------------------------------------------------
// Interface:
public:
    CLASS_METHOD MouseDevice& GetInstance( void );  // creates system-specific derivative

// (inherits Device interface [device.hh])

//------------------------------------------------------------------------------

private:
    CLASS_VAR MouseDevice* msInstance;  ///< Singleton
};

} // namespace input

#endif // INPUT_DEVICE_MOUSE_HH
