This is QueryManager.m in view mode; [Download] [Up]
/*---------------------------------------------------------------------------
QueryManager.m -- Copyright (c) 1991 Rex Pruess
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 1, or (at your option)
any later version.
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, or send
electronic mail to the the author.
QueryManager fires up new Query windows. A timer is set to limit the
amount of time we wait for the Query window to come to life. If the
"fields" data have not been read in X amount of time, then we tell the
user & quit waiting for the data.
Rex Pruess <Rex-Pruess@uiowa.edu>
$Header: /rpruess/apps/Ph/query.subproj/RCS/QueryManager.m,v 3.0 93/06/26 07:59:23 rpruess Exp $
-----------------------------------------------------------------------------
$Log: QueryManager.m,v $
Revision 3.0 93/06/26 07:59:23 rpruess
Brought Ph code up to NeXTSTEP 3.0 specifications.
Revision 2.1 91/12/10 16:31:56 rpruess
Moved the timer code from QueryManager to Query. Each Query object is
ow responsible for determining when it has received the server "fields"
data. This code was added prior to the initial Ph Version 2.0 release.
Revision 2.0 91/11/19 08:22:28 rpruess
Revision 2.0 is the initial production release of Ph.
-----------------------------------------------------------------------------*/
#define WINDOWOFFSET 20.0 /* How many pixels to offset each new window */
#define MAXOFFSET WINDOWOFFSET * 10.0
/* Application class header files */
#import "QueryManager.h"
#import "Query.h"
#import "../PhShare.h"
#import "../qiServers.h"
@implementation QueryManager
/*---------------------------------------------------------------------------
Initialization
-----------------------------------------------------------------------------*/
- init
{
self = [super init];
[NXApp loadNibSection:"QueryManager.nib" owner:self withNames:NO];
qiManager = nil;
servers = nil;
offset = 0.0;
queryList = [[List alloc] init];
return self;
}
/*---------------------------------------------------------------------------
There are some object we must talk to later.
-----------------------------------------------------------------------------*/
- initIDs:aServers qiManager:aQiManager
{
servers = aServers;
qiManager = aQiManager;
return self;
}
/*---------------------------------------------------------------------------
Bring the server's query window to life.
-----------------------------------------------------------------------------*/
- (BOOL) startQuery:(const char *)aServer
{
int i;
id theQuery;
/*** Loop through the queryList to see if we have the Query object. */
for (i = 0; i < [queryList count]; i++) {
theQuery = [queryList objectAt:i];
if (strcmp ([theQuery getServerName], aServer) == 0) {
if ([[theQuery qiObject] hasQiFields] == NO) {
strcpy (errMsg, "%s is initializing itself. Please wait.");
NXRunAlertPanel (NULL, errMsg, NULL, NULL, NULL, aServer);
return NO;
}
[theQuery showWindow:self];
return YES;
}
}
/*** Allocate the new Query object and set mandatory variables. */
theQuery = [[Query alloc] init];
[theQuery setQueryVars:qiManager domain:[servers getDomainName:aServer]];
[theQuery setQueryWindow:[servers getSiteName:aServer] offset:offset];
/*** Adjust the offset for the next Query window a few pixels from the
this window. Otherwise, the user might not see the new window. */
if (offset < MAXOFFSET)
offset += WINDOWOFFSET;
else
offset = WINDOWOFFSET / 2.0;
/*** Open the Query session. If it fails, free the Query object. */
if ([theQuery openSession:aServer] == NO) {
[theQuery free];
return NO;
}
[queryList addObjectIfAbsent:theQuery];
return YES;
}
/*---------------------------------------------------------------------------
Execution of this method will result in the clearing of the fields in the
window which is currently the key window.
-----------------------------------------------------------------------------*/
- clearQueryFields:sender
{
[queryList makeObjectsPerform:@selector (clearQueryFields)];
return self;
}
/*---------------------------------------------------------------------------
Execution of this method will result in the clearing of the view in the
window which is currently the key window.
-----------------------------------------------------------------------------*/
- clearQueryView:sender
{
[queryList makeObjectsPerform:@selector (clearQueryView)];
return self;
}
/*---------------------------------------------------------------------------
Return the Query ID for the specified server.
-----------------------------------------------------------------------------*/
- getQueryId:(const char *)aServer
{
int i;
id theQuery;
for (i = 0; i < [queryList count]; i++) {
theQuery = [queryList objectAt:i];
if (strcmp ([theQuery getServerName], aServer) == 0)
return theQuery;
}
return nil;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.