This is FindAgent.m in view mode; [Download] [Up]
/* Copyright 1991 Gustavus Adolphus College. All rights reserved.
*
* Schematik was developed by Gustavus Adolphus College (GAC) with
* support from NeXT Computer, Inc. Permission to copy this software,
* to redistribute it, and to use it for any purpose is granted,
* subject to the following restrictions and understandings.
*
* 1. Any copy made of this software must include this copyright
* notice in full.
*
* 2. Users of this software agree to make their best efforts (a) to
* return to the GAC Mathematics and Computer Science Department any
* improvements or extensions that they make, so that these may be
* included in future releases; and (b) to inform GAC of noteworthy
* uses of this software.
*
* 3. All materials developed as a consequence of the use of this
* software shall duly acknowledge such use, in accordance with the
* usual standards of acknowledging credit in academic research.
*
* 4. GAC makes no express or implied warranty or representation of
* any kind with respect to this software, including any warranty
* that the operation of this software will be error-free. ANY
* IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
* PURPOSE IS HEREBY DISCLAIMED. GAC is under no obligation to
* provide any services, by way of maintenance, update, or otherwise.
*
* 5. In conjunction with products arising from the use of this
* material, there shall be no use of the name of Gustavus Adolphus
* College nor of any adaptation thereof in any advertising,
* promotional, or sales literature without prior written consent
* from GAC in each case.
*/
#import "FindAgent.h"
#import "../defines.h"
#import DocText_h
#import DocWin_h
#import Main_h
#import PrefAgent_h
#import <appkit/Button.h>
#import <appkit/Form.h>
#import <appkit/Text.h>
#import <mach.h>
#import <string.h>
extern void NXBeep(void);
#define NIBFILE "Find.nib"
#define FINDZONENAME "FindAgnt"
static id theAgent=nil;
@implementation FindAgent
+ new
{
DEBUG_FUNC1(DEBUGLEVEL);
if (theAgent==nil)
{
NXZone *tempZone;
tempZone = NXCreateZone(vm_page_size, vm_page_size, YES);
DEBUG_ASSERT(tempZone!=NULL)
theAgent = self = [super allocFromZone:tempZone];
agentZone = tempZone;
NXNameZone(agentZone, FINDZONENAME);
}
return theAgent;
}
- activateAgent:sender
{
DEBUG_FUNC1(DEBUGLEVEL);
if (!findPanel)
{
findPanel = LoadNIB(NIBFILE, theAgent, agentZone);
DEBUG_ASSERT(findPanel!=nil)
[findPanel useOptimizedDrawing:YES];
EnableMenuItem(FindMenuCell3(MENU_EDIT, MENU_EDIT_FIND, MENU_EDIT_FIND_FindNext));
EnableMenuItem(FindMenuCell3(MENU_EDIT, MENU_EDIT_FIND, MENU_EDIT_FIND_FindPrevious));
}
[findText selectTextAt:0];
[findPanel makeKeyAndOrderFront:self];
return self;
}
- findForward:sender
{
DEBUG_FUNC1(DEBUGLEVEL);
[msgText setStringValue:NULL];
[findText selectTextAt:0];
if (*[findText stringValueAt:0])
if (![[[NXApp mainWindow] textView] stringSearch:[findText stringValueAt:0] forAgent:self direction:FINDFORWARD ignoreCase:[ignoreCase state] wholeWord:[wholeWord state] inSel:NO])
{
NXBeep();
[msgText setStringValue:NOTFOUNDMESSAGE];
return self;
}
[[[NXApp mainWindow] textView] scrollSelToVisible];
return self;
}
- findBackward:sender
{
DEBUG_FUNC1(DEBUGLEVEL);
[msgText setStringValue:NULL];
[findText selectTextAt:0];
if (*[findText stringValueAt:0])
if (![[[NXApp mainWindow] textView] stringSearch:[findText stringValueAt:0] forAgent:self direction:FINDBACKWARD ignoreCase:[ignoreCase state] wholeWord:[wholeWord state] inSel:NO])
{
NXBeep();
[msgText setStringValue:NOTFOUNDMESSAGE];
return self;
}
[[[NXApp mainWindow] textView] scrollSelToVisible];
return self;
}
- replace:sender
{
DEBUG_FUNC1(DEBUGLEVEL);
[[[NXApp mainWindow] textView] replaceSel:[findText stringValueAt:1]];
[[NXApp mainWindow] setDocEdited:YES];
return self;
}
- replaceAll:sender
{
const char *message=REPLACEDMESSAGE;
char buffer[strlen(message)+16];
int count=0;
id text=[[NXApp mainWindow] textView];
DEBUG_FUNC1(DEBUGLEVEL);
[msgText setStringValue:NULL];
[findText selectTextAt:0];
if (*[findText stringValueAt:0])
{
NXSelPt dummy,bend,start;
[[NXApp mainWindow] disableFlushWindow];
[text saveSelectionState];
if (![scopeMatrix selectedRow])
[text selectAll:nil];
[text getSel:&dummy :&bend];
while ([text stringSearch:[findText stringValueAt:0] forAgent:self direction:FINDFORWARD ignoreCase:[ignoreCase state] wholeWord:[wholeWord state] inSel:YES])
{
[self replace:nil];
count++;
[text getSel:&start :&dummy];
[text setSel:start.cp :bend.cp];
}
DEBUG_ASSERT(![text stringSearch:[findText stringValueAt:0] forAgent:self direction:FINDFORWARD ignoreCase:[ignoreCase state] wholeWord:[wholeWord state] inSel:[scopeMatrix selectedRow]])
[text restoreSelectionState];
[[[NXApp mainWindow] reenableFlushWindow] flushWindow];
sprintf(buffer, message, count);
[msgText setStringValue:buffer];
}
return self;
}
- replaceAndFind:sender
{
DEBUG_FUNC1(DEBUGLEVEL);
return [[self replace:nil] findForward:nil];
}
@end
@implementation FindAgent (Delegate)
- textDidEnd:sender endChar:(unsigned short)theChar
{
DEBUG_FUNC1(DEBUGLEVEL);
if (theChar==NX_RETURN)
[findPanel close];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.