dcdd144598 2011-02-23 kinaba: #ifndef AFX_SEARCH_H__201E0D70_9C20_420A_8600_966D2BA23010__INCLUDED_ dcdd144598 2011-02-23 kinaba: #define AFX_SEARCH_H__201E0D70_9C20_420A_8600_966D2BA23010__INCLUDED_ dcdd144598 2011-02-23 kinaba: #include "editwing/editwing.h" dcdd144598 2011-02-23 kinaba: #include "kilib/window.h" dcdd144598 2011-02-23 kinaba: #include "kilib/memory.h" dcdd144598 2011-02-23 kinaba: #include "kilib/ktlaptr.h" dcdd144598 2011-02-23 kinaba: #include "kilib/string.h" dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ @pkg Gp.Search //@} dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // 検索オブジェクト dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: class Searchable : public ki::Object dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: public: dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // 検索を行う dcdd144598 2011-02-23 kinaba: // @param str 対象文字列 dcdd144598 2011-02-23 kinaba: // @param len 対象文字列の長さ dcdd144598 2011-02-23 kinaba: // @param stt 検索開始index。0なら先頭から dcdd144598 2011-02-23 kinaba: // @param mbg マッチ結果の先頭index dcdd144598 2011-02-23 kinaba: // @param med マッチ結果の終端indexの1個後ろ dcdd144598 2011-02-23 kinaba: // @return マッチしたかどうか dcdd144598 2011-02-23 kinaba: // dcdd144598 2011-02-23 kinaba: // 下方向サーチオブジェクトの場合、stt <= *beg の範囲 dcdd144598 2011-02-23 kinaba: // 上方向サーチオブジェクトの場合、*beg <= stt の範囲を検索 dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: virtual bool Search( const unicode* str, ulong len, ulong stt, dcdd144598 2011-02-23 kinaba: ulong* mbg, ulong* med ) = 0; dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // 検索管理人 dcdd144598 2011-02-23 kinaba: // dcdd144598 2011-02-23 kinaba: // 前回検索したときのオプションや検索文字列を覚えておくのが dcdd144598 2011-02-23 kinaba: // このクラスの担当。検索・置換ダイアログの表示等もここで dcdd144598 2011-02-23 kinaba: // やるかもしれない。 dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: class SearchManager : ki::DlgImpl dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: typedef editwing::DPos DPos; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: public: dcdd144598 2011-02-23 kinaba: //@{ コンストラクタ。特記事項無し //@} dcdd144598 2011-02-23 kinaba: SearchManager( ki::Window& w, editwing::EwEdit& e ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ デストラクタ。特記事項無し //@} dcdd144598 2011-02-23 kinaba: ~SearchManager(); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 検索ダイアログ表示 //@} dcdd144598 2011-02-23 kinaba: void ShowDlg(); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ [次を検索]コマンド //@} dcdd144598 2011-02-23 kinaba: void FindNext(); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ [前を検索]コマンド //@} dcdd144598 2011-02-23 kinaba: void FindPrev(); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 今すぐ検索可能か? //@} dcdd144598 2011-02-23 kinaba: bool isReady() const dcdd144598 2011-02-23 kinaba: { return searcher_.isValid(); } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 設定Save //@} dcdd144598 2011-02-23 kinaba: void SaveToINI( ki::IniFile& ini ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 設定Load //@} dcdd144598 2011-02-23 kinaba: void LoadFromINI( ki::IniFile& ini ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 苦肉の策^^; //@} dcdd144598 2011-02-23 kinaba: bool TrapMsg(MSG* msg); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 見つかりませんでしたダイアログ //@} dcdd144598 2011-02-23 kinaba: void NotFound(); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: private: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ [置換]コマンド //@} dcdd144598 2011-02-23 kinaba: void ReplaceImpl(); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ [全置換]コマンド //@} dcdd144598 2011-02-23 kinaba: void ReplaceAllImpl(); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: private: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: virtual void on_init(); dcdd144598 2011-02-23 kinaba: virtual void on_destroy(); dcdd144598 2011-02-23 kinaba: virtual bool on_command( UINT cmd, UINT id, HWND ctrl ); dcdd144598 2011-02-23 kinaba: void on_findnext(); dcdd144598 2011-02-23 kinaba: void on_findprev(); dcdd144598 2011-02-23 kinaba: void on_replacenext(); dcdd144598 2011-02-23 kinaba: void on_replaceall(); dcdd144598 2011-02-23 kinaba: void UpdateData(); dcdd144598 2011-02-23 kinaba: void ConstructSearcher( bool down=true ); dcdd144598 2011-02-23 kinaba: void FindNextImpl(); dcdd144598 2011-02-23 kinaba: void FindPrevImpl(); dcdd144598 2011-02-23 kinaba: bool FindNextFromImpl( DPos s, DPos* beg, DPos* end ); dcdd144598 2011-02-23 kinaba: bool FindPrevFromImpl( DPos s, DPos* beg, DPos* end ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: private: dcdd144598 2011-02-23 kinaba: editwing::EwEdit& edit_; dcdd144598 2011-02-23 kinaba: ki::dptr<Searchable> searcher_; dcdd144598 2011-02-23 kinaba: ki::Window& mainWnd_; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: bool bIgnoreCase_; // 大文字小文字を同一視? dcdd144598 2011-02-23 kinaba: bool bRegExp_; // 正規表現? dcdd144598 2011-02-23 kinaba: bool bDownSearch_; // 検索方向 dcdd144598 2011-02-23 kinaba: bool bChanged_; // 前回のsearcher構築時から変更があったらtrue dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: ki::String findStr_; dcdd144598 2011-02-23 kinaba: ki::String replStr_; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: private: dcdd144598 2011-02-23 kinaba: NOCOPY(SearchManager); dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: #endif // AFX_SEARCH_H__201E0D70_9C20_420A_8600_966D2BA23010__INCLUDED_