This is WorldInfoController.m in view mode; [Download] [Up]
//
// This file is a part of Risk by Mike Ferris.
//
#import "Risk.h"
RCSID ("$Id: WorldInfoController.m,v 1.1.1.1 1997/12/09 07:18:58 nygard Exp $");
#import "WorldInfoController.h"
#import "RiskWorld.h"
#import "Continent.h"
#import "Country.h"
//======================================================================
// The World Info report shows the name of the world, and the name,
// number of countries, and bonus value for each continent.
//
// Double click on the column titles to sort by that column.
//======================================================================
int WIOrderContinentsByName (id object1, id object2, void *context)
{
Continent *continent1, *continent2;
NSComparisonResult result;
continent1 = (Continent *)object1;
continent2 = (Continent *)object2;
result = [[continent1 continentName] compare:[continent2 continentName]];
return result;
}
//----------------------------------------------------------------------
int WIOrderContinentsByCountryCount (id object1, id object2, void *context)
{
Continent *continent1, *continent2;
NSComparisonResult result;
int count1, count2;
continent1 = (Continent *)object1;
continent2 = (Continent *)object2;
count1 = [[continent1 countries] count];
count2 = [[continent2 countries] count];
if (count1 < count2)
{
result = NSOrderedAscending;
}
else if (count1 == count2)
{
result = NSOrderedSame;
}
else
{
result = NSOrderedDescending;
}
return result;
}
//----------------------------------------------------------------------
int WIOrderContinentsByBonusValue (id object1, id object2, void *context)
{
Continent *continent1, *continent2;
NSComparisonResult result;
int count1, count2;
continent1 = (Continent *)object1;
continent2 = (Continent *)object2;
count1 = [continent1 continentBonus];
count2 = [continent2 continentBonus];
if (count1 < count2)
{
result = NSOrderedAscending;
}
else if (count1 == count2)
{
result = NSOrderedSame;
}
else
{
result = NSOrderedDescending;
}
return result;
}
#define WorldInfoController_VERSION 1
@implementation WorldInfoController
+ (void) initialize
{
if (self == [WorldInfoController class])
{
[self setVersion:WorldInfoController_VERSION];
}
}
//----------------------------------------------------------------------
- (void) awakeFromNib
{
NSString *imagePath;
NSImage *image;
imagePath = [[NSBundle mainBundle] pathForImageResource:@"MiniWorldInfo.tiff"];
NSAssert (imagePath != nil, @"Couldn't find MiniWorldInfo.tiff");
image = [[[NSImage alloc] initWithContentsOfFile:imagePath] autorelease];
NSAssert (image != nil, @"Couldn't load MiniWorldInfo.tiff");
[worldInfoWindow setMiniwindowImage:image];
}
//----------------------------------------------------------------------
- init
{
BOOL loaded, okay;
NSString *nibFile;
if ([super init] == nil)
return nil;
nibFile = @"WorldInfoPanel.nib";
loaded = [NSBundle loadNibNamed:nibFile owner:self];
if (loaded == NO)
{
NSLog (@"Could not load %@.", nibFile);
[super dealloc];
return nil;
}
[continentTable setDoubleAction:@selector (reorder:)];
[continentTable setTarget:self];
continents = nil;
//world = nil;
okay = [worldInfoWindow setFrameAutosaveName:[worldInfoWindow title]];
if (okay == NO)
NSLog (@"Could not set frame autosave name of World Info window.");
return self;
}
//----------------------------------------------------------------------
- (void) dealloc
{
SNRelease (continents);
//SNRelease (world);
[super dealloc];
}
//----------------------------------------------------------------------
#if 0
- (RiskWorld *) world
{
return world;
}
#endif
//----------------------------------------------------------------------
- (void) setWorld:(RiskWorld *)newWorld
{
SNRelease (continents);
if (newWorld != nil)
{
continents = [[[[newWorld continents] allValues] sortedArrayUsingFunction:WIOrderContinentsByName context:NULL] retain];
}
#if 0
SNRelease (world);
world = [newWorld retain];
#endif
[continentTable reloadData];
}
//----------------------------------------------------------------------
- (void) showPanel
{
[worldInfoWindow orderFront:self];
}
//----------------------------------------------------------------------
- (void) orderByName
{
NSArray *newOrder;
if (continents != nil)
{
newOrder = [continents sortedArrayUsingFunction:WIOrderContinentsByName context:NULL];
SNRelease (continents);
continents = [newOrder retain];
[continentTable reloadData];
}
}
//----------------------------------------------------------------------
- (void) orderByCountryCount
{
NSArray *newOrder;
if (continents != nil)
{
newOrder = [continents sortedArrayUsingFunction:WIOrderContinentsByCountryCount context:NULL];
SNRelease (continents);
continents = [newOrder retain];
[continentTable reloadData];
}
}
//----------------------------------------------------------------------
- (void) orderByBonusValue
{
NSArray *newOrder;
if (continents != nil)
{
newOrder = [continents sortedArrayUsingFunction:WIOrderContinentsByBonusValue context:NULL];
SNRelease (continents);
continents = [newOrder retain];
[continentTable reloadData];
}
}
//----------------------------------------------------------------------
- (void) reorder:sender
{
NSString *identifier;
identifier = [[[continentTable tableColumns] objectAtIndex:[continentTable clickedColumn]] identifier];
if ([identifier isEqualToString:@"ContinentName"])
{
[self orderByName];
}
else if ([identifier isEqualToString:@"CountryCount"])
{
[self orderByCountryCount];
}
else if ([identifier isEqualToString:@"BonusValue"])
{
[self orderByBonusValue];
}
}
//======================================================================
// NSTableView data source
//======================================================================
- (int) numberOfRowsInTableView:(NSTableView *)aTableView
{
int count;
count = 0;
if (continents != nil)
count = [continents count];
return count;
}
//----------------------------------------------------------------------
- tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex
{
NSString *identifier;
Continent *target;
id value;
//NSParameterAssert (rowIndex >= 0 && rowIndex < [mes count]);
value = nil;
target = [continents objectAtIndex:rowIndex];
identifier = [aTableColumn identifier];
if ([identifier isEqualToString:@"ContinentName"])
{
value = [target continentName];
}
else if ([identifier isEqualToString:@"CountryCount"])
{
value = [NSNumber numberWithInt:[[target countries] count]];
}
else if ([identifier isEqualToString:@"BonusValue"])
{
value = [NSNumber numberWithInt:[target continentBonus]];
}
return value;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.