This is BibBrowser.m in view mode; [Download] [Up]
// Copyright not only by H. Giesen, University of Koblenz-Landau 1996
#import "BibBrowser.h"
#import "MyBrowserCell.h"
#define searchStringLength 128
static unsigned char searchString[searchStringLength];
@implementation BibBrowser
- initFrame: (const NXRect *) frameRect
{
[super initFrame: frameRect];
inputTimeOut = 0.5;
return self;
}
// Timed Entry Methods (Private)
void Search (timedEntry, now, self)
DPSTimedEntry timedEntry;
double now;
void* self;
{
[(id)self perform: @selector (_search)];
}
- _addTimedEntry
{
timedEntry =
DPSAddTimedEntry(
inputTimeOut, Search, (void *)self, NX_MODALRESPTHRESHOLD
);
NXPing();
return self;
}
- _removeTimedEntry
{
if ( !timedEntry) return self;
DPSRemoveTimedEntry (timedEntry);
timedEntry = 0;
return self;
}
- _search
{
// Searches current search column for first occurrence of searchString
int iterator;
char path[1024];
int len;
int numRows, numCols;
int searchColumn = [self lastColumn];
Matrix *matrix = [self matrixInColumn: searchColumn];
MyBrowserCell *currentCell = nil;
BOOL found = NO;
[self _removeTimedEntry];
[matrix getNumRows:&numRows numCols:&numCols];
for(iterator = 0; iterator < numRows; iterator++){
currentCell = [matrix cellAt:iterator :0];
if( [currentCell isEnabled]==NO ) continue;
if (NXOrderStrings([currentCell stringValue], searchString,
NO, strlen (searchString), NULL) == 0){
[matrix selectCellAt: -1 :-1];
[matrix selectCellAt:iterator :0];
found = YES;
break;
}
}
searchString[0] = '\0';
if (! found){ NXBeep(); return self; }
[matrix scrollCellToVisible:iterator :0];
[self getPath:path toColumn:searchColumn];
len = strlen( path );
sprintf( &path[len], "/%s/", [currentCell stringValue] );
[self doClick:matrix];
return self;
}
- selectAll:sender // sender is a matrix
{
int last = [self lastColumn];
Matrix *matrix = [self matrixInColumn:last];
//[matrix selectAll:sender];
[super selectAll:sender];
if( [[self delegate] respondsTo:@selector(selectAllIn:column:)] ){
[[self delegate]
perform:@selector(selectAllIn:column:)
with:matrix with:(id)last];
}
return self;
}
#define RETURN 13
#define LEFTARROW 172
#define UPARROW 173
#define RIGHTARROW 174
#define DOWNARROW 175
- keyDown:(NXEvent *) theEvent
{
[self _removeTimedEntry];
if ([self isEnabled] == NO) return self;
if( [[self window] isDisplayEnabled]==NO )[[self window] reenableDisplay];
switch (theEvent->data.key.charCode) {
case LEFTARROW :
case UPARROW :
case DOWNARROW :
case RIGHTARROW : [super keyDown:theEvent];
if(0)[self doClick:
[self matrixInColumn:[self lastColumn]]]; //??
break;
case RETURN :
default :
if(theEvent->data.key.repeat) return self;
if( strlen(searchString)<searchStringLength )
sprintf(searchString, "%s%c",
searchString, theEvent->data.key.charCode);
[self _addTimedEntry];
break;
}
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.