This is CityAttributesInspector.m in view mode; [Download] [Up]
// // $Id: CityAttributesInspector.m,v 1.7 1997/10/31 04:51:35 nygard Exp $ // // // This file is a part of Empire, a game of exploration and conquest. // Copyright (C) 1996 Steve Nygard // // 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 2 of the License, 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. // // You may contact the author by: // e-mail: nygard@telusplanet.net // #import "Empire.h" RCSID ("$Id: CityAttributesInspector.m,v 1.7 1997/10/31 04:51:35 nygard Exp $"); #import "CityAttributesInspector.h" #import "City.h" #import "Unit.h" #import "EmpireImageVendor.h" #import "EmPlayer.h" #import "EmInspectorManager.h" static CityAttributesInspector *_instance = nil; //====================================================================== // The City Attributes Inspector shows the name and location of a city, // whether it is a port, and shows information about the type of unit // the city is currently producing. // // The inspector allows the type of production to be changed. In the // future, it will also allow the name of the city to be changed. //====================================================================== @implementation CityAttributesInspector + instance { if (_instance == nil) _instance = [[CityAttributesInspector alloc] init]; return _instance; } //---------------------------------------------------------------------- - (void) awakeFromNib { [super awakeFromNib]; [[EmpireImageVendor instance] attach:self]; [self useIconsForPlayer:p_player1]; } //---------------------------------------------------------------------- - init { self = [super initWithInspectorNibNamed:@"CityAttributesInspector.nib"]; return self; } //---------------------------------------------------------------------- - (void) dealloc { [super dealloc]; } //---------------------------------------------------------------------- - (void) ok { if ([[subject cityName] isEqualToString:[cityNameTextfield stringValue]] == NO) [subject setCityName:[cityNameTextfield stringValue]]; [subject setProduction:[productionMatrix selectedRow] + u_army]; [super ok]; [self revert]; // to catch changed production times... } //---------------------------------------------------------------------- - (void) revert { int l; BOOL tmp; int pt[UNIT_TYPE_COUNT]; BOOL isFoe; Player player = [inspectorManager player]; NSString *cityLocation; EMMapLocation location; WarStatistics warStatistics; [super revert]; isFoe = player != [[subject owner] playerNumber] && player != p_neutral; //NSLog (@"isFoe: %@", (isFoe == YES) ? @"YES" : @"NO"); [cityNameTextfield setStringValue:[subject cityName]]; location = [subject cityLocation]; cityLocation = [NSString stringWithFormat:@"%d,%d", location.row, location.column]; [cityLocationTextfield setStringValue:cityLocation]; [portSwitch setState:[subject isAPort]]; if ([subject productionType] == u_unknown || isFoe == YES) { [productionMatrix setEnabled:NO]; [productionMatrix setAllowsEmptySelection:YES]; [productionMatrix selectCellAtRow:-1 column:-1]; } else { [productionMatrix setEnabled:YES]; [productionMatrix setAllowsEmptySelection:NO]; [productionMatrix selectCellAtRow:[subject productionType] - u_army column:0]; tmp = [subject isAPort]; for (l = u_transport; l < u_hovercraft; l++) [[productionMatrix cellAtRow:l - u_transport + 2 column:0] setEnabled:tmp]; } if (isFoe == YES) [subject defaultTurnsToConstruct:pt]; else [subject turnsToConstruct:pt]; for (l = u_army; l <= u_hovercraft; l++) [[turnsToConstructMatrix cellAtRow:l - u_army column:0] setIntValue:pt[l - u_army]]; if (isFoe == YES || player == p_neutral) for (l = 1; l < UNIT_TYPE_COUNT; l++) [[underConstructionMatrix cellAtRow:l - 1 column:0] setIntValue:0]; else { warStatistics = [[subject owner] warStatistics]; for (l = 1; l < UNIT_TYPE_COUNT; l++) [[underConstructionMatrix cellAtRow:l - 1 column:0] setIntValue:warStatistics.under_construction[l]]; } [self useIconsForPlayer:[[subject owner] playerNumber]]; } //---------------------------------------------------------------------- - (BOOL) wantsButtons { return YES; } //---------------------------------------------------------------------- - (void) changed:sender { if (sender == cityNameTextfield) { [cityLocationTextfield selectText:self]; } [inspectorManager setOkButtonEnabled:YES]; [inspectorManager setRevertButtonEnabled:YES]; [[inspectorView window] setDocumentEdited:YES]; } //---------------------------------------------------------------------- - (void) useIconsForPlayer:(Player)playerNumber { EmpireImageVendor *vendor = [EmpireImageVendor instance]; int l; NSImage *city; NSImage **onLand; NSImage **onWater; NSImage **onCity; int loop_to_land[2] = {0, 2}; int loop_to_water[7] = {1, 3, 4, 5, 6, 8, 9}; [vendor player:playerNumber :&city :&onLand :&onWater :&onCity :NULL]; [cityImageButton setImage:city]; for (l = 0; l < 2; l++) [[unitImageMatrix cellAtRow:l column:0] setImage:onLand[loop_to_land[l]]]; for (l = 0; l < 7; l++) [[unitImageMatrix cellAtRow:l+2 column:0] setImage:onWater[loop_to_water[l]]]; } //---------------------------------------------------------------------- - (void) vendorImagesUpdated:(BOOL)player1:(BOOL)player2:(BOOL)player3:(BOOL)other { [cityImageButton setNeedsDisplay:YES]; [unitImageMatrix setNeedsDisplay:YES]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.