Artifact 2b7c9df8032db9a42e10082962e89e93e27d7f4f
#ifndef AFX_ONFIGMANAGER_H__9243DE9D_0F70_40F8_8F90_55436B952B37__INCLUDED_
#define AFX_ONFIGMANAGER_H__9243DE9D_0F70_40F8_8F90_55436B952B37__INCLUDED_
#include "editwing/editwing.h"
#include "OpenSaveDlg.h"
// アプリケーションメッセージ
#define GPM_MRUCHANGED WM_APP+0
//=========================================================================
//@{ @pkg Gp.Main //@}
//@{
// 設定の一元管理
//
// SetDocTypeで切り替えると、文書タイプ依存の項目を内部で
// 適切に切り替えたり色々します。
//@}
//=========================================================================
class ConfigManager : public ki::Object
{
public:
ConfigManager();
~ConfigManager();
//@{ 指定した名前のファイル用の文書タイプをロード //@}
int SetDocType( const ki::Path& fname );
//@{ 指定した番号の文書タイプをロード //@}
void SetDocTypeByMenu( int pos, HMENU m );
//@{ 指定した名前の文書タイプをロード //@}
void SetDocTypeByName( const ki::String& nam );
//@{ メニュー項目作成 //@}
void SetDocTypeMenu( HMENU m, UINT idstart );
//@{ メニュー項目のチェック修正 //@}
void CheckMenu( HMENU m, int pos );
//@{ 設定ダイアログ表示 //@}
bool DoDialog( const ki::Window& parent );
//@{ 生のiniファイル操作オブジェクトを取得 //@}
ki::IniFile& getImpl();
public:
//@{ Undo回数制限値 //@}
int undoLimit() const;
//@{ 文字数のカウント方法 //@}
bool countByUnicode() const;
//@{ 開く/保存ダイアログに出すフィルタの設定 //@}
const ki::String& txtFileFilter() const;
//@{ 文字数指定時の折り返し文字数 //@}
int wrapWidth() const;
//@{ 折り返し方法 //@}
int wrapType() const;
//@{ 行番号表示する? //@}
bool showLN() const;
//@{ 表示色・フォントなど //@}
const editwing::VConfig& vConfig() const;
//@{ キーワードファイル名(フルパス) //@}
ki::Path kwdFile() const;
//@{ Grep用外部実行ファイル名 //@}
const ki::Path& grepExe() const;
//@{ 同じウインドウで開くモード //@}
bool openSame() const;
//@{ ステータスバー表示 //@}
bool showStatusBar() const;
void ShowStatusBarSwitch();
public:
//@{ 新規ファイルの文字コードindex //@}
int GetNewfileCsi() const;
//@{ 新規ファイルの改行コード //@}
ki::lbcode GetNewfileLB() const;
public:
//@{ [最近使ったファイル]へ追加 //@}
void AddMRU( const ki::Path& fname );
//@{ [最近使ったファイル]メニューの構築 //@}
void SetUpMRUMenu( HMENU m, UINT id );
//@{ [最近使ったファイル]取得 //@}
ki::Path GetMRU( int no ) const;
//@{ 対応文字セットリスト取得 //@}
CharSetList& GetCharSetList();
public:
//@{ ウインドウ位置・サイズ復元処理 //@}
int GetWndX() const;
int GetWndY() const;
int GetWndW() const;
int GetWndH() const;
bool GetWndM() const;
void RememberWnd( ki::Window* wnd );
private:
ki::IniFile ini_;
bool sharedConfigMode_;
CharSetList charSets_;
// 全体的な設定
int undoLimit_;
ki::String txtFilter_;
ki::Path grepExe_;
bool openSame_;
bool countbyunicode_;
bool showStatusBar_;
bool rememberWindowSize_;
bool rememberWindowPlace_;
// ウインドウサイズ記憶
bool wndM_; // maximized?
int wndX_, wndY_, wndW_, wndH_;
// 文書タイプのリスト
struct DocType
{
// 定義ファイル名など
ki::String name;
ki::String pattern;
ki::String kwdfile;
ki::String layfile;
// 設定項目
editwing::VConfig vc;
int wrapType;
int wrapWidth;
bool showLN;
};
typedef ki::olist<DocType> DtList;
DtList dtList_;
DtList::iterator curDt_;
// 最近使ったファイルのリスト
int mrus_;
ki::Path mru_[20];
// 新規ファイル関係
int newfileCharset_;
ki::String newfileDoctype_;
ki::lbcode newfileLB_;
private:
void LoadIni();
void SaveIni();
void LoadLayout( DocType* dt );
bool MatchDocType( const unicode* fname, const unicode* pat );
private:
friend struct ConfigDlg;
NOCOPY(ConfigManager);
};
//-------------------------------------------------------------------------
#ifndef __ccdoc__
inline int ConfigManager::undoLimit() const
{ return undoLimit_; }
inline const ki::String& ConfigManager::txtFileFilter() const
{ return txtFilter_; }
inline int ConfigManager::wrapWidth() const
{ return curDt_->wrapWidth; }
inline int ConfigManager::wrapType() const
{ return curDt_->wrapType>0 ? wrapWidth() : curDt_->wrapType; }
inline bool ConfigManager::showLN() const
{ return curDt_->showLN; }
inline const editwing::VConfig& ConfigManager::vConfig() const
{ return curDt_->vc; }
inline ki::Path ConfigManager::kwdFile() const
{ return ki::Path(ki::Path::Exe)+TEXT("type\\")+curDt_->kwdfile; }
inline const ki::Path& ConfigManager::grepExe() const
{ return grepExe_; }
inline bool ConfigManager::openSame() const
{ return openSame_; }
inline bool ConfigManager::showStatusBar() const
{ return showStatusBar_; }
inline void ConfigManager::ShowStatusBarSwitch()
{ showStatusBar_ = !showStatusBar_; SaveIni(); }
inline bool ConfigManager::countByUnicode() const
{ return countbyunicode_; }
inline ki::IniFile& ConfigManager::getImpl()
{ return ini_; }
inline CharSetList& ConfigManager::GetCharSetList()
{ return charSets_; }
inline int ConfigManager::GetNewfileCsi() const
{ return charSets_.findCsi( newfileCharset_ ); }
inline ki::lbcode ConfigManager::GetNewfileLB() const
{ return newfileLB_; }
inline int ConfigManager::GetWndX() const
{ return rememberWindowPlace_ ? wndX_ : CW_USEDEFAULT; }
inline int ConfigManager::GetWndY() const
{ return rememberWindowPlace_ ? wndY_ : CW_USEDEFAULT; }
inline int ConfigManager::GetWndW() const
{ return rememberWindowSize_ ? wndW_ : CW_USEDEFAULT; }
inline int ConfigManager::GetWndH() const
{ return rememberWindowSize_ ? wndH_ : CW_USEDEFAULT; }
inline bool ConfigManager::GetWndM() const
{ return rememberWindowSize_ & wndM_; }
//=========================================================================
#endif // __ccdoc__
#endif // AFX_ONFIGMANAGER_H__9243DE9D_0F70_40F8_8F90_55436B952B37__INCLUDED_