/*-----------------------------------------------------------------------------
[名称]	Selection.h
[概要]	選択クラス（基底）のヘッダ
[備考]	なし
[履歴]	2003-02-26	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/
#if !defined(AFX_SELECTION_H_INCLUDED_)
#define AFX_SELECTION_H_INCLUDED_

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


//-----------------------------------------------------------------------------
// インクルード・不完全定義
//-----------------------------------------------------------------------------
#include <afxtempl.h>
class CShitarabianDoc;


/*-----------------------------------------------------------------------------
[名称]	選択行情報
[用途]	行内の選択されたカラム情報。
[備考]	なし
-----------------------------------------------------------------------------*/
typedef struct
{
	long	idxStart;		// 選択開始カラム [-] (-)
	long	idxEnd;			// 選択終了カラム [-] (-)
} TSelectColumn;


/*-----------------------------------------------------------------------------
[名称]	選択クラス
[用途]	選択操作に関するクラスの基底クラス
[備考]	なし
-----------------------------------------------------------------------------*/
class CSelection  
{
public:
	// 生成・破棄
	CSelection();
	virtual ~CSelection();

	// ドキュメントのアタッチ
	virtual void Attach( CShitarabianDoc* pDoc ){ m_pDoc = pDoc; };

	// 選択情報
	virtual BOOL			IsSelected();
	virtual BOOL			IsSelected(
		long	idxRow,
		long	idxColumn
	);

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

	// 選択始端設定
	virtual void			SetSelectedStart(
		long	idxRow,
		long	idxColumn
	);

	// 選択終端設定
	virtual void			SetSelectedEnd(
		long	idxRow,
		long	idxColumn
	);

	// 選択位置情報正規化
	virtual void Normalize();

	// 選択位置取得
	virtual long			GetSelectedStartColumn();
	virtual long			GetSelectedStartRow();
	virtual long			GetSelectedEndColumn();
	virtual long			GetSelectedEndRow();

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

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

	// 選択行情報更新
	virtual BOOL			SetSelectedLinez( int idxLine, TSelectColumn& tSelect );

protected:
	CShitarabianDoc*	m_pDoc;						// ドキュメントへのポインタ [-] (-)
	CArray<TSelectColumn, TSelectColumn&>	m_atSelectColumnz;	// 行ごとの選択カラム情報 [-] (-)

	long			m_idxSelectedRowStart;			// 選択領域始端行 [-] (-)
	long			m_idxSelectedColumnStart;		// 選択領域始端カラム [-] (-)
	long			m_idxSelectedRowEnd;			// 選択領域終端行 [-] (-)
	long			m_idxSelectedColumnEnd;			// 選択領域終端カラム [-] (-)
};

#endif // !defined(AFX_SELECTION_H_INCLUDED_)
