diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 018b8ab45..104b292db 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -1470,7 +1470,7 @@ NOT YET IMPLEMENTED _cornerView = aView; - var scrollView = [[self superview] superview]; + var scrollView = [self enclosingScrollView]; if ([scrollView isKindOfClass:[CPScrollView class]] && [scrollView documentView] === self) [scrollView _updateCornerAndHeaderView]; @@ -1506,8 +1506,14 @@ NOT YET IMPLEMENTED [_headerView setTableView:self]; [_headerView setFrameSize:_CGSizeMake(_CGRectGetWidth([self frame]), _CGRectGetHeight([_headerView frame]))]; } + else + { + // If there is no header view, there should be no corner view + [_cornerView removeFromSuperview]; + _cornerView = nil; + } - var scrollView = [[self superview] superview]; + var scrollView = [self enclosingScrollView]; if ([scrollView isKindOfClass:[CPScrollView class]] && [scrollView documentView] === self) [scrollView _updateCornerAndHeaderView]; diff --git a/Tests/Manual/TableTest/HeaderView-CornerView/AppController.j b/Tests/Manual/TableTest/HeaderView-CornerView/AppController.j new file mode 100644 index 000000000..128482b8c --- /dev/null +++ b/Tests/Manual/TableTest/HeaderView-CornerView/AppController.j @@ -0,0 +1,115 @@ +/* + * AppController.j + * HeaderView-CornerView + * + * Created by aparajita on May 18, 2011. + * Copyright 2011, Victory-Heart Productions All rights reserved. + */ + +@import + +var brokenTable = nil, + fixedTable = nil; + +@implementation AppController : CPObject +{ + CPWindow theWindow; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask]; + + brokenTable = [self makeTableWithCaption:@"No header, has corner: wrong" at:CPPointMake(50, 50)]; + fixedTable = [self makeTableWithCaption:@"No header, no corner: correct" at:CPPointMake(250, 50)]; + + [brokenTable setHeaderView:nil]; + [fixedTable setHeaderView:nil]; + + [theWindow orderFront:self]; + + // Uncomment the following line to turn on the standard menu bar. + //[CPMenu setMenuBarVisible:YES]; +} + +- (void)makeTableWithCaption:(CPString)caption at:(CGPoint)location +{ + var label = [CPTextField labelWithTitle:caption], + table = [[CPTableView alloc] initWithFrame:CGRectMakeZero()], + frame = CGRectMake(location.x, location.y + 25, 150, ([table rowHeight] * 5) + 2), + scroll = [[CPScrollView alloc] initWithFrame:frame]; + + [label setFrameOrigin:CGPointMake(location.x, location.y)]; + + [table setDataSource:self]; + [table setDelegate:self]; + [table setColumnAutoresizingStyle:CPTableViewLastColumnOnlyAutoresizingStyle]; + [table setUsesAlternatingRowBackgroundColors:YES]; + [table setAllowsMultipleSelection:NO]; + [table setIntercellSpacing:CGSizeMake(0, 0)]; + + var column = [[CPTableColumn alloc] initWithIdentifier:"1"]; + + [column setWidth:CGRectGetWidth(frame) - [CPScroller scrollerWidth]]; + [column setResizingMask:CPTableColumnNoResizing]; + [table addTableColumn:column]; + [table selectRowIndexes:[CPIndexSet indexSetWithIndex:0] byExtendingSelection:NO]; + + [scroll setBorderType:CPLineBorder]; + [scroll setHasHorizontalScroller:NO]; + [scroll setDocumentView:table]; + + var contentView = [theWindow contentView]; + + [contentView addSubview:label]; + [contentView addSubview:scroll]; + + return table; +} + +/*! + Returns the number of rows in the table data. + The default implementation returns the size of the table data array. +*/ +- (int)numberOfRowsInTableView:(id)tableView +{ + return 10; +} + +- (id)tableView:(id)tableView objectValueForTableColumn:(CPTableColumn)aColumn row:(int)aRow +{ + return @"Row " + aRow; +} + +@end + +@implementation CPTableView (test) + +- (void)setHeaderView:(CPView)aHeaderView +{ + if (_headerView === aHeaderView) + return; + + [_headerView setTableView:nil]; + + _headerView = aHeaderView; + + if (_headerView) + { + [_headerView setTableView:self]; + [_headerView setFrameSize:CGSizeMake(CGRectGetWidth([self frame]), CGRectGetHeight([_headerView frame]))]; + } + else if (self === fixedTable) + { + // If there is no header view, there should be no corner view + [_cornerView removeFromSuperview]; + _cornerView = nil; + } + + var scrollView = [self enclosingScrollView]; + + if ([scrollView isKindOfClass:[CPScrollView class]] && [scrollView documentView] === self) + [scrollView _updateCornerAndHeaderView]; +} + +@end diff --git a/Tests/Manual/TableTest/HeaderView-CornerView/Info.plist b/Tests/Manual/TableTest/HeaderView-CornerView/Info.plist new file mode 100644 index 000000000..ef35fb10e --- /dev/null +++ b/Tests/Manual/TableTest/HeaderView-CornerView/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + HeaderView-CornerView + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/TableTest/HeaderView-CornerView/Jakefile b/Tests/Manual/TableTest/HeaderView-CornerView/Jakefile new file mode 100644 index 000000000..f420324ca --- /dev/null +++ b/Tests/Manual/TableTest/HeaderView-CornerView/Jakefile @@ -0,0 +1,93 @@ +/* + * Jakefile + * HeaderView-CornerView + * + * Created by aparajita on May 18, 2011. + * Copyright 2011, Victory-Heart Productions All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("HeaderViewCornerView", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "HeaderViewCornerView.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("HeaderView-CornerView"); + task.setIdentifier("com.aparajita.HeaderViewCornerView"); + task.setVersion("1.0"); + task.setAuthor("Victory-Heart Productions"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("HeaderView-CornerView"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["HeaderViewCornerView"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "HeaderViewCornerView", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "HeaderViewCornerView", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "HeaderViewCornerView")); + OS.system(["press", "-f", FILE.join("Build", "Release", "HeaderViewCornerView"), FILE.join("Build", "Deployment", "HeaderViewCornerView")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "HeaderViewCornerView")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "HeaderViewCornerView"), FILE.join("Build", "Desktop", "HeaderViewCornerView", "HeaderViewCornerView.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "HeaderViewCornerView", "HeaderViewCornerView.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "HeaderViewCornerView")); + print("----------------------------"); +} diff --git a/Tests/Manual/TableTest/HeaderView-CornerView/Resources/spinner.gif b/Tests/Manual/TableTest/HeaderView-CornerView/Resources/spinner.gif new file mode 100644 index 000000000..06dbc2bc2 Binary files /dev/null and b/Tests/Manual/TableTest/HeaderView-CornerView/Resources/spinner.gif differ diff --git a/Tests/Manual/TableTest/HeaderView-CornerView/index-debug.html b/Tests/Manual/TableTest/HeaderView-CornerView/index-debug.html new file mode 100644 index 000000000..613eeb492 --- /dev/null +++ b/Tests/Manual/TableTest/HeaderView-CornerView/index-debug.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + HeaderView-CornerView + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/TableTest/HeaderView-CornerView/index.html b/Tests/Manual/TableTest/HeaderView-CornerView/index.html new file mode 100644 index 000000000..e894fc5f0 --- /dev/null +++ b/Tests/Manual/TableTest/HeaderView-CornerView/index.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + HeaderView-CornerView + + + + + + + + + + + + +
+
+ + + +
+
+ + + + diff --git a/Tests/Manual/TableTest/HeaderView-CornerView/main.j b/Tests/Manual/TableTest/HeaderView-CornerView/main.j new file mode 100644 index 000000000..b202f5bf1 --- /dev/null +++ b/Tests/Manual/TableTest/HeaderView-CornerView/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * HeaderView-CornerView + * + * Created by aparajita on May 18, 2011. + * Copyright 2011, Victory-Heart Productions All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +}