/*-----------------------------------------------------------------------------
[名称]	GeneralSetting.h
[概要]	設定情報クラスのヘッダ
[備考]	なし
[履歴]	2002-12-26	NC		コメント付加(moralog)
		2003-12-22	b031228 (moralog) 等幅フォントの時はルーラを文字数に
		2003-12-26  b031228 (3330)PageUp,Downの挙動(dincom)
		2003-12-28  b040111 (3632)キャレット位置の強調(moralog)
		2004-02-24	b031228 (3367)Grep検索(dincom)
-----------------------------------------------------------------------------*/
#if !defined(_GENERALSETTING_H_INCLUDED_)
#define _GENERALSETTING_H_INCLUDED_

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


//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------

#include "ExeStruct.h"
#include "LogFont.h"
#include "WhitespaceDefine.h"
#include "EmphasisDefine.h"
#include "afxtempl.h"
#include "FliperDefine.h"
#include "CharPalette.h"
#include "CharPaletteManager.h"
#include "PrintDefine.h"
#include "BoxCharDefine.h"
#include "CharPaletteManager.h"

/*-----------------------------------------------------------------------------
[名称]	設定情報クラス
[用途]	設定情報のカプセル。
[備考]	各種設定情報を内部に持つ。singletonパターン。
-----------------------------------------------------------------------------*/
class CGeneralSetting  
{
public:
	// 唯一インスタンスの取得
	static CGeneralSetting*	GetInstance();
	// デストラクタ
	virtual ~CGeneralSetting();

public:
// アトリビュート
	// 設定情報の取得・設定
	CString		GetSettingName(){ return( m_strSettingName ); };
	void		SetSettingName( CString& strSettingName ){ m_strSettingName = strSettingName; };
	CString		GetExt(){ return( m_strExt ); };
	void		SetExt( CString& strExt ){ m_strExt = strExt; };

	// タブ設定の設定・取得
	BOOL		GetTabConvert(){ return( m_bTabConvert ); };
	void		SetTabConvert( BOOL bConvert ){ m_bTabConvert = bConvert; };
	int			GetTabCount(){ return( m_nTab ); };
	void		SetTabCount( int nTab ){ m_nTab = nTab; };
	CString		GetTabString(){ return( m_strTabString ); };
	void		SetTabString( CString& strTabString ){ m_strTabString = strTabString; };

	// 動作の設定・取得
	BOOL		GetOneShotBOXSelect(){ return( m_bOneShotBOXSelect ); };
	void		SetOneShotBOXSelect( BOOL bOneShotBOXSelect ){ m_bOneShotBOXSelect = bOneShotBOXSelect; };
	BOOL		GetBlockAlignment(){ return( m_bBlockAlignment ); };
	void		SetBlockAlignment( BOOL bBlock ) { m_bBlockAlignment = bBlock; };
	CString		GetQuote(){ return( m_strQuote ); };
	void		SetQuote( CString& strQuote ){ m_strQuote = strQuote; };
	BOOL		GetFreeCursor(){ return( m_bFreeCursor ); };
	void		SetFreeCursor( BOOL bFreeCursor ){ m_bFreeCursor = bFreeCursor; };

	// ルーラ設定の設定・取得
	BOOL		GetVisibleRuler(){ return( m_bVisibleRuler ); };
	void		SetVisibleRuler( BOOL& bVisibleRuler ){ m_bVisibleRuler = bVisibleRuler; };
	UINT		GetRulerHeight(){return(m_uiRulerHeight);};
	void		SetRulerHeight( UINT uiRulerHeight ){ m_uiRulerHeight = uiRulerHeight; };
	void		SetRulerFont( CLogFont& fontSrc ){ m_fontRuler.Copy( fontSrc ); };
	CLogFont*	GetRulerFont(){ return( &m_fontRuler ); };
// ▼ (3181) BGN 2003.12.22 (moralog) 等幅フォントの時はルーラを文字数に
	BOOL		GetRulerUnitPixel(){ return( m_bRulerUnitPixel ); };
	void		SetRulerUnitPixel( BOOL bRulerUnitPixel ){ m_bRulerUnitPixel = bRulerUnitPixel; };
// ▲ (3181) END
// ▼ (3632) BGN 2003.12.28 (moralog) キャレット位置の表示
	BOOL		GetCaretMark(){ return( m_bCaretMark ); };
	void		SetCaretMark( BOOL bCaretMark ){ m_bCaretMark = bCaretMark; };
	BOOL		GetCaretLine(){ return( m_bCaretLine ); };
	void		SetCaretLine( BOOL bCaretLine ){ m_bCaretLine = bCaretLine; };
// ▲ (3632) END

