// ★コメント未記入
/*-----------------------------------------------------------------------------
[名称]	ShitarabianView.h
[概要]	CShitarabianView のヘッダ
[備考]	なし
[履歴]	2004-02-09	b031228 (3367)Grep検索(dincom)
		2004-05-10	b031228 (3204)へぼぺとの連携(moralog)
-----------------------------------------------------------------------------*/

#if !defined(AFX_SHITARABIANVIEW_H_INCLUDED_)
#define AFX_SHITARABIANVIEW_H_INCLUDED_

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

class CPrintDefine;
class CShitarabianDoc;

class CShitarabianView : public CView
{
protected: // シリアライズ機能のみから作成します。
	CShitarabianView();
	DECLARE_DYNCREATE(CShitarabianView)

// アトリビュート
public:
	CShitarabianDoc* GetDocument();

// オペレーション
public:
	int VisibleRowStart();
	int VisibleRowCount();

	void SetPrevVisibleRow( int iStart, int nRow){
			m_iPrevVisibleRowStart=iStart;
			m_iPrevVisibleRowCount=nRow;
	};
	int GetPrevVisibleRowStart(){ return( m_iPrevVisibleRowStart ); };
	int GetPrevVisibleRowCount(){ return( m_iPrevVisibleRowCount ); };

	// スクロールバーの大きさを再計算する
	void RecalcScrollBar();

	BOOL	ScrollToCaret();

	void DrawPage(
		CDC*	pDC,
		CRect*	prcRequest = NULL
	);
	void DrawStatusBar();

	void DrawToROI(
		CDC*		pDstDC,
		int			iDstLeft,
		int			iDstTop,
		CRect		rcSrc
	);

	void UpdateScrollBox(
		CPoint		ptOldBox,
		CPoint		ptNewBox,
		CRect		rcClient
	);

	void		BoxDelete();
	void		BoxClear();


	void SetUpdateStartRow(
		int		idxStartRow
	){ m_idxUpdateStartRow = idxStartRow; };

	void SetUpdateEndRow(
		int		idxEndRow
	){ m_idxUpdateEndRow = idxEndRow; };

	void ToNormal();
	void ToBoxSelection();
	void ToFloating(
		CString		strLinez,
		int			iPixelX,
		int			iPixelY
	);
	void BoxSelectToFloating();

	void	ResetHScroll(){ m_lMaxXPixel = 0; };
	void	SetHScrollWidth( int iMaxXPixel ){ m_lMaxXPixel = iMaxXPixel; };
	int		GetHScrollWidth(){ return( m_lMaxXPixel ); };

	void VScrollCore(
		UINT		nSBCode,
		UINT		nPos,
		CScrollBar*	pScrollBar,
		CPoint		ptOldScroll
	);
	void HScrollCore(
		UINT		nSBCode,
		UINT		nPos,
		CScrollBar*	pScrollBar,
		CPoint		ptOldScroll
	);


	BOOL	OnKeyDown(
		UCHAR	unKey,
		BOOL	bShift,
		BOOL	bCtrl,
		BOOL	bAlt
	);

	BOOL	OnChar(
		CString	strChar,
		BOOL	bShift,
		BOOL	bCtrl,
		BOOL	bAlt,
		BOOL	bTranslate
	);

	// いきなり検索
	void FindMagicRod();

// ▼ (3204) BGN 2004.05.10 (moralog) ランチャツールバー追加
	void SelectMagicRod();
// ▲ (3204) END

// オーバーライド
	// ClassWizard は仮想関数のオーバーライドを生成します。
	//{{AFX_VIRTUAL(CShitarabianView)
	public:
	virtual void OnDraw(CDC* pDC);  // このビューを描画する際にオーバーライドされます。
	virtual BOOL PreTranslateMessage(MSG* pMsg);
	virtual void OnPrepareDC(CDC* pDC, CPrintInfo* pInfo = NULL);
	protected:
	virtual void OnInitialUpdate(); // 構築後の最初の１度だけ呼び出されます。
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
	//}}AFX_VIRTUAL

// インプリメンテーション
public:
	virtual ~CShitarabianView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

	CPoint	GetDeviceScrollPosition();
	void	SetDeviceScrollPosition( CPoint pt );

protected:
	int		m_idxUpdateStartRow;
	int		m_idxUpdateEndRow;

	BOOL	m_bVisibleCaret;
	BOOL	m_bDrag;
	BOOL	m_bInputMode;

	void DrawCaret(
		CDC*	pDC
	);

	CPoint PixelToScrollBox(
		CPoint	ptPixel
	);
	CPoint ScrollBoxToPixel(
		CPoint	ptPixel
	);


	void SetScrollSizes(
		CSize	sizeDocument,
		CSize	sizePage,
		CSize	sizeLine
	);

