mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-26 05:27:03 +00:00
169 lines
4.9 KiB
Plaintext
169 lines
4.9 KiB
Plaintext
/*
|
|
* AppController.j
|
|
* CPTableViewLionCibTest
|
|
*
|
|
* Created by You on March 8, 2012.
|
|
* Copyright 2012, Your Company All rights reserved.
|
|
*/
|
|
|
|
@import <Foundation/CPObject.j>
|
|
@import "../CPTrace.j"
|
|
|
|
var TABLE_DRAG_TYPE = @"TABLE_DRAG_TYPE",
|
|
tracing = NO;
|
|
|
|
@implementation AppController : CPObject
|
|
{
|
|
CPWindow theWindow; //this "outlet" is connected automatically by the Cib
|
|
@outlet CPTableView tableView;
|
|
@outlet CPTextField textField;
|
|
@outlet CPArrayController contentController;
|
|
|
|
CPArray content @accessors;
|
|
float avgPerRow @accessors;
|
|
}
|
|
|
|
- (void)applicationDidFinishLaunching:(CPNotification)note
|
|
{
|
|
content = [CPArray new];
|
|
avgPerRow = 0;
|
|
|
|
var path = [[CPBundle mainBundle] pathForResource:@"Data.plist"],
|
|
request = [CPURLRequest requestWithURL:path],
|
|
connection = [CPURLConnection connectionWithRequest:request delegate:self];
|
|
|
|
[theWindow setFullBridge:YES];
|
|
[tableView registerForDraggedTypes:[CPArray arrayWithObject:TABLE_DRAG_TYPE]];
|
|
}
|
|
|
|
- (void)connection:(CPURLConnection)connection didReceiveData:(CPString)dataString
|
|
{
|
|
if (!dataString)
|
|
return;
|
|
|
|
var data = [[CPData alloc] initWithRawString:dataString],
|
|
theRows = [CPPropertyListSerialization propertyListFromData:data format:CPPropertyListXMLFormat_v1_0];
|
|
|
|
[self setContent:theRows];
|
|
}
|
|
|
|
- (void)tableView:(CPTableView)aTableView dataViewForTableColumn:(CPTableColumn)aTableColumn row:(int)aRow
|
|
{
|
|
var identifier = [aTableColumn identifier];
|
|
|
|
if (identifier != @"Description")
|
|
identifier = [[content objectAtIndex:aRow] objectForKey:@"identifier"];
|
|
|
|
var view = [aTableView makeViewWithIdentifier:identifier owner:self];
|
|
|
|
if (view == nil)
|
|
view = [[CPTableCellView alloc] initWithFrame:CGRectMakeZero()];
|
|
|
|
return view;
|
|
}
|
|
|
|
- (BOOL)tableView:(CPTableView)aTableView writeRowsWithIndexes:(CPIndexSet)rowIndexes toPasteboard:(CPPasteboard)pboard
|
|
{
|
|
[pboard declareTypes:[CPArray arrayWithObject:TABLE_DRAG_TYPE] owner:self];
|
|
[pboard setData:rowIndexes forType:TABLE_DRAG_TYPE];
|
|
|
|
return YES;
|
|
}
|
|
|
|
- (CPDragOperation)tableView:(CPTableView)aTableView
|
|
validateDrop:(id)info
|
|
proposedRow:(CPInteger)row
|
|
proposedDropOperation:(CPTableViewDropOperation)operation
|
|
{
|
|
|
|
[aTableView setDropRow:row dropOperation:CPTableViewDropAbove];
|
|
|
|
return CPDragOperationMove;
|
|
}
|
|
|
|
- (BOOL)tableView:(CPTableView)aTableView acceptDrop:(id)info row:(int)row dropOperation:(CPTableViewDropOperation)operation
|
|
{
|
|
var pboard = [info draggingPasteboard],
|
|
sourceIndexes = [pboard dataForType:TABLE_DRAG_TYPE],
|
|
firstObject = [content objectAtIndex:[sourceIndexes firstIndex]];
|
|
|
|
[content moveIndexes:sourceIndexes toIndex:row];
|
|
[contentController rearrangeObjects];
|
|
|
|
// Select the rows we just moved.
|
|
var destinationRange = CPMakeRange([content indexOfObject:firstObject], [sourceIndexes count]),
|
|
selectIndexes = [CPIndexSet indexSetWithIndexesInRange:destinationRange];
|
|
|
|
[aTableView selectRowIndexes:selectIndexes byExtendingSelection:NO];
|
|
|
|
return YES;
|
|
}
|
|
|
|
- (void)awakeFromCib
|
|
{
|
|
// Called each time a cib containing a CPTableCellView is instantiated because we set the owner to self. Certainly a better idea to have a separate table view delegate if you need awakeFromCib to do some initialization in the AppController.
|
|
CPLogConsole(_cmd + textField);
|
|
}
|
|
|
|
- (IBAction)_sliderAction:(id)sender
|
|
{
|
|
// Action sent from a cellView subview. You can access outlets (built-in or custom) defined in CPTableCellView or a subclass if you define the same outlets in the owner class.In this example, the owner is self.
|
|
CPLogConsole(_cmd);
|
|
}
|
|
|
|
- (IBAction)trace:(id)sender
|
|
{
|
|
if ([sender state] == CPOnState)
|
|
{
|
|
var tlr = 0;
|
|
var f = function(a,b,c,d,e,f,g)
|
|
{
|
|
var lr = [c[0] count];
|
|
if (d > 0)
|
|
tlr += lr;
|
|
|
|
var avg = (ROUND(100 * e/tlr) / 100);
|
|
console.log(b + " " + lr + " rows in " + d + " ms ; avg/row = " + avg + " ms");
|
|
[self setAvgPerRow:avg];
|
|
}
|
|
|
|
CPTrace(@"CPTableView", @"_loadDataViewsInRows:columns:", f);
|
|
}
|
|
else
|
|
CPTraceStop(@"CPTableView", @"_loadDataViewsInRows:columns:");
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation CPArray (MoveIndexes)
|
|
|
|
- (void)moveIndexes:(CPIndexSet)indexes toIndex:(int)insertIndex
|
|
{
|
|
var aboveCount = 0,
|
|
object,
|
|
removeIndex,
|
|
index = [indexes lastIndex];
|
|
|
|
while (index != CPNotFound)
|
|
{
|
|
if (index >= insertIndex)
|
|
{
|
|
removeIndex = index + aboveCount;
|
|
aboveCount ++;
|
|
}
|
|
else
|
|
{
|
|
removeIndex = index;
|
|
insertIndex --;
|
|
}
|
|
|
|
object = [self objectAtIndex:removeIndex];
|
|
[self removeObjectAtIndex:removeIndex];
|
|
[self insertObject:object atIndex:insertIndex];
|
|
|
|
index = [indexes indexLessThanIndex:index];
|
|
}
|
|
}
|
|
|
|
@end
|