Combo boxes 90 percent done in NovaTools.

This commit is contained in:
Nicholas Shanks 2002-04-29 00:05:34 +00:00
parent d91603f842
commit 58db8daf9b
25 changed files with 646 additions and 72 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 0 B

After

Width:  |  Height:  |  Size: 147 KiB

View File

@ -1,4 +1,6 @@
#import "Resource.h"
#import "ResourceDocument.h"
#import "ResourceDataSource.h"
// should these be above or below "@implementation Resource" ?
NSString *ResourceWillChangeNotification = @"ResourceWillChangeNotification";
@ -67,6 +69,52 @@ NSString *ResourceDidChangeNotification = @"ResourceDidChangeNotification";
return [resource autorelease];
}
+ (NSArray *)allResourcesOfType:(NSString *)typeValue inDocument:(NSDocument *)document
{
NSMutableArray *array = [NSMutableArray array];
NSDocument *doc;
NSEnumerator *enumerator = [[[NSDocumentController sharedDocumentController] documents] objectEnumerator];
while( doc = [enumerator nextObject] )
{
// parse document for resources
if( document == nil || document == doc )
[array addObjectsFromArray:[[(ResourceDocument *)doc dataSource] allResourcesOfType:typeValue]];
}
return [NSArray arrayWithArray:array];
}
+ (Resource *)resourceOfType:(NSString *)typeValue andID:(NSNumber *)resIDValue inDocument:(NSDocument *)document
{
NSDocument *doc;
NSEnumerator *enumerator = [[[NSDocumentController sharedDocumentController] documents] objectEnumerator];
while( doc = [enumerator nextObject] )
{
if( document == nil || document == doc )
{
// parse document for correct resource
Resource *resource = [[(ResourceDocument *)doc dataSource] resourceOfType:typeValue andID:resIDValue];
if( resource ) return resource;
}
}
return nil;
}
+ (Resource *)resourceOfType:(NSString *)typeValue withName:(NSString *)nameValue inDocument:(NSDocument *)document
{
NSDocument *doc;
NSEnumerator *enumerator = [[[NSDocumentController sharedDocumentController] documents] objectEnumerator];
while( doc = [enumerator nextObject] )
{
if( document == nil || document == doc )
{
// parse document for correct resource
Resource *resource = [[(ResourceDocument *)doc dataSource] resourceOfType:typeValue withName:nameValue];
if( resource ) return resource;
}
}
return nil;
}
- (void)dealloc
{
[name release];

View File

@ -18,6 +18,8 @@
- (void)removeResource:(Resource *)resource;
// accessors
- (Resource *)resourceNamed:(NSString *)name ofType:(NSString *)type;
- (Resource *)resourceOfType:(NSString *)type andID:(NSNumber *)resID;
- (Resource *)resourceOfType:(NSString *)type withName:(NSString *)name;
- (NSArray *)allResourcesOfType:(NSString *)type;
@end

View File

@ -107,7 +107,19 @@ NSString *DataSourceDidRemoveResourceNotification = @"DataSourceDidRemoveResourc
/* ACCESSORS */
- (Resource *)resourceNamed:(NSString *)name ofType:(NSString *)type
- (Resource *)resourceOfType:(NSString *)type andID:(NSNumber *)resID
{
Resource *resource;
NSEnumerator *enumerator = [resources objectEnumerator];
while( resource = [enumerator nextObject] )
{
if( [[resource resID] isEqualToNumber:resID] && [[resource type] isEqualToString:type] )
return resource;
}
return nil;
}
- (Resource *)resourceOfType:(NSString *)type withName:(NSString *)name
{
Resource *resource;
NSEnumerator *enumerator = [resources objectEnumerator];
@ -119,4 +131,17 @@ NSString *DataSourceDidRemoveResourceNotification = @"DataSourceDidRemoveResourc
return nil;
}
- (NSArray *)allResourcesOfType:(NSString *)type
{
Resource *resource;
NSMutableArray *array = [NSMutableArray array];
NSEnumerator *enumerator = [resources objectEnumerator];
while( resource = [enumerator nextObject] )
{
if( [[resource type] isEqualToString:type] )
[array addObject:resource];
}
return [NSArray arrayWithArray:array];
}
@end

View File

@ -297,7 +297,8 @@ static NSString *RKShowInfoItemIdentifier = @"com.nickshanks.resknife.toolbar.sh
NSBundle *templateEditor = [NSBundle bundleWithPath:[[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:@"Template Editor.plugin"]];
// bug: this only checks the CURRENT DOCUMENT for template resources
Resource *tmpl = [dataSource resourceNamed:[resource type] ofType:@"TMPL"];
// Resource *tmpl = [dataSource resourceOfType:@"TMPL" withName:[resource type]];
Resource *tmpl = [Resource resourceOfType:@"TMPL" withName:[resource type] inDocument:nil];
// open the resources, passing in the template to use
if( tmpl && [[templateEditor principalClass] respondsToSelector:@selector(initWithResources:)] )

View File

@ -1,4 +1,4 @@
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
/* This protocol allows your plug to interrogate a resource to find out information about it. */
@ -17,6 +17,17 @@
- (NSData *)data;
- (void)setData:(NSData *)newData;
// These methods are used to retrieve resources other than the one you're editing.
// Passing a document of nil will indicate to search in all open documents.
// There is currently no way to search in files which haven't been opened.
// All returned objects are auoreleased. Retain if you want to keep them.
// This method may return an empty array
+ (NSArray *)allResourcesOfType:(NSString *)typeValue inDocument:(NSDocument *)document;
// The next two return the first matching resource found, or nil.
+ (id)resourceOfType:(NSString *)typeValue andID:(NSNumber *)resIDValue inDocument:(NSDocument *)document;
+ (id)resourceOfType:(NSString *)typeValue withName:(NSString *)nameValue inDocument:(NSDocument *)document;
@end
// Resource notifications

23
NovaTools/DataSource.h Executable file
View File

@ -0,0 +1,23 @@
#import <Cocoa/Cocoa.h>
@interface DataSource : NSObject
{
NSString *type;
NSMutableDictionary *data;
NSMutableArray *parsed; // a subset of data, parsed to contain the typed string
}
- (id)initForType:(NSString *)typeString;
- (NSDictionary *)data;
- (void)setData:(NSMutableDictionary *)newData;
- (void)setString:(NSString *)newData forResID:(int)resID;
- (void)parseForString:(NSString *)string sorted:(BOOL)sort;
- (id)objectValueForResID:(NSNumber *)resID;
- (NSString *)stringValueForResID:(NSNumber *)resID;
// NSComboBoxDataSource informal protocol
- (id)comboBox:(NSComboBox *)comboBox objectValueForItemAtIndex:(int)index;
- (int)numberOfItemsInComboBox:(NSComboBox *)comboBox;
@end

109
NovaTools/DataSource.m Executable file
View File

@ -0,0 +1,109 @@
#import "DataSource.h"
#import "ResKnifeResourceProtocol.h"
@implementation DataSource
- (id)init
{
[self autorelease];
return nil;
}
- (id)initForType:(NSString *)typeString
{
self = [super init];
type = [typeString copy];
data = [[NSMutableDictionary alloc] init];
{
id <ResKnifeResourceProtocol> resource;
NSArray *resources = [NSClassFromString(@"Resource") allResourcesOfType:type inDocument:nil];
NSEnumerator *enumerator = [resources objectEnumerator];
while( resource = [enumerator nextObject] )
[data setObject:[resource name] forKey:[resource resID]];
}
parsed = [[NSMutableArray alloc] initWithArray:[data allValues]];
return self;
}
- (void)dealloc
{
[data release];
[parsed release];
[super dealloc];
}
- (NSDictionary *)data
{
return data;
}
- (void)setData:(NSMutableDictionary *)newData
{
id old = data;
data = [newData retain];
[self parseForString:@"" sorted:YES];
[old autorelease];
}
- (void)setString:(NSString *)string forResID:(int)resID
{
[data setObject:string forKey:[NSNumber numberWithInt:resID]];
}
- (void)parseForString:(NSString *)string sorted:(BOOL)sort
{
NSNumber *resID;
NSEnumerator *enumerator = [[data allKeys] objectEnumerator];
[parsed removeAllObjects];
while( resID = [enumerator nextObject] )
{
NSString *value = [data objectForKey:resID];
NSRange range = [value rangeOfString:string options:NSCaseInsensitiveSearch];
if( range.location != NSNotFound || [string isEqualToString:@""] )
[parsed addObject:[NSString stringWithFormat:@"%@ {%@}", value, resID]];
}
if( sort ) [parsed sortUsingSelector:@selector(caseInsensitiveCompare:)];
}
- (id)objectValueForResID:(NSNumber *)resID
{
return [data objectForKey:resID];
}
- (NSString *)stringValueForResID:(NSNumber *)resID
{
return [NSString stringWithFormat:@"%@ {%@}", [data objectForKey:resID], resID];
}
/* NSComboBox Informal Prototype Implementation */
- (id)comboBox:(NSComboBox *)comboBox objectValueForItemAtIndex:(int)index
{
return [parsed objectAtIndex:index];
}
- (int)numberOfItemsInComboBox:(NSComboBox *)comboBox
{
return [parsed count];
}
/* Combo Box Delegate Methods */
- (void)controlTextDidBeginEditing:(NSNotification *)notification
{
[self parseForString:[[notification object] stringValue] sorted:YES];
[[notification object] reloadData];
}
- (void)controlTextDidChange:(NSNotification *)notification
{
[self parseForString:[[notification object] stringValue] sorted:YES];
[[notification object] reloadData];
}
- (BOOL)control:(NSControl *)control isValidObject:(id)object
{
return [parsed containsObject:object];
}
@end

View File

@ -1,4 +1,5 @@
#import <Cocoa/Cocoa.h>
#import "DataSource.h"
#import "ResKnifePluginProtocol.h"
#import "ResKnifeResourceProtocol.h"
@ -6,8 +7,15 @@
@interface NovaWindowController : NSWindowController <ResKnifePluginProtocol>
{
id <ResKnifeResourceProtocol> resource;
NSUndoManager *undoManager;
DataSource *governmentDataSource;
DataSource *planetDataSource;
DataSource *shipDataSource;
}
- (void)setResource:(id <ResKnifeResourceProtocol>)newResource;
- (void)setUndoManager:(NSUndoManager *)newUndoManager;
- (IBAction)toggleResID:(id)sender;
@end

View File

@ -7,7 +7,7 @@
@implementation NovaWindowController
- (id)initWithResource:(id)newResource
- (id)initWithResource:(id <ResKnifeResourceProtocol>)newResource
{
id oldSelf = self;
NSData *classData = [[(id <ResKnifeResourceProtocol>)newResource type] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
@ -18,29 +18,59 @@
if( !self ) return nil;
// do global stuff here
resource = [newResource retain];
resource = [(id)newResource retain];
undoManager = [[NSUndoManager alloc] init];
return self;
}
- (id)initWithResources:(id)newResource, ...
- (id)initWithResources:(id <ResKnifeResourceProtocol>)newResource, ...
{
return nil;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[(id)resource autorelease];
[undoManager release];
[shipDataSource release];
[super dealloc];
}
- (void)windowDidLoad
{
NSBundle *plugBundle = [NSBundle bundleWithIdentifier:@"au.com.sutherland-studios.resknife.novatools"];
[super windowDidLoad];
// insert the resources' data into the text fields
// [self refreshData:[resource data]];
// create the data sources (here because this is called just before they are applied to the combo boxes)
governmentDataSource = [[DataSource alloc] initForType:[plugBundle localizedStringForKey:@"govt" value:@"" table:@"Resource Types"]];
planetDataSource = [[DataSource alloc] initForType:[plugBundle localizedStringForKey:@"spob" value:@"" table:@"Resource Types"]];
shipDataSource = [[DataSource alloc] initForType:[plugBundle localizedStringForKey:@"ship" value:@"" table:@"Resource Types"]];
// we don't want this notification until we have a window!
// bug: only registers for notifications on the resource we're editing, need dependant resources too (pass nil for object?)
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resourceDataDidChange:) name:ResourceDataDidChangeNotification object:resource];
// finally, show the window
[self showWindow:self];
}
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)sender
{
return undoManager;
}
- (void)setResource:(id <ResKnifeResourceProtocol>)newResource
{
id old = resource;
resource = [(id)newResource retain];
[old release];
}
- (void)setUndoManager:(NSUndoManager *)newUndoManager
{
id old = undoManager;
undoManager = [newUndoManager retain];
[old release];
}
- (IBAction)toggleResID:(id)sender

