mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-10-10 10:42:19 +00:00
Beginnings of a simple array controller test app.
This commit is contained in:
1 parent
9bbe51fa64
commit
18cf198592
11 files changed
+286
No files matched your search
@@ -0,0 +1,177 @@
|
||||
/*
|
||||
* AppController.j
|
||||
* ArrayController
|
||||
*
|
||||
* Created by __Me__ on __Date__.
|
||||
* Copyright 2008 __MyCompanyName__. All rights reserved.
|
||||
*/
|
||||
|
||||
@import <Foundation/CPObject.j>
|
||||
@import <AppKit/CPArrayController.j>
|
||||
|
||||
CPLogRegister(CPLogConsole);
|
||||
|
||||
@implementation AppController : CPObject
|
||||
{
|
||||
CPArray itemsArray;
|
||||
|
||||
//CPTableView tableView;
|
||||
//CPTextField selectedNameField;
|
||||
//CPTextField selectedPriceField;
|
||||
CPTextField totalCountField;
|
||||
|
||||
CPArrayController arrayController;
|
||||
}
|
||||
|
||||
- (void)applicationDidFinishLaunching:(CPNotification)aNotification
|
||||
{
|
||||
var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask],
|
||||
contentView = [theWindow contentView];
|
||||
|
||||
//create our non ui objects
|
||||
|
||||
itemsArray = [[Item new]];
|
||||
|
||||
arrayController = [[CPArrayController alloc] init];
|
||||
|
||||
[arrayController setEditable:YES];
|
||||
[arrayController setObjectClass:Item];
|
||||
[arrayController setAutomaticallyPreparesContent:YES];
|
||||
|
||||
[arrayController setSelectsInsertedObjects:YES];
|
||||
[arrayController setAvoidsEmptySelection:YES];
|
||||
|
||||
//create our UI elements
|
||||
|
||||
//tableView = [[CPTableView alloc] initWithFrame:CGRectMake(0, 0, 400, 200)];
|
||||
//[tableView setCenter:[contentView center]];
|
||||
|
||||
totalCountField = [[CPTextField alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];
|
||||
[totalCountField setCenter:[contentView center]];
|
||||
|
||||
[totalCountField setStringValue:@"HELLO WORLD"];
|
||||
|
||||
[contentView addSubview:totalCountField];
|
||||
|
||||
var frame = [totalCountField frame],
|
||||
button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(frame)+100, CGRectGetMaxY(frame)+10, 100, 18)];
|
||||
|
||||
[button setTitle:"ADD"];
|
||||
[button setTarget:arrayController];
|
||||
[button setAction:@selector(add:)];
|
||||
|
||||
[contentView addSubview:button];
|
||||
|
||||
button = [[CPButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(frame)+100, CGRectGetMaxY(frame)+38, 100, 18)];
|
||||
|
||||
[button setTitle:"REMOVE"];
|
||||
[button setTarget:arrayController];
|
||||
[button setAction:@selector(remove:)];
|
||||
|
||||
[contentView addSubview:button];
|
||||
|
||||
//create our bindings
|
||||
|
||||
[self createBindings];
|
||||
|
||||
//order front window
|
||||
|
||||
[theWindow orderFront:self];
|
||||
}
|
||||
|
||||
- (void)createBindings
|
||||
{
|
||||
// bind array controller to self's itemsArray
|
||||
[arrayController bind:@"contentArray" toObject: self
|
||||
withKeyPath:@"itemsArray" options:nil];
|
||||
|
||||
// bind the total field -- no options on this one
|
||||
[totalCountField bind:CPValueBinding toObject:arrayController
|
||||
withKeyPath:@"arrangedObjects.@sum.price" options:nil];
|
||||
|
||||
|
||||
//var bindingOptions = [CPDictionary dictionary];
|
||||
|
||||
// binding options for "name"
|
||||
//[bindingOptions setObject:@"No Name" forKey:@"NSNullPlaceholder"];
|
||||
|
||||
// binding for selected "name" field
|
||||
//[selectedNameField bind: @"value" toObject: arrayController
|
||||
// withKeyPath:@"selection.name" options:bindingOptions];
|
||||
|
||||
// binding for "name" column
|
||||
//var tableColumn = [tableView tableColumnWithIdentifier:@"name"];
|
||||
|
||||
//[tableColumn bind:@"value" toObject: arrayController
|
||||
// withKeyPath:@"arrangedObjects.name" options:bindingOptions];
|
||||
|
||||
|
||||
// binding options for "price"
|
||||
// no need for placeholder as overridden by formatters
|
||||
//[bindingOptions removeObjectForKey:@"NSNullPlaceholder"];
|
||||
|
||||
//[bindingOptions setObject:YES
|
||||
// forKey:CPValidatesImmediatelyBindingOption];
|
||||
|
||||
// binding for selected "price" field
|
||||
//[selectedPriceField bind: @"value" toObject: arrayController
|
||||
// withKeyPath:@"selection.price" options:bindingOptions];
|
||||
|
||||
|
||||
// binding for "price" column
|
||||
//tableColumn = [tableView tableColumnWithIdentifier:@"price"];
|
||||
|
||||
//[tableColumn bind:@"value" toObject: arrayController
|
||||
// withKeyPath:@"arrangedObjects.price" options:bindingOptions];
|
||||
|
||||
|
||||
}
|
||||
|
||||
- (unsigned int)countOfItemsArray
|
||||
{
|
||||
return [itemsArray count];
|
||||
}
|
||||
|
||||
- (id)objectInItemsArrayAtIndex:(unsigned int)index
|
||||
{
|
||||
return [itemsArray objectAtIndex:index];
|
||||
}
|
||||
|
||||
- (void)insertObject:(id)anObject inItemsArrayAtIndex:(unsigned int)index
|
||||
{
|
||||
[itemsArray insertObject:anObject atIndex:index];
|
||||
}
|
||||
|
||||
- (void)removeObjectFromItemsArrayAtIndex:(unsigned int)index
|
||||
{
|
||||
[itemsArray removeObjectAtIndex:index];
|
||||
}
|
||||
|
||||
- (void)replaceObjectInItemsArrayAtIndex:(unsigned int)index withObject:(id)anObject
|
||||
{
|
||||
[itemsArray replaceObjectAtIndex:index withObject:anObject];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation Item : CPObject
|
||||
{
|
||||
float price @accessors;
|
||||
}
|
||||
|
||||
- (id)init
|
||||
{
|
||||
self = [super init];
|
||||
price = 1.0;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (BOOL)validatePrice:(id)value error:({CPError})error
|
||||
{
|
||||
if ([value intValue] >= 0)
|
||||
return YES;
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in new issue
Block a user