	// スクロール設定の設定・取得
	EScrollUnit	GetHScrollUnit(){ return( m_eHScrollUnit ); };
	void		SetHScrollUnit( EScrollUnit eUnit ){ m_eHScrollUnit = eUnit; };
	EScrollUnit	GetVScrollUnit(){ return( m_eVScrollUnit ); };
	void		SetVScrollUnit( EScrollUnit eUnit ){ m_eVScrollUnit = eUnit; };
	UINT		GetWheelMove(){ return( m_uiWheelMove ); };
	void		SetWheelMove( UINT uiWheelMove ){ m_uiWheelMove = uiWheelMove; };

	// ▼ (3330) BGN 2003.12.26 (dincom) 
	BOOL GetRestrainedScroll(){ return( m_bRestrainedScroll ); };
	void SetRestrainedScroll( BOOL bRestrainedScroll ){ m_bRestrainedScroll = bRestrainedScroll; };
	// ▲ (3330) END

	// フォント・余白の設定・取得
	CLogFont*	GetLogFont(){ return(&m_LogFont); };
	UINT		GetRowGap(){ return(m_uiRowGap); };
	void		SetRowGap( UINT uiRowGap ){ m_uiRowGap = uiRowGap; };
	int			GetLeftMargin();
	int			GetTopMargin();
	int			GetLeftNumberMargin(){ return( m_iLeftNumberMargin ); };
	void		SetLeftNumberMargin( int iLeftNumberMargin ){ m_iLeftNumberMargin = iLeftNumberMargin; };
	int			GetLeftBlankMargin(){ return( m_iLeftBlankMargin ); };
	void		SetLeftBlankMargin( int iLeftBlankMargin ){ m_iLeftBlankMargin = iLeftBlankMargin; };
	BOOL		GetVisibleNumber(){ return( m_bVisibleNumber );};
	void		SetVisibleNumber( BOOL bVisibleNumber ){ m_bVisibleNumber = bVisibleNumber; };

	// 空白文字定義の取得
	CWhitespaceDefine*	GetWhitespace(){ return(&m_Whitespace); };

	// 表示色定義の取得
	CEmphasisDefine*	GetEmphasisDefine(){ return( &m_EmphasisDefine ); };

	// 印刷設定の取得
	CPrintDefine*	GetPrintDefine() { return( &m_PrintDefine ); };

	// 上下反転文字定義の取得
	CFliperDefine*	GetFlipz(){ return( &m_Flipz ); };

	// 左右反転文字定義の取得
	CFliperDefine*	GetMirrorz(){ return( &m_Mirrorz ); };

	// 文字パレット定義の取得
	CCharPaletteManager* GetCharPaletteManager(){ return( &m_CharPaletteManager ); };

	// BOX表示文字定義の取得
	CBoxCharDefine*	GetBoxCharDefine(){ return( &m_BoxCharDefine ); };

	// 検索履歴の取得
	CStringArray*	GetSubStringz(){ return( &m_aSubStringz ); };

	// 置換履歴の取得
	CStringArray*	GetReplaceStringz(){ return( &m_aReplaceStringz ); };


// インタフェース
	// ファイルへの書き出し
	virtual BOOL	Write();

	// ファイルからの読み込み
	BOOL			Read();

