This is KillPanelController.m in view mode; [Download] [Up]
#import "KillPanelController.h"
#import "../ServerCell.h"
#import "../MainWindowControl.h"
#import "../KillFile.h"
@implementation KillPanelController
- awakeFromNib
{
NXRect frameRect;
NXSize newCellSize,cellDist;
id aCell;
[authorMatrix getFrame:&frameRect];
newCellSize.height=16.0;
newCellSize.width = frameRect.size.width;
cellDist.width=0.0;
cellDist.height=0.0;
[authorMatrix setIntercell:&cellDist];
[[authorMatrix setCellSize:&newCellSize] setMode:NX_RADIOMODE];
[authorMatrix setEmptySelectionEnabled:YES];
//aCell=[[Cell alloc] init];
aCell=[[ServerCell alloc] init];
[[[aCell setSlowLink:FALSE] setOpenOnStartup:FALSE] serverClosed:self];
[authorMatrix setPrototype:aCell];
nntpServerName=NULL;
return self;
}
- addName:sender
{
const char *aString;
id mainDelegate;
id authorTable;
mainDelegate=[[NXApp mainWindow] delegate];
if([mainDelegate class]!=[MainWindowControl class])
return self;
authorTable=[[mainDelegate killFile] getAuthorTable];
aString=[nameFormCell stringValue];
if(aString[0]!='\0'){
authorCount++;
[authorMatrix selectCellAt:[self addAuthorNamed:aString] :0];
[authorMatrix display];
[[mainDelegate killFile] killUnkillAuthor:YES author:aString];
}
[[nameFormCell controlView] selectTextAt:0];
return self;
}
- (int)addAuthorNamed:(const char *)name
{
int r=0;
int c=0;
int i;
id aCell;
[authorMatrix getNumRows:&r numCols:&c];
for(i=0;i<r;i++)
if(strcasecmp([[authorMatrix cellAt:i :0] stringValue],name)>0)
break;
[authorMatrix insertRowAt:i];
aCell=[authorMatrix cellAt:i :0];
[aCell setStringValue:name];
[authorMatrix sizeToCells];
return i;
}
- removeName:sender
{
int i,j;
List *cellList;
id mainDelegate;
id authorTable;
mainDelegate=[[NXApp mainWindow] delegate];
if([mainDelegate class]!=[MainWindowControl class])
return self;
authorTable=[[mainDelegate killFile] getAuthorTable];
cellList=[authorMatrix cellList];
j=[cellList count];
for(i=j-1;i>=0;i--){
id aCell=[cellList objectAt:i];
if([aCell state]==1){
authorCount--;
[[mainDelegate killFile] killUnkillAuthor:NO author:[aCell stringValue]];
[authorMatrix removeRowAt:i andFree:YES];
}
}
[[authorMatrix sizeToCells] display];
[self authorsSelected:self];
return self;
}
- showPanel:mainWindow
{
if(nntpServerName!=NULL)
free(nntpServerName);
[myPanel makeKeyAndOrderFront:self];
return self;
}
- windowDidUpdate:(Window *)sender
{
const char *uname;
int r,c;
id authorTable;
const void *key;
void *value;
NXHashState state;
int i=0;
int j=0;
if([NXApp keyWindow]==myPanel){
uname=[nameFormCell stringValue];
[authorMatrix getNumRows:&r numCols:&c];
for(i=0;i<r;i++)
if(!strcmp([[authorMatrix cellAt:i:0] stringValue],uname))
break;
if(i==r)
[authorMatrix selectCellAt:-1:-1];
else
[authorMatrix selectCellAt:i:0];
[addButton setEnabled:((i==r)&&(uname[0]!='\0'))];
[removeButton setEnabled:(i!=r)];
}
else{
id d;
id mWindow=[NXApp mainWindow];
if(mWindow==nil){
[myPanel close];
return self;
}
d=[mWindow delegate];
if([d isKindOf:[MainWindowControl class]]){
if(nntpServerName!=NULL){
if(strcmp(nntpServerName,[mWindow title])==0){
if([[[d killFile] getAuthorTable] count]==authorCount)
return self;
}
else{
free(nntpServerName);
*nntpServerName='\0';
}
}
if(nntpServerName==NULL)
nntpServerName=NXCopyStringBuffer([mWindow title]);
[authorMatrix getNumRows:&i numCols:&j];
i--;
for(;i>=0;i--)
[authorMatrix removeRowAt:i andFree:YES];
authorTable=[[d killFile] getAuthorTable];
state = [authorTable initState];
i=0;
while([authorTable nextState:&state key:&key value:&value]){
[self addAuthorNamed:(const char *)key];
i++;
}
authorCount=i;
[authorMatrix sizeToCells];
if(authorCount==0)
[[[authorMatrix superview] superview] display];
else
[authorMatrix display];
[self authorsSelected:self];
}
else
[myPanel close];
}
return self;
}
- authorsSelected:sender
{
List *aList=[authorMatrix getSelectedCells:nil];
if([aList count]==1){
[nameFormCell takeStringValueFrom:[aList lastObject]];
[addButton setEnabled:FALSE];
[removeButton setEnabled:TRUE];
[[nameFormCell controlView] selectTextAt:0];
}
else{
[nameFormCell setStringValue:""];
[removeButton setEnabled:FALSE];
}
[aList free];
return self;
}
- killPanel
{
return myPanel;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.