////////////////////////////////////////////////////////////////////////////
// CMouse クラスのインタフェース宣言
//
////////////////////////////////////////////////////////////////////////////

#if !defined( MOUSE_H_INCLUDED_ )
#define MOUSE_H_INCLUDED_

#include <X11/cursorfont.h>

#include "TaEdit_std.h"

#include "ScrollInfoPacket.h"
#include "Cursor.h"
#include "TextEdit.h"

enum TA_EVENT {
	TAE_BUTTON1_DOWN,
	TAE_BUTTON1_UP,
	TAE_MOTION
};

enum TA_MOUSE_STATUS {
	TAMS_NORMAL,
	TAMS_SELECT,	// 範囲選択
	TAMS_TEXTMOVE	// テキストの移動
};

class CTaEditDraw;

class CMouse : public NNabikiVClsPtr::CCPInterface
{
public:
	CMouse( VClsPtr< CCursor > argpCursor, const CTaEditDraw *argpDraw, VClsPtr< CTextEdit > argpEditor );
	~CMouse();

	// カーソルを構築
	void CreateCursor( Widget w );

	// Iビームポインタに変更
	void SetIBeam();

	// アローポインタに変更
	void SetArrow();

	// マウスのイベントの処理
	void OnMouse( TA_EVENT argEvent, int x, int y, ScrollInfoPacket *pPacket, bool OnShift, bool OnCtrl );

	// マウスポインタ移動のイベント
	void OnPointerMotion( int x, int y );

	// 現在のマウスの状態を取得
	TA_MOUSE_STATUS GetMouseStatus() const;

protected:

	// 画面上の位置から、カーソルの指している位置を求める
	void CaclCurPos( int *pPixX, int *pLineY, int wx, int wy ) const;

	TA_MOUSE_STATUS MouseStatus;	// 状態
	TA_EVENT LastEvent;	// 最後に受け取ったイベント

	VClsPtr< CCursor > pCursor;
	const CTaEditDraw *pDraw;
	VClsPtr< CTextEdit > pEditor;

	Cursor IBeamCursor;
	Cursor ArrowCursor;
	int CurrentCursor;	// 0 : Arrow  1 : IBeam
	Widget m_DestWgt;

	T_SelRange TextMoveSource;	// テキスト移動時の移動元
	T_CurPos MouseDownPos;		// マウスが押下された時の文字位置
};

#endif // MOUSE_H_INCLUDED_

