This is Finder.m in view mode; [Download] [Up]
/*
* This sourcecode is part of FileSpy, a logfile observing utility.
* Copyright (C) 1996 Felix Rauch
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Notice that this program may not be possessed, used, copied,
* distributed or modified by people having to do with nuclear
* weapons. See the file CONDITIONS for details.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* To contact the original author, try:
* e-mail: Felix.Rauch@nice.ch
* Traditional mail: Felix Rauch
* Sempacherstrasse 33
* 8032 Zurich
* Switzerland
*/
#import "Finder.h"
@implementation Finder
- init
{
[super init];
ignoreCase = YES;
scopeAll = NO;
if(!findPanel) {
if(![NXApp loadNibSection:"Findpanel.nib" owner:self withNames:NO fromZone:[self zone]]) {
NXLogError("Can't open Preferences.nib!");
}
}
return self;
}
- setDelegate:sender
{
delegate = sender;
return self;
}
- caseClick:sender
{
ignoreCase = [sender state] ? YES : NO;
return self;
}
- findNext:sender
{
[self findText:NO];
return self;
}
- findPrevious:sender
{
[self findText:YES];
return self;
}
- findText:(BOOL)backwardsflag
{
NXSelPt start, end;
unsigned int i, max;
const id textList = [delegate findTexts:scopeAll];
BOOL succesful = NO;
if(textList == nil) {
NXBeep();
return self;
}
max = [textList count];
for(i = 0; i < max; i++) {
[[textList objectAt:i] getSel:&start :&end];
if(!backwardsflag)
[[textList objectAt:i] setSel:end.cp :end.cp]; // search from end of last selection
else
[[textList objectAt:i] setSel:start.cp :start.cp]; // search from start of last sel. backwards
if([[textList objectAt:i] findText:[myFormCell stringValue]
ignoreCase:ignoreCase
backwards: backwardsflag
wrap: YES] == YES) {
[[[[textList objectAt:i] delegate] window] orderFront:self];
succesful = YES;
break;
}
}
[textList free];
if(!succesful) {
NXBeep();
[findStatusText setStringValue:"Not found"];
[findForm selectTextAt:0];
} else {
[findStatusText setStringValue:""];
}
return self;
}
- scopeClick:sender
{
scopeAll = ([[sender selectedCell] tag] == 0) ? NO : YES;
return self;
}
- showFindPanel:sender
{
[findStatusText setStringValue:""];
[findPanel makeKeyAndOrderFront:self];
return self;
}
- window
{
return myWindow;
}
- formCell
{
return myFormCell;
}
- windowDidBecomeKey:sender
{
[findForm selectTextAt:0];
return self;
}
/* taken from Yapp's FindPanel.m */
// In case the selection is shorter than this amount, we use a local buffer
// (on the stack) rather than bothering with allocating it.
#define LOCALBUFFERLEN 100
- enterSelection:sender
{
id obj = [self firstResponderText];
if (!obj) {
NXBeep();
} else {
char localBuffer[LOCALBUFFERLEN+1], *str;
NXSelPt from, to;
int bufLen;
[obj getSel:&from :&to];
bufLen = to.cp - from.cp;
str = (bufLen <= LOCALBUFFERLEN) ? localBuffer : NXZoneMalloc(NXDefaultMallocZone(), bufLen+1);
[obj getSubstring:str start:from.cp length:bufLen];
str[bufLen] = '\0';
// [self setFindString:str];
[myFormCell setStringValue:str];
// [myFormCell selectText:self];
if (str != localBuffer)
free(str);
}
return self;
}
- firstResponderText
{
id obj = [[NXApp mainWindow] firstResponder];
return (obj && [obj isKindOf:[Text class]]) ? obj : nil;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.