Files
Work/test/FIND.CPP
2024-08-07 09:16:27 -04:00

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);
}