This is ExpenseEditor.m in view mode; [Download] [Up]
/*
* For legal stuff see the file COPYRIGHT
*/
#import "ExpenseEditor.h"
#import "Controller.h"
@implementation ExpenseEditor
- awakeFromNib
{
[descriptionField setScrollable:YES];
return self;
}
/*
* Allow only one ExpenseEditor object to be created.
*/
+ new
{
static id editor;
if ( ! editor ) {
editor = [[ExpenseEditor alloc] init];
[NXApp loadNibSection:"ExpenseEditor.nib" owner:editor withNames:NO];
}
return editor;
}
- init
{
[super init];
return self;
}
- free
{
return [super free];
}
- (float)amount
{
return [amountField floatValue];
}
- (const char *)dateString
{
return [dateField stringValue];
}
- (const char *)description
{
return [descriptionField stringValue];
}
- (void)clearFields
{
[dateField setStringValue:""];
[descriptionField setStringValue:""];
[amountField setStringValue:""];
}
/*
* Display the contents of an expense object
*/
- (void)loadExpense:(Expense *)expense
{
if ( expense == nil ) {
[self clearFields];
[dateField setStringValue:currentDate()];
} else {
[dateField setStringValue:[expense dateString]];
[descriptionField setStringValue:[expense description]];
[amountField setFloatValue: [expense amount]];
}
}
/*
* Copy the data from the form into the expense object. If the
* object is nil, allocate one and return it.
*/
- (Expense *)saveExpense:(Expense *)expense
{
if ( expense == nil )
expense = [[Expense alloc] init];
[expense setDateString: [dateField stringValue]];
[expense setDescription:[descriptionField stringValue]];
[expense setAmount: [amountField floatValue]];
return expense;
}
/*
* This routine should check that there is enough data to be useful...
*/
- (Expense *)editItem:(Expense *)expense
{
int value ;
[self loadExpense:expense];
[form selectTextAt:0]; /* always select the first field */
value = [NXApp runModalFor:panel] ;
[panel close];
switch ( value ) {
case NX_RUNSTOPPED:
return [self saveExpense:expense]; /* copy data back into struct */
default:
case NX_RUNABORTED:
return nil;
}
}
- cancel:sender
{
[NXApp abortModal];
return self;
}
- ok:sender
{
int dummy;
/* This is pretty cheesey. */
if ( sscanf( [dateField stringValue], "%d/%d/%d",
&dummy, &dummy, &dummy ) != 3 ) {
NXRunAlertPanel( [NXApp name], "Valid date (mm/dd/yy) required.",
"Pardon me", NULL, NULL );
} else
[NXApp stopModal];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.