#include #include Find::Find(void) : mLastFindIndex(-1) { mKeyDownHandler.setCallback(this,&Find::keyDownHandler); mDlgCodeHandler.setCallback(this,&Find::dlgCodeHandler); mEditHook.insertHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler); mEditHook.insertHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler); } Find::Find(const Find &find) { // private implementation *this=find; } Find::~Find() { mEditHook.removeHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler); mEditHook.removeHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler); } Find &Find::operator=(const Find &find) { // private implementation return *this; } void Find::perform(GUIWindow &parentWindow) { create(parentWindow); } void Find::create(GUIWindow &parentWindow) { String staticName("STATIC"); String editName("EDIT"); String buttonName("BUTTON"); DialogTemplate dlgTemplate; DialogItemTemplate staticFind; DialogItemTemplate editFind; DialogItemTemplate cancelButton; DialogItemTemplate fnButton; DialogItemTemplate wmButton; dlgTemplate.titleText("Find"); dlgTemplate.posRect(Rect(10,73,236,62)); dlgTemplate.pointSize(8); dlgTemplate.typeFace("Helv"); dlgTemplate.style(DS_MODALFRAME|WS_VISIBLE|WS_CAPTION|DS_3DLOOK|WS_SYSMENU|DS_SETFONT|WS_POPUP); // WS_POPUP staticFind.className(staticName); staticFind.titleText("Fi&nd what:"); staticFind.style(WS_CHILD|WS_VISIBLE); staticFind.posRect(Rect(4,8,42,8)); staticFind.itemID(-1); editFind.className(editName); editFind.titleText(""); editFind.style(WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP|WS_GROUP); editFind.posRect(Rect(47,7,128,12)); editFind.itemID(FindText); fnButton.className(buttonName); fnButton.titleText("&Find Next"); fnButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP|BS_DEFPUSHBUTTON); fnButton.posRect(Rect(182,5,50,14)); fnButton.itemID(FindNext); wmButton.className(buttonName); wmButton.titleText("Match &whole word only"); wmButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX|WS_GROUP); wmButton.posRect(Rect(4,26,100,12)); wmButton.itemID(FindWhole); cancelButton.className(buttonName); cancelButton.titleText("Cancel"); cancelButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP); cancelButton.posRect(Rect(182,23,50,14)); cancelButton.itemID(CancelFind); dlgTemplate+=staticFind; dlgTemplate+=editFind; dlgTemplate+=cancelButton; dlgTemplate+=fnButton; dlgTemplate+=wmButton; createDialog(parentWindow,dlgTemplate,DynamicDialog::ModelessDialog); } CallbackData::ReturnType Find::keyDownHandler(CallbackData &someCallbackData) { KeyData keyData(someCallbackData); String strEditText; if(!keyData.isEnterKey())return (CallbackData::ReturnType)FALSE; getText(strEditText); leaveEdit(strEditText); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType Find::dlgCodeHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)DLGC_WANTALLKEYS; } WORD Find::dlgCommand(DWORD commandID,CallbackData &someCallbackData) { switch(commandID) { case FindText : break; case FindNext : handleFindNext(); break; case CancelFind : destroy(); break; } return FALSE; } WORD Find::dlgCode(CallbackData &someCallbackData) { return DLGC_WANTALLKEYS; } BOOL Find::dlgInitDialog(CallbackData &/*someCallbackData*/) { mEditHook.hookWin(getItem(FindText)); init(); return TRUE; } void Find::dlgDestroyDialog(CallbackData &/*someCallbackData*/) { mEditHook.unhookWin(); return; } void Find::getText(String &strEditText) { String strText; DynamicDialog::getText(FindText,strText); strEditText=strText; } BOOL Find::matchWholeWordOnly(void)const { return ::SendMessage(getItem(FindWhole),BM_GETCHECK,0,0L); } void Find::handleFind(void) { find(); } void Find::handleFindNext(void) { findNext(); } // virtuals void Find::init(void) { } void Find::find(void) { String currText; getText(currText); lastSearchText(currText); } void Find::findNext(void) { String currText; getText(currText); lastSearchText(currText); } void Find::leaveEdit(const String &strEditText) { lastSearchText(strEditText); }