192 lines
4.1 KiB
C++
192 lines
4.1 KiB
C++
#include <apispy/find.hpp>
|
|
#include <common/keydata.hpp>
|
|
|
|
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);
|
|
}
|
|
|
|
|