home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1998 May
/
Pcwk5b98.iso
/
Borland
/
Cplus45
/
BC45
/
OWL1.PAK
/
EDITWND.CPP
< prev
next >
Wrap
Text File
|
1995-08-29
|
5KB
|
171 lines
// ObjectWindows - (C) Copyright 1992 by Borland International
/* --------------------------------------------------------
EDITWND.CPP
Defines type TEditWindow, a text editor (cannot perform
file I/O)).
-------------------------------------------------------- */
#include "editwnd.h"
__link(RegEdit)
TSearchDialog::TSearchDialog(PTWindowsObject AParent,
int ResourceId, TSearchStruct &SearchStruct, PTModule AModule)
: TDialog(AParent, ResourceId, AModule)
{
new TEdit(this, ID_SEARCHTEXT, sizeof SearchStruct.SearchText,
GetModule());
new TCheckBox(this, ID_CASESENSITIVE, (PTGroupBox)NULL, GetModule());
if ( ResourceId == SD_REPLACE )
{
new TEdit(this, ID_REPLACETEXT, sizeof SearchStruct.ReplaceText,
GetModule());
new TCheckBox(this, ID_REPLACEALL, (PTGroupBox)NULL, GetModule());
new TCheckBox(this, ID_PROMPTONREPLACE, (PTGroupBox)NULL, GetModule());
}
TransferBuffer = &SearchStruct;
}
/* Constructor for a TEditWindow. Initializes its data fields using
passed parameters and default values. Constructs its child edit
control. */
TEditWindow::TEditWindow(PTWindowsObject AParent, LPSTR ATitle,
PTModule AModule)
: TWindow(AParent, ATitle, AModule)
{
Editor = new TEdit(this, ID_EDITOR, NULL, 0, 0, 0, 0, 0, TRUE, GetModule());
Editor->Attr.Style |= ES_NOHIDESEL;
IsReplaceOp = FALSE;
memset(&SearchStruct, 0x0, sizeof SearchStruct);
}
/* Responds to an incoming WM_SIZE message by resizing the child edit
control according to the size of the TEditWindow's client area. */
void TEditWindow::WMSize(RTMessage Msg)
{
TWindow::WMSize(Msg);
SetWindowPos(Editor->HWindow, 0, -1, -1, LOWORD(Msg.LParam)+2,
HIWORD(Msg.LParam)+2, SWP_NOZORDER);
}
/* Responds to an incoming WM_SETFOCUS message by setting the focus to
the child edit control. */
void TEditWindow::WMSetFocus(RTMessage)
{
SetFocus(Editor->HWindow);
}
void TEditWindow::DoSearch()
{
char S[81];
LPSTR P;
int Rslt = 0;
BOOL TextFoundSinceUserInput = FALSE;
do {
Rslt = Editor->Search(-1, SearchStruct.SearchText,
SearchStruct.CaseSensitive);
if ( Rslt == -1 )
{
if ( !IsReplaceOp || !SearchStruct.ReplaceAll ||
!TextFoundSinceUserInput )
{
P = SearchStruct.SearchText;
wsprintf(S, "\"%0.60s\" not found.", P);
MessageBox(HWindow, S, "Find error",
MB_OK | MB_ICONEXCLAMATION);
}
}
else
if ( IsReplaceOp )
{
if ( !SearchStruct.PromptOnReplace )
{
TextFoundSinceUserInput = TRUE;
Editor->Insert(SearchStruct.ReplaceText);
}
else
{
Rslt = MessageBox(HWindow, "Replace this occurrence?",
"Search/Replace", MB_YESNOCANCEL | MB_ICONQUESTION);
if ( Rslt == IDYES )
Editor->Insert(SearchStruct.ReplaceText);
else
if ( Rslt == IDCANCEL )
return;
TextFoundSinceUserInput = FALSE;
}
}
}
while ( (Rslt != -1) && SearchStruct.ReplaceAll && IsReplaceOp );
}
/* */
void TEditWindow::CMEditFind(RTMessage)
{
if (GetModule()->ExecDialog( new TSearchDialog(
this, SD_SEARCH, SearchStruct, GetModule())) == IDOK )
{
IsReplaceOp = FALSE;
DoSearch();
}
}
/* */
void TEditWindow::CMEditFindNext(RTMessage)
{
DoSearch();
}
/* */
void TEditWindow::CMEditReplace(RTMessage)
{
if (GetModule()->ExecDialog( new TSearchDialog(
this, SD_REPLACE, SearchStruct, GetModule())) == IDOK )
{
IsReplaceOp = TRUE;
DoSearch();
}
}
/* Reads an instance of TEditWindow from the passed ipstream. */
void *TEditWindow::read(ipstream& is)
{
TWindow::read(is);
GetChildPtr(is, (PTWindowsObject)Editor);
is.readBytes(SearchStruct.SearchText, 81);
is >> SearchStruct.CaseSensitive;
is.readBytes(SearchStruct.ReplaceText, 81);
is >> SearchStruct.ReplaceAll >> SearchStruct.PromptOnReplace;
is >> IsReplaceOp;
return this;
}
/* Writes the TEditWindow to the passed opstream. */
void TEditWindow::write(opstream& os)
{
TWindow::write(os);
PutChildPtr(os, Editor);
os.writeBytes(SearchStruct.SearchText, 81);
os << SearchStruct.CaseSensitive;
os.writeBytes(SearchStruct.ReplaceText, 81);
os << SearchStruct.ReplaceAll << SearchStruct.PromptOnReplace;
os << IsReplaceOp;
}
TStreamable *TEditWindow::build()
{
return new TEditWindow(streamableInit);
}
TStreamableClass RegEditWindow("TEditWindow",
TEditWindow::build,
__DELTA(TEditWindow));