View File

@ -14,4 +14,10 @@
return self;
}
- (void)windowDidLoad
{
[super windowDidLoad];
[self showWindow:self];
}
@end

View File

@ -1,11 +1,20 @@
#import <Cocoa/Cocoa.h>
#import "NovaWindowController.h"
#define cashField [goodiesForm cellAtIndex:0]
#define killsField [goodiesForm cellAtIndex:1]
#define prefixField [timeForm cellAtIndex:0]
#define suffixField [timeForm cellAtIndex:1]
#define statusField1 [statusForm cellAtIndex:0]
#define statusField2 [statusForm cellAtIndex:1]
#define statusField3 [statusForm cellAtIndex:2]
#define statusField4 [statusForm cellAtIndex:3]
@interface CharWindowController : NovaWindowController
{
IBOutlet NSComboBox *shipField;
IBOutlet NSForm *goodiesForm;
IBOutlet NSTextField *dayField;
IBOutlet NSTextField *monthField;
IBOutlet NSTextField *yearField;
@ -14,19 +23,46 @@
IBOutlet NSStepper *yearStepper;
IBOutlet NSForm *timeForm;
IBOutlet NSComboBox *startField1;
IBOutlet NSComboBox *startField2;
IBOutlet NSComboBox *startField3;
IBOutlet NSComboBox *startField4;
IBOutlet NSForm *statusForm;
IBOutlet NSComboBox *governmentField1;
IBOutlet NSComboBox *governmentField2;
IBOutlet NSComboBox *governmentField3;
IBOutlet NSComboBox *governmentField4;
// Initial Goodies
NSDecimalNumber *ship;
NSDecimalNumber *cash;
NSDecimalNumber *kills;
NSNumber *ship;
NSNumber *cash;
NSNumber *kills;
// Beginning Of Time
NSCalendarDate *date;
NSString *prefix;
NSString *suffix;
// Starting Location
NSNumber *start1;
NSNumber *start2;
NSNumber *start3;
NSNumber *start4;
// Governments
NSNumber *status1;
NSNumber *status2;
NSNumber *status3;
NSNumber *status4;
NSNumber *government1;
NSNumber *government2;
NSNumber *government3;
NSNumber *government4;
}
- (void)update;
- (IBAction)stepDate:(id)sender;
- (IBAction)editDate:(id)sender;
- (IBAction)stepDate:(id)sender;
@end