	// ▼ (3367) BGN 2004.02.19 (dincom)
	// ファイルからの読み込み（設定）
	BOOL			ReadTypeSetting();
	// ▲ (3367) END

protected:
	// 設定情報
	CString				m_strSettingName;		// 設定名称 [-] (-)
	CString				m_strExt;				// 拡張子候補 [デリミタ区切り文字列] (-)

	// フォント・余白
	CLogFont			m_LogFont;				// 表示フォント [-] (-)
	UINT				m_uiRowGap;				// 行ピッチ [Pixel] (-)
	int					m_iLeftNumberMargin;	// 左余白（行番号表示幅） [Pixel] (-)
	int					m_iLeftBlankMargin;		// 左余白（空白のみ幅） [Pixel] (-)
	BOOL				m_bVisibleNumber;		// 行番号表示 [-] (TRUE:表示、FALSE:非表示)

	// 動作
	BOOL				m_bBlockAlignment;		// センタリング指定 [-] (TRUE:ブロック、FALSE:行単位)
	BOOL				m_bOneShotBOXSelect;	// ワンショットBOX選択 [-] (TRUE:ワンショット、FALSE:連続)
	BOOL				m_bFreeCursor;			// フリーカーソルモード [-] (TRUE:ワープロ風フリーカーソル、FALSE:エディタ風カーソル)

	// タブ
	BOOL				m_bTabConvert;			// タブ読み替え [-] (TRUE:読み替え、FALSE:タブ文字)
	CString				m_strTabString;			// タブ読み替え文字列 [-] (-)
	int					m_nTab;					// タブ数 [-] (-)

	// ルーラ
	BOOL				m_bVisibleRuler;		// ルーラ表示 [-] (TRUE:表示、FALSE:非表示)
	UINT				m_uiRulerHeight;		// ルーラ高さ [Pixel] (-)
	CLogFont			m_fontRuler;			// ルーラ用フォント [-] (-)
// ▼ (3181) BGN 2003.12.22 (moralog) 等幅フォントの時はルーラを文字数に
	BOOL				m_bRulerUnitPixel;		// 目盛り単位 [-] (TRUE:Pixel、FALSE:カラム）
// ▲ (3181) END
// ▼ (3632) BGN 2003.12.28 (moralog) キャレット位置の表示
	BOOL				m_bCaretMark;
	BOOL				m_bCaretLine;
// ▲ (3632) END

	// スクロール
	EScrollUnit			m_eHScrollUnit;			// 横スクロール単位 [-] (-)
	EScrollUnit			m_eVScrollUnit;			// 縦スクロール単位 [-] (-)
	UINT				m_uiWheelMove;			// ホイール移動量 [縦横の単位] (-)
	CString				m_strQuote;				// 引用符 [-] (-)
	// ▼ (3330) BGN 2003.12.26 (dincom) 
	BOOL				m_bRestrainedScroll;	// 控えめスクロール [-] (TRUE:ON、FALSE:OFF)
	// ▲ (3330) END

	// 定義
	CWhitespaceDefine	m_Whitespace;			// 空白文字定義 [-] (-)
	CEmphasisDefine		m_EmphasisDefine;		// 強調表示定義 [-] (-)
	CFliperDefine		m_Flipz;				// 上下反転候補 [-] (-)
	CFliperDefine		m_Mirrorz;				// 左右反転候補 [-] (-)
	CPrintDefine		m_PrintDefine;			// 印刷設定 [-] (-)
	CCharPaletteManager	m_CharPaletteManager;	// 文字パレット定義 [-] (-)
	CBoxCharDefine		m_BoxCharDefine;		// BOX表示定義 [-] (-)

	// 検索履歴
	CStringArray		m_aSubStringz;			// 検索文字列群 [-] (-)
	CStringArray		m_aReplaceStringz;		// 置換文字列群 [-] (-)

protected:
	// コンストラクタの隠蔽
	CGeneralSetting();
};

#endif // !defined(_GENERALSETTING_H_INCLUDED_)
