/*!
 	@file
 	@brief	マウスドライバ
\n			このクラスを継承して各ＯＳごとの機能をラップします
 */

#ifndef CMouseDriver_h
#define CMouseDriver_h

#include"../../Setup/CompileMode.h"
#include"../../Auxiliary/Macro.h"
#include<vector>
#include<boost/smart_ptr.hpp>

namespace Maid
{
	/*!
	 	@class	IMouseDriver CMouseDriver.h
	 	@brief	マウスドライバ
	\n			メンバ関数の指定引数 Index は
	\n			0..Ｘ軸   1..Ｙ軸   2..ホイール  3以降..拡張マウス
	\n			になっています
	 */

	class IMouseDriver
	{
	public:
		virtual ~IMouseDriver()=0{};	//!<	デストラクタ

		//! マウスドライバの初期化
		/*!
		 	@return 初期化に成功したら MRESULT_OK
		\n			初期化に失敗したら MRESULT_OK 以外
		 */
		virtual void	Initialize()=0;
		//! マウスドライバの解放
		/*!
		 */
		virtual void		Finalize()=0;

		//! 各軸の座標および各ボタンが押されているかを取得する
		/*!
		 	@param	PosList	[ o]	各軸の状態
		 	@param	KeyList	[ o]	各ボタンの状態
		 */
		virtual void	GetState( MySTL::vector<int>& PosList, MySTL::vector<bool>& KeyList ) const=0;


		//! このドライバで識別できる軸の数を取得する
		/*!
		 	@return 軸の数
		 */
		virtual int	GetPositionMax() const=0;

		//! このドライバで識別できるボタンの数を取得する
		/*!
		 	@return ボタンの数
		 */
		virtual int	GetButtonMax() const=0;

		//! OSで供給されているマウスカーソルを表示・非表示させる
		/*!
			@param	IsShow [i ]	表示させるなら true
		 */
		virtual void SetDrawHardWareCursor( bool IsShow )=0;

		//! OSで供給されているマウスカーソルが表示されているか？
		/*!
		 	@retval true  表示されている
		 	@retval false 表示されていない
		 */
		virtual bool IsCursorShow() const=0;
	};

	typedef boost::shared_ptr<IMouseDriver> SPMOUSEDRIVER;

}

#endif