/*-----------------------------------------------------------------------------
[名称]	BoxSelection.h
[概要]	BOX選択クラスのヘッダ
[備考]	なし
[履歴]	2003-02-24	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/
#if !defined(AFX_BOXSELECTION_H_INCLUDED_)
#define AFX_BOXSELECTION_H_INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "Selection.h"
#include <afxtempl.h>


/*-----------------------------------------------------------------------------
[名称]	BOX選択クラス
[用途]	BOX選択にまつわるデータ保持と処理。
[備考]	なし
-----------------------------------------------------------------------------*/
class CBoxSelection : public CSelection  
{
public:
	// 生成・破棄
	CBoxSelection();
	virtual ~CBoxSelection();

	// 選択状態判断
	virtual BOOL	IsSelected();
	virtual BOOL	IsSelected(
		long	idxRow,
		long	idxColumn
	);

	// 選択状態解除
	virtual void	SetSelectedNutral();

	// 選択テキスト取得
	virtual CString		GetSelectedText();

	// 選択領域設定・取得
	virtual void		SetSelectedStartPixel(
		CPoint&	ptStart
	);
	virtual void		SetSelectedEndPixel(
		CPoint&	ptEnd
	);
	virtual long	GetSelectedStartX(){ return( min(m_lSelectStartX,m_lSelectEndX) ); };
	virtual long	GetSelectedStartY(){ return( min(m_lSelectStartY,m_lSelectEndY) ); };
	virtual long	GetSelectedEndX(){ return( max(m_lSelectStartX,m_lSelectEndX) ); };
	virtual long	GetSelectedEndY(){ return( max(m_lSelectStartY,m_lSelectEndY) ); };
	virtual void	SetSelectedStartY( long idxSelectY );
	virtual void	SetSelectedEndY( long idxSelectY );

	// 選択行情報取得
	virtual CArray<TSelectColumn, TSelectColumn&>*	GetSelectedLinez(){ return(&m_atSelectColumnz); };

	// 選択テキスト消去
	void	BoxClear();

	// 選択領域微調整・再設定
	void	SetLineInfo(
		int	idxRow,
		int	idxColumn
	);
	void	SetLineInfo(
		int	idxRow,
		int	idxStartColumn,
		int	idxEndColumn
	);

	// 選択テキスト行取得
	BOOL GetSelectedLinezWithPadding(
		CStringArray*	pastrLinez,
		long*			pLeftOffset	
	);

	// 選択範囲の空白カラム除去
	void TrimSelection();

protected:

	// 選択領域更新
	void PixelToLinezReflect();

protected:
	long	m_lSelectStartX;		// 選択開始X座標 [文書座標pixel] (-)
	long	m_lSelectStartY;		// 選択終了Y座標 [文書座標pixel] (-)
	long	m_lSelectEndX;			// 選択開始X座標 [文書座標pixel] (-)
	long	m_lSelectEndY;			// 選択終了Y座標 [文書座標pixel] (-)
};

#endif // !defined(AFX_BOXSELECTION_H_INCLUDED_)