	int		m_iFloatOffsetX;
	int		m_iFloatOffsetY;

	long	m_lMaxXPixel;				// 水平要求最大幅　[プレーン]
	long	m_nRow;						// ドキュメントの全体の行数

	long	m_iPrevVisibleRowStart;
	long	m_iPrevVisibleRowCount;

	void	ManualVScroll( long lPos );
	void	ManualHScroll( long lPos );



	void PrintColumn(
		CDC*			pDC,
		CPrintInfo*		pInfo,
		CSize			sizeMemDCPixel,
		int				iStartLine,
		int				iEndLine
	);

	void PrintHeader(
		CDC*			pDC,
		CPrintInfo*		pInfo,
		CPrintDefine*	pPrint,
		CSize			sizePrinterPageDP
	);
	void PrintFooter(
		CDC*			pDC,
		CPrintInfo*		pInfo,
		CPrintDefine*	pPrint,
		CSize			sizePrinterPageDP
	);

	void SelectToken();

	// いきなり選択
	void SelectMagicRod(
		CPoint	ptCursor
	);

	// フローティング移動処理
	BOOL MoveFloatPosition(
		CPoint&	ptFloat
	);

// 生成されたメッセージ マップ関数
protected:
	//{{AFX_MSG(CShitarabianView)
	afx_msg void OnSetFocus(CWnd* pOldWnd);
	afx_msg void OnKillFocus(CWnd* pNewWnd);
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
	afx_msg void OnDropFiles(HDROP hDropInfo);
	afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
	afx_msg void OnEditModeselect();
	afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnEditFloatCancel();
	afx_msg void OnEditFloatCopy();
	afx_msg void OnEditFloatMove();
	afx_msg LRESULT OnRegisteredMouseWheel( WPARAM wParam, LPARAM lParam );
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

	BOOL	PreTranslateNormalMode( MSG* pMsg, BOOL bShift, BOOL bCtrl, BOOL bAlt );
	BOOL	PreTranslateBoxSelectMode( MSG* pMsg, BOOL bShift, BOOL bCtrl, BOOL bAlt );
	BOOL	PreTranslateFloatingMode( MSG* pMsg, BOOL bShift, BOOL bCtrl, BOOL bAlt );
	BOOL	PreTranslateROIMode( MSG* pMsg, BOOL bShift, BOOL bCtrl, BOOL bAlt );

	BOOL	PreTranslateKeyDownBoxSelectMode(
				UCHAR	unKey,
				BOOL	bShift,
				BOOL	bCtrl,
				BOOL	bAlt
	);

	BOOL	PreTranslateKeyDownFloatingMode(
				UCHAR	unKey,
				BOOL	bShift,
				BOOL	bCtrl,
				BOOL	bAlt
	);

	BOOL	PreTranslateKeyDownNormalMode(
				UCHAR	unKey,
				BOOL	bShift,
				BOOL	bCtrl,
				BOOL	bAlt
	);


	BOOL	PreTranslateCharBoxSelectMode(
				CString	strChar,
				BOOL	bShift,
				BOOL	bCtrl,
				BOOL	bAlt
	);

	BOOL	PreTranslateCharFloatingMode(
				CString	strChar,
				BOOL	bShift,
				BOOL	bCtrl,
				BOOL	bAlt
	);

	BOOL	PreTranslateCharNormalMode(
				CString	strChar,
				BOOL	bShift,
				BOOL	bCtrl,
				BOOL	bAlt
	);

	BOOL	PreTranslateKeyDownROIMode(
				UCHAR	unKey,
				BOOL	bShift,
				BOOL	bCtrl,
				BOOL	bAlt
	);


	BOOL	PreTranslateCharROIMode(
				CString	strChar,
				BOOL	bShift,
				BOOL	bCtrl,
				BOOL	bAlt
	);


	void	PixelToCaret(
		CPoint		posCursor,		// I  :指定座標 [Doc上Pixel座標] (-) :-
		long*		pidxRow,		//   O:行 [-] (-) :-
		long*		pidxColumn		//   O:カラム [-] (-) :-
	);

	void	NormalPopUp(
		CPoint		posCursor		// I  :指定座標 [クライアントPixel座標] (-)
	);

	// ▼ (3367) BGN 2004.02.09 (dincom)
	BOOL	IsProgress();
	// ▲ (3367) END

};

#ifndef _DEBUG  // ShitarabianView.cpp ファイルがデバッグ環境の時使用されます。
inline CShitarabianDoc* CShitarabianView::GetDocument()
   { return (CShitarabianDoc*)m_pDocument; }
#endif

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。

#endif // !defined(AFX_SHITARABIANVIEW_H_INCLUDED_)