View File

@ -8,14 +8,28 @@
if( !self ) return nil;
// load data from resource
ship = [[NSDecimalNumber alloc] initWithShort:128];
cash = [[NSDecimalNumber alloc] initWithLong:10000];
kills = [[NSDecimalNumber alloc] initWithUnsignedLong:0];
ship = [[NSNumber alloc] initWithShort:128];
cash = [[NSNumber alloc] initWithLong:10000];
kills = [[NSNumber alloc] initWithUnsignedLong:0];
date = [[NSCalendarDate date] retain];
prefix = [[NSString alloc] init];
suffix = [[NSString alloc] init];
start1 = [[NSNumber alloc] initWithShort:128];
start2 = [[NSNumber alloc] initWithShort:129];
start3 = [[NSNumber alloc] initWithShort:130];
start4 = [[NSNumber alloc] initWithShort:131];
status1 = [[NSNumber alloc] initWithShort:0];
status2 = [[NSNumber alloc] initWithShort:0];
status3 = [[NSNumber alloc] initWithShort:0];
status4 = [[NSNumber alloc] initWithShort:0];
government1 = [[NSNumber alloc] initWithShort:128];
government2 = [[NSNumber alloc] initWithShort:129];
government3 = [[NSNumber alloc] initWithShort:130];
government4 = [[NSNumber alloc] initWithShort:131];
// load the window from the nib file and set it's title
[self window]; // implicitly loads nib
if( [newResource name] && ![[newResource name] isEqualToString:@""] )
@ -24,28 +38,72 @@
return self;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
- (void)windowDidLoad
{
[super windowDidLoad];
// set combo box data sources
[shipField setDelegate:shipDataSource];
[shipField setDataSource:shipDataSource];
[startField1 setDelegate:planetDataSource];
[startField1 setDataSource:planetDataSource];
[startField2 setDelegate:planetDataSource];
[startField2 setDataSource:planetDataSource];
[startField3 setDelegate:planetDataSource];
[startField3 setDataSource:planetDataSource];
[startField4 setDelegate:planetDataSource];
[startField4 setDataSource:planetDataSource];
[governmentField1 setDelegate:governmentDataSource];
[governmentField1 setDataSource:governmentDataSource];
[governmentField2 setDelegate:governmentDataSource];
[governmentField2 setDataSource:governmentDataSource];
[governmentField3 setDelegate:governmentDataSource];
[governmentField3 setDataSource:governmentDataSource];
[governmentField4 setDelegate:governmentDataSource];
[governmentField4 setDataSource:governmentDataSource];
// set notifications for ending editing on a combo box
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidEndEditing:) name:NSControlTextDidEndEditingNotification object:shipField];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidEndEditing:) name:NSControlTextDidEndEditingNotification object:startField1];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidEndEditing:) name:NSControlTextDidEndEditingNotification object:startField2];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidEndEditing:) name:NSControlTextDidEndEditingNotification object:startField3];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidEndEditing:) name:NSControlTextDidEndEditingNotification object:startField4];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidEndEditing:) name:NSControlTextDidEndEditingNotification object:governmentField1];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidEndEditing:) name:NSControlTextDidEndEditingNotification object:governmentField2];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidEndEditing:) name:NSControlTextDidEndEditingNotification object:governmentField3];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidEndEditing:) name:NSControlTextDidEndEditingNotification object:governmentField4];
// finally, show the window
[self showWindow:self];
}
- (void)update
{
// update some stuff in the catchall box
// initial goodies
[shipField setObjectValue:[shipDataSource stringValueForResID:ship]];
[shipDataSource parseForString:[shipField stringValue] sorted:NO];
[cashField setObjectValue:cash];
[killsField setObjectValue:kills];
// update Beginning Of Time
[dayField setIntValue:[date dayOfMonth]];
[monthField setIntValue:[date monthOfYear]];
[yearField setIntValue:[date yearOfCommonEra]];
// beginning of time
[dayField setObjectValue:date];
[monthField setObjectValue:date];
[yearField setObjectValue:date];
[dayStepper setIntValue:[date dayOfMonth]];
[monthStepper setIntValue:[date monthOfYear]];
[yearStepper setIntValue:[date yearOfCommonEra]];
[prefixField setStringValue:prefix];
[suffixField setStringValue:suffix];
}
- (IBAction)stepDate:(id)sender
{
id old = date;
date = [[NSCalendarDate alloc] initWithYear:[yearStepper intValue] month:[monthStepper intValue] day:[dayStepper intValue] hour:0 minute:0 second:0 timeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[old release];
[self update];
// starting location
[startField1 setObjectValue:[shipDataSource stringValueForResID:start1]];
[shipDataSource parseForString:[shipField stringValue] sorted:NO];
}
- (IBAction)editDate:(id)sender
@ -56,4 +114,46 @@
[self update];
}
- (IBAction)stepDate:(id)sender
{
id old = date;
date = [[NSCalendarDate alloc] initWithYear:[yearStepper intValue] month:[monthStepper intValue] day:[dayStepper intValue] hour:0 minute:0 second:0 timeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[old release];
[self update];
}
- (void)controlTextDidEndEditing:(NSNotification *)notification
{
if( [notification object] == shipField )
{
id old = ship;
NSString *string = [[notification object] stringValue];
NSRange range = [string rangeOfString:@"{" options:NSBackwardsSearch];
range.length = [string length] - range.location++ - 2;
ship = [[NSNumber alloc] initWithInt:[[string substringWithRange:range] intValue]];
NSLog( @"Old ship: %@ New ship: %@", old, ship );
[old release];
}
else if( [notification object] == startField1 )
{
id old = start1;
NSString *string = [[notification object] stringValue];
NSRange range = [string rangeOfString:@"{" options:NSBackwardsSearch];
range.length = [string length] - range.location++ - 2;
start1 = [[NSNumber alloc] initWithInt:[[string substringWithRange:range] intValue]];
NSLog( @"Old start1: %@ New start1: %@", old, start1 );
[old release];
}
else if( [notification object] == startField2 )
{
id old = start2;
NSString *string = [[notification object] stringValue];
NSRange range = [string rangeOfString:@"{" options:NSBackwardsSearch];
range.length = [string length] - range.location++ - 2;
start2 = [[NSNumber alloc] initWithInt:[[string substringWithRange:range] intValue]];
NSLog( @"Old start2: %@ New start2: %@", old, start2 );
[old release];
}
}
@end

View File

@ -7,8 +7,19 @@
OUTLETS = {
dayField = NSTextField;
dayStepper = NSStepper;
goodiesForm = NSForm;
governmentField1 = NSComboBox;
governmentField2 = NSComboBox;
governmentField3 = NSComboBox;
governmentField4 = NSComboBox;
monthField = NSTextField;
monthStepper = NSStepper;
shipField = NSComboBox;
startField1 = NSComboBox;
startField2 = NSComboBox;
startField3 = NSComboBox;
startField4 = NSComboBox;
statusForm = NSForm;
timeForm = NSForm;
yearField = NSTextField;
yearStepper = NSStepper;

View File

@ -20,6 +20,10 @@
</dict>
<key>IBLastGroupID</key>
<string>3</string>
<key>IBOpenObjects</key>
<array>
<integer>137</integer>
</array>
<key>IBSystem Version</key>
<string>5Q125</string>
</dict>

Binary file not shown.

View File

@ -14,4 +14,10 @@
return self;
}
- (void)windowDidLoad
{
[super windowDidLoad];
[self showWindow:self];
}
@end

View File

@ -1,7 +1,38 @@
#import <Cocoa/Cocoa.h>
#import "NovaWindowController.h"
#define startField [activationForm cellAtIndex:0]
#define endField [activationForm cellAtIndex:1]
@interface CronWindowController : NovaWindowController
{
IBOutlet NSTextField *startDayField;
IBOutlet NSTextField *startMonthField;
IBOutlet NSTextField *startYearField;
IBOutlet NSStepper *startDayStepper;
IBOutlet NSStepper *startMonthStepper;
IBOutlet NSStepper *startYearStepper;
IBOutlet NSTextField *endDayField;
IBOutlet NSTextField *endMonthField;
IBOutlet NSTextField *endYearField;
IBOutlet NSStepper *endDayStepper;
IBOutlet NSStepper *endMonthStepper;
IBOutlet NSStepper *endYearStepper;
IBOutlet NSForm *activationForm;
// data values
NSCalendarDate *startDate;
NSCalendarDate *endDate;
}
- (void)update;
- (IBAction)editStart:(id)sender;
- (IBAction)stepStart:(id)sender;
- (IBAction)editEnd:(id)sender;
- (IBAction)stepEnd:(id)sender;
- (IBAction)editStartField:(id)sender;
- (IBAction)editEndField:(id)sender;
@end

View File

@ -7,14 +7,94 @@
self = [self initWithWindowNibName:@"cron"];
if( !self ) return nil;
// init fields with data from resource
startDate = [[NSCalendarDate date] retain];
endDate = [[[NSCalendarDate date] dateByAddingYears:0 months:1 days:0 hours:0 minutes:0 seconds:0] retain];
// load the window from the nib file and set it's title
[self window]; // implicitly loads nib
if( [newResource name] && ![[newResource name] isEqualToString:@""] )
[[self window] setTitle:[NSString stringWithFormat:@"%@: %@", [[self window] title], [newResource name]]];
[self update];
return self;
}
// date format for start and end:
- (void)windowDidLoad
{
[super windowDidLoad];
[self showWindow:self];
}
// date format to get month as single digit:
// %e/%1m/%Y == 1/1/2000
- (void)update
{
// activation
[startDayField setObjectValue:startDate];
[startMonthField setObjectValue:startDate];
[startYearField setObjectValue:startDate];
[startDayStepper setIntValue:[startDate dayOfMonth]];
[startMonthStepper setIntValue:[startDate monthOfYear]];
[startYearStepper setIntValue:[startDate yearOfCommonEra]];
[endDayField setObjectValue:startDate];
[endMonthField setObjectValue:startDate];
[endYearField setObjectValue:startDate];
[endDayStepper setIntValue:[endDate dayOfMonth]];
[endMonthStepper setIntValue:[endDate monthOfYear]];
[endYearStepper setIntValue:[endDate yearOfCommonEra]];
[startField setObjectValue:startDate];
[endField setObjectValue:startDate];
}
- (IBAction)editStart:(id)sender
{
id old = startDate;
startDate = [[NSCalendarDate alloc] initWithYear:[startYearField intValue] month:[startMonthField intValue] day:[startDayField intValue] hour:0 minute:0 second:0 timeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[old release];
[self update];
}
- (IBAction)stepStart:(id)sender
{
id old = startDate;
startDate = [[NSCalendarDate alloc] initWithYear:[startYearStepper intValue] month:[startMonthStepper intValue] day:[startDayStepper intValue] hour:0 minute:0 second:0 timeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[old release];
[self update];
}
- (IBAction)editEnd:(id)sender
{
id old = endDate;
endDate = [[NSCalendarDate alloc] initWithYear:[endYearField intValue] month:[endMonthField intValue] day:[endDayField intValue] hour:0 minute:0 second:0 timeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[old release];
[self update];
}
- (IBAction)stepEnd:(id)sender
{
id old = endDate;
endDate = [[NSCalendarDate alloc] initWithYear:[endYearStepper intValue] month:[endMonthStepper intValue] day:[endDayStepper intValue] hour:0 minute:0 second:0 timeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[old release];
[self update];
}
- (IBAction)editStartField:(id)sender
{
id old = startDate;
startDate = [[NSCalendarDate dateWithNaturalLanguageString:[startField stringValue]] retain];
[old release];
[self update];
}
- (IBAction)editEndField:(id)sender
{
id old = endDate;
endDate = [[NSCalendarDate dateWithNaturalLanguageString:[endField stringValue]] retain];
[old release];
[self update];
}
@end

View File

@ -1,8 +1,31 @@
{
IBClasses = (
{
ACTIONS = {
editEnd = id;
editEndField = id;
editStart = id;
editStartField = id;
stepEnd = id;
stepStart = id;
};
CLASS = CronWindowController;
LANGUAGE = ObjC;
OUTLETS = {
activationForm = NSForm;
endDayField = NSTextField;
endDayStepper = NSStepper;
endMonthField = NSTextField;
endMonthStepper = NSStepper;
endYearField = NSTextField;
endYearStepper = NSStepper;
startDayField = NSTextField;
startDayStepper = NSStepper;
startMonthField = NSTextField;
startMonthStepper = NSStepper;
startYearField = NSTextField;
startYearStepper = NSStepper;
};
SUPERCLASS = NovaWindowController;
},
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },

View File

@ -3,9 +3,9 @@
<plist version="0.9">
<dict>
<key>IBDocumentLocation</key>
<string>92 580 356 240 0 0 1152 848 </string>
<string>50 125 356 240 0 0 1152 848 </string>
<key>IBFramework Version</key>
<string>248.0</string>
<string>263.2</string>
<key>IBGroupedObjects</key>
<dict>
<key>0</key>
@ -30,6 +30,6 @@
<key>IBLastGroupID</key>
<string>2</string>
<key>IBSystem Version</key>
<string>5Q110</string>
<string>5Q125</string>
</dict>
</plist>

Binary file not shown.

View File

@ -14,4 +14,10 @@
return self;
}
- (void)windowDidLoad
{
[super windowDidLoad];
[self showWindow:self];
}
@end

View File

@ -19,6 +19,7 @@
F5EDC618025BFB8601A8010C,
F5EDC61B025BFB8E01A8010C,
F5EDC61E025BFBB501A8010C,
F543AFEF027C716E01A8010C,
);
isa = PBXGroup;
name = Resources;
@ -245,39 +246,50 @@
settings = {
};
};
F543B8790274842E01A8010C = {
F543AFDB027B2A5001A8010C = {
isa = PBXFileReference;
name = ShipDataSource.m;
path = NovaTools/ship/ShipDataSource.m;
refType = 2;
};
F543B87A0274842E01A8010C = {
isa = PBXFileReference;
name = ShipDataSource.h;
path = NovaTools/ship/ShipDataSource.h;
refType = 2;
};
F543B87B0274842E01A8010C = {
fileRef = F543B8790274842E01A8010C;
isa = PBXBuildFile;
settings = {
};
};
F543B87C0274842E01A8010C = {
fileRef = F543B87A0274842E01A8010C;
isa = PBXBuildFile;
settings = {
};
};
F543B87D0274845501A8010C = {
children = (
F543B87A0274842E01A8010C,
F543B8790274842E01A8010C,
);
isa = PBXGroup;
name = "Data Sources";
path = DataSource.h;
refType = 4;
};
F543AFDC027B2A5001A8010C = {
isa = PBXFileReference;
path = DataSource.m;
refType = 4;
};
F543AFDD027B2A5001A8010C = {
fileRef = F543AFDB027B2A5001A8010C;
isa = PBXBuildFile;
settings = {
};
};
F543AFDE027B2A5001A8010C = {
fileRef = F543AFDC027B2A5001A8010C;
isa = PBXBuildFile;
settings = {
};
};
F543AFEF027C716E01A8010C = {
children = (
F543AFF0027C716E01A8010C,
);
isa = PBXVariantGroup;
name = "Resource Types.strings";
path = "";
refType = 4;
};
F543AFF0027C716E01A8010C = {
fileEncoding = 10;
isa = PBXFileReference;
name = English;
path = "English.lproj/Resource Types.strings";
refType = 4;
};
F543AFF1027C716E01A8010C = {
fileRef = F543AFEF027C716E01A8010C;
isa = PBXBuildFile;
settings = {
};
};
F54E6220021B6A0801A80001 = {
isa = PBXFileReference;
path = FindSheetController.h;
@ -598,6 +610,8 @@
};
F58A183F0278353501A8010C = {
children = (
F543AFDB027B2A5001A8010C,
F543AFDC027B2A5001A8010C,
F58A18410278355D01A8010C,
F58A18400278355D01A8010C,
);
@ -1023,6 +1037,7 @@
F5B5885C0156D40B01000001,
F5B5885E0156D40B01000001,
F5B5885F0156D40B01000001,
F51C71F60269C7E701A8010C,
F5B588600156D40B01000001,
F5B588610156D40B01000001,
F5730B940159528A01000001,
@ -1035,7 +1050,6 @@
F577A8FF0211E4D401A80001,
F577A8F50211D05E01A80001,
F577A8F90211DC1E01A80001,
F51C71F60269C7E701A8010C,
);
isa = PBXResourcesBuildPhase;
};
@ -3151,8 +3165,8 @@
F58F6B94025BD97701A8010C,
F58F6BAC025BE14801A8010C,
F58F6BAD025BE14801A8010C,
F543B87C0274842E01A8010C,
F58A18430278355D01A8010C,
F543AFDD027B2A5001A8010C,
);
isa = PBXHeadersBuildPhase;
};
@ -3165,6 +3179,7 @@
F5EDC61A025BFB8601A8010C,
F5EDC61D025BFB8E01A8010C,
F5EDC620025BFBB501A8010C,
F543AFF1027C716E01A8010C,
);
isa = PBXResourcesBuildPhase;
};
@ -3177,8 +3192,8 @@
F58F6B8D025BC7C001A8010C,
F58F6B91025BCF5901A8010C,
F58F6B95025BD97801A8010C,
F543B87B0274842E01A8010C,
F58A18420278355D01A8010C,
F543AFDE027B2A5001A8010C,
);
isa = PBXSourcesBuildPhase;
};
@ -3209,7 +3224,6 @@
F58F6B8F025BCF5901A8010C,
F58F6B93025BD97701A8010C,
F58F6B92025BD97701A8010C,
F543B87D0274845501A8010C,
F58A183F0278353501A8010C,
F51FB38E0256057F01A80001,
);