This is QuestionDoc.m in view mode; [Download] [Up]
// QuestionDoc.m
//
// Free software created 30 Nov 1992
// by Paul Burchard <burchard@math.utah.edu>.
#import "Wais.h"
#import "WAISControl.h"
#import "QuestionDoc.h"
#import "IconWell.h"
#import "IconWellControl.h"
#import "BrowserBarChart.h"
#import "string.h"
#import <appkit/appkit.h>
@implementation QuestionDoc
+ (const char *)fileType
{
return "qst";
}
+ (const char *)nibName
{
return "QuestionDoc.nib";
}
+ (const char *)miniIconName
{
return "WaisQuestion.tiff";
}
+ (const char *)defaultFolder
{
return [[WaisQuestion folderList] elementAt:0];
}
- init
{
[super init];
waisQuestion = [[WaisQuestion alloc] initKey:NULL];
iconWellControl = [[IconWellControl alloc] initWindow:window];
[[[resultBrowser setAbbreviated:YES] setAlphabetized:NO] setEditable:NO];
[resultWell setDraggable:YES droppable:NO];
[[[similarBrowser setAbbreviated:YES] setAlphabetized:YES] setEditable:YES];
[similarWell setDraggable:YES droppable:YES];
[[[sourceBrowser setAbbreviated:YES] setAlphabetized:YES] setEditable:YES];
[sourceWell setDraggable:YES droppable:YES];
[[[keyWordField docView] setDelegate:self] setSelectable:YES];
[[keyWordField docView] setCharFilter:(NXCharFilterFunc)NXFieldFilter];
[window makeFirstResponder:[keyWordField docView]];
[[keyWordField docView] setSel:0 :0];
return self;
}
- free
{
[waisQuestion free];
[iconWellControl free];
return [super free];
}
- textDidEnd:sender endChar:(unsigned short)whyEnd
{
// Search when user hits Return in text window.
if(whyEnd == NX_RETURN) [searchButton performClick:self];
// Return first responder status back to text object.
[window makeFirstResponder:[keyWordField docView]];
[[keyWordField docView] setSel:0 :0];
return self;
}
- updateToWindow
{
int i, j, n;
id theList, doc;
// Report keywords.
if([waisQuestion valueForStringKey:":seed-words"])
[[keyWordField docView] setText:[waisQuestion
valueForStringKey:":seed-words"]];
// Report sources.
theList = [waisQuestion sourceList];
n = [theList count];
[sourceBrowser clear];
for(i=0; i<n; i++) [sourceBrowser addEntry:[[theList objectAt:i] key]];
[sourceBrowser update];
// Report relevant docs.
theList = [waisQuestion relevantList];
n = [theList count];
[similarBrowser clear];
for(i=0; i<n; i++) [similarBrowser addEntry:[[theList objectAt:i] key]];
[similarBrowser update];
// Report result documents and their scores.
theList = [waisQuestion resultList];
n = [theList count];
[resultBrowser clear];
for(i=0; i<n; i++)
{
doc = [theList objectAt:i];
j = [resultBrowser indexAddEntry:[doc key]];
[resultBrowser setBarValue:[waisQuestion scoreForDocument:doc] at:j];
}
[resultBrowser update];
return self;
}
- updateFromWindow
{
int i;
const char *dockey, *srckey;
char buf[MAX_QUERY_SIZE+1];
id doc, source, stringTable;
// Update keywords.
[window setDocEdited:YES];
[[keyWordField docView] getSubstring:buf start:0 length:MAX_QUERY_SIZE];
[waisQuestion setKeywords:buf];
// Update relevant document list.
// Load in any unknown new docs.
// Ignore doc if it is still being retrieved (to avoid thread collisions).
[waisQuestion clearRelevantDocuments];
for(i=0; dockey=[similarBrowser entryAt:i]; i++)
{
if(!(doc = [WaisDocument objectForKey:dockey]))
{
doc = [[WaisDocument alloc] initKey:dockey];
if(![doc readWaisFile])
{
[doc free];
stringTable = [[NXApp delegate] stringTable];
if(stringTable) NXRunAlertPanel(
[stringTable valueForStringKey:"WAIS Question Error!"],
[stringTable valueForStringKey:
"Can't find WAIS specifications for document %s"],
[stringTable valueForStringKey:"OK"], NULL, NULL, dockey);
continue;
}
}
if(![[NXApp delegate] isDocumentBeingRetrieved:doc])
[waisQuestion addRelevantDocument:doc];
}
// Update source list.
// Load in any unknown new sources.
[waisQuestion clearSources];
for(i=0; srckey=[sourceBrowser entryAt:i]; i++)
{
if(!(source = [WaisSource objectForKey:srckey]))
{
source = [[WaisSource alloc] initKey:srckey];
if(![source readWaisFile])
{
[source free];
stringTable = [[NXApp delegate] stringTable];
if(stringTable) NXRunAlertPanel(
[stringTable valueForStringKey:"WAIS Question Error!"],
[stringTable valueForStringKey:
"Can't find WAIS specifications for source %s"],
[stringTable valueForStringKey:"OK"], NULL, NULL, srckey);
continue;
}
}
[waisQuestion addSource:source];
}
return self;
}
- dump:sender
{
if(!fileName) return nil;
[self updateFromWindow];
if(![waisQuestion writeWaisFile]) return nil;
return self;
}
- load:sender
{
if(!fileName) return nil;
if(![waisQuestion readWaisFile]) return nil;
[self updateToWindow];
return self;
}
- setFileName:(const char *)aName
{
id rtn = [super setFileName:aName];
if(rtn) [waisQuestion setKey:fileName];
return(rtn);
}
- search:sender
{
[self updateFromWindow];
if(![waisQuestion search]) return nil;
[self updateToWindow];
return self;
}
- (int)prepFile:(const char *)fileKey ok:(int *)flag
{
// Begin retrieval of documents as they are dragged out.
*flag = NO;
if(![[NXApp delegate] retrieveDocuments:fileKey]) return 0;
*flag = YES;
return 0;
}
- (int)openFile:(const char *)fileKey ok:(int *)flag
{
id rtn, doc, source;
// If known source, open in this application.
if(source = [WaisSource objectForKey:fileKey])
return [[NXApp delegate] openFile:fileKey ok:flag];
// If retrieved document, open in this application (and so in Workspace).
// If unretrieved document, call WAIS to retrieve.
if(doc = [WaisDocument objectForKey:fileKey])
{
if([[NXApp delegate] isDocumentBeingRetrieved:doc])
return 0;
if([doc isRetrieved])
return [[NXApp delegate] openFile:fileKey ok:flag];
else
{
rtn = [[NXApp delegate] retrieveDocuments:[doc key]];
if(rtn) *flag = YES;
else *flag = NO;
return 0;
}
}
// Unknown file key---ignore.
return 0;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.