#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 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_