From 0aa65de6df8e24d1b268b3b7e650c4f8d5e6e384 Mon Sep 17 00:00:00 2001 From: Randall Luecke Date: Sun, 19 Sep 2010 23:26:52 -0400 Subject: [PATCH 01/10] Fix for CPCookie not working after DOM checks. --- AppKit/CPCookie.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/CPCookie.j b/AppKit/CPCookie.j index a34d6e59f..5e0f9bd4c 100644 --- a/AppKit/CPCookie.j +++ b/AppKit/CPCookie.j @@ -23,6 +23,7 @@ @import @import +#include "Platform/Platform.h" /*! @ingroup appkit From 46c14f3766da69131751c575adceb1f160425cf4 Mon Sep 17 00:00:00 2001 From: Derek Hammer Date: Fri, 27 Aug 2010 02:06:11 -0500 Subject: [PATCH 02/10] Adding the real skeleton Copying previous constants Removing unnecessary constants Borrowing initialization from my old implementation. Refactoring the initialization method and adding setBackgroundColor: override. Removing +initialize (no theming support yet) and -viewDidMoveToWindow (not sure why this was there?) Implement the bulk of the new CPTabView Adding delegate selectors. Don't think this is complete, though. What about when a user clicks on a segmented tab control?! Adding delegate Think I may have fixed the delegate blocking for selected segment control items Adding tests. Fixing a bug by reverting to old way. Delegates still broken. Cleaning up the test. Resolving delegate issues (thanks Saikat!). Switching tab appearance based on type enum. Updating tests to slightly test this. Conflicts: AppKit/CPTabView2.j --- AppKit/CPTabView2.j | 438 ++++++++++++++++++ Tests/Manual/CPTabView2/AppController.j | 42 ++ Tests/Manual/CPTabView2/Info.plist | 12 + Tests/Manual/CPTabView2/Jakefile | 93 ++++ Tests/Manual/CPTabView2/Resources/spinner.gif | Bin 0 -> 1849 bytes Tests/Manual/CPTabView2/index-debug.html | 104 +++++ Tests/Manual/CPTabView2/index.html | 79 ++++ Tests/Manual/CPTabView2/main.j | 18 + 8 files changed, 786 insertions(+) create mode 100644 AppKit/CPTabView2.j create mode 100644 Tests/Manual/CPTabView2/AppController.j create mode 100644 Tests/Manual/CPTabView2/Info.plist create mode 100644 Tests/Manual/CPTabView2/Jakefile create mode 100644 Tests/Manual/CPTabView2/Resources/spinner.gif create mode 100644 Tests/Manual/CPTabView2/index-debug.html create mode 100644 Tests/Manual/CPTabView2/index.html create mode 100644 Tests/Manual/CPTabView2/main.j diff --git a/AppKit/CPTabView2.j b/AppKit/CPTabView2.j new file mode 100644 index 000000000..43cec65a6 --- /dev/null +++ b/AppKit/CPTabView2.j @@ -0,0 +1,438 @@ +@import + +/* + Places tabs on top with a bezeled border. + @global + @group CPTabViewType +*/ +CPTopTabsBezelBorder = 0; +//CPLeftTabsBezelBorder = 1; +CPBottomTabsBezelBorder = 2; +//CPRightTabsBezelBorder = 3; +/* + Displays no tabs and has a bezeled border. + @global + @group CPTabViewType +*/ +CPNoTabsBezelBorder = 4; +/* + Has no tabs and displays a line border. + @global + @group CPTabViewType +*/ +CPNoTabsLineBorder = 5; +/* + Displays no tabs and no border. + @global + @group CPTabViewType +*/ +CPNoTabsNoBorder = 6; + +var CPTabViewDidSelectTabViewItemSelector = 1, + CPTabViewShouldSelectTabViewItemSelector = 2, + CPTabViewWillSelectTabViewItemSelector = 4, + CPTabViewDidChangeNumberOfTabViewItemsSelector = 8; + +var HEIGHT_OF_SEGMENTED_CONTROL = 24; + +@implementation CPTabView2 : CPView +{ + CPArray items; + + CPSegmentedControl tabs; + CPBox box; + + CPNumber selectedIndex; + + CPTabViewType type; + + id delegate; + unsigned delegateSelectors; +} + +- (id)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + if(self) + { + items = [CPArray array]; + + tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, HEIGHT_OF_SEGMENTED_CONTROL)]; + [tabs setHitTests:NO]; + + box = [[CPBox alloc] initWithFrame:CGRectMake(0, HEIGHT_OF_SEGMENTED_CONTROL/2, CGRectGetWidth(aFrame), + CGRectGetHeight(aFrame)-HEIGHT_OF_SEGMENTED_CONTROL)]; + + selectedIndex = CPNotFound; + + [self setTabViewType:CPTopTabsBezelBorder]; + [self setBackgroundColor:[CPColor colorWithCalibratedWhite:0.95 alpha:1.0]]; + + [self addSubview:box]; + [self addSubview:tabs]; + } + return self; +} + +// Adding and Removing Tabs +/*! + Adds a CPTabViewItem to the tab view. + @param aTabViewItem the item to add +*/ +- (void)addTabViewItem:(CPTabViewItem)aTabViewItem +{ + [self insertTabViewItem:aTabViewItem atIndex:[items count]]; +} + +/*! + Inserts a CPTabViewItem into the tab view + at the specified index. + @param aTabViewItem the item to insert + @param anIndex the index for the item +*/ +- (void)insertTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(unsigned)anIndex +{ + [items insertObject:aTabViewItem atIndex:anIndex]; + + [self _updateItems]; + [self _repositionTabs]; + + if (delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) + [delegate tabViewDidChangeNumberOfTabViewItems:self]; +} + +/*! + Removes the specified tab view item from the tab view. + @param aTabViewItem the item to remove +*/ +- (void)removeTabViewItem:(CPTabViewItem)aTabViewItem +{ + for(var i = 0; i < [items count]; i++) + { + if([items objectAtIndex:i] === aTabViewItem) + { + [items removeObjectAtIndex:i]; + } + } + + [self _updateItems]; + [self _repositionTabs]; + + if (delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) + [delegate tabViewDidChangeNumberOfTabViewItems:self]; +} + +// Accessing Tabs +/*! + Returns the index of the specified item + @param aTabViewItem the item to find the index for +*/ +- (int)indexOfTabViewItem:(CPTabViewItem)aTabViewItem +{ + return [items indexOfObjectIdenticalTo:aTabViewItem]; +} + +/*! + Returns the index of the CPTabViewItem with the specified identifier. + @param anIdentifier the identifier of the item +*/ +- (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier +{ + for (var k = [items count]; k >= 0; index--) + if ([[items[index] identifier] isEqual:anIdentifier]) + return index; + + return CPNotFound; +} + +/*! + Returns the number of items in the tab view. +*/ +- (unsigned)numberOfTabViewItems +{ + return [items count]; +} + +/*! + Returns the CPTabViewItem at the specified index. +*/ +- (CPTabViewItem)tabViewItemAtIndex:(unsigned)anIndex +{ + return [items objectAtIndex:anIndex]; +} + +/*! + Returns the array of items that backs this tab view. +*/ +- (CPArray)tabViewItems +{ + return [items copy]; // Copy? +} + +// Selecting a Tab +/*! + Sets the first tab view item in the array to be displayed to the user. + @param aSender the object making this request +*/ +- (void)selectFirstTabViewItem:(id)aSender +{ + if([items count] === 0) + return; // throw? + + [self selectTabViewItemAtIndex:0]; +} + +/*! + Sets the last tab view item in the array to be displayed to the user. + @param aSender the object making this request +*/ +- (void)selectLastTabViewItem:(id)aSender +{ + if([items count] === 0) + return; // throw? + + [self selectTabViewItemAtIndex:[items count]-1]; +} + +/*! + Sets the next tab item in the array to be displayed. + @param aSender the object making this request +*/ +- (void)selectNextTabViewItem:(id)aSender +{ + if(selectedIndex === CPNotFound) + return; + + var nextIndex = selectedIndex + 1; + + if(nextIndex === [items count]) + return; // does nothing. According to spec at (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSTabView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTabView/selectNextTabViewItem:) + + [self selectTabViewItemAtIndex:nextIndex]; +} + +/*! + Selects the previous item in the array for display. + @param aSender the object making this request +*/ +- (void)selectPreviousTabViewItem:(id)aSender +{ + if(selectedIndex === CPNotFound) + return; + + var previousIndex = selectedIndex - 1; + + if(previousIndex < 0) + return; // does nothing. See above. + + [self selectTabViewItemAtIndex:previousIndex]; +} + +/*! + Displays the specified item in the tab view. + @param aTabViewItem the item to display +*/ +- (void)selectTabViewItem:(CPTabViewItem)aTabViewItem +{ + [self selectTabViewItemAtIndex:[self indexOfTabViewItem:aTabViewItem]]; +} + +/*! + Selects the item at the specified index. + @param anIndex the index of the item to display. +*/ +- (void)selectTabViewItemAtIndex:(unsigned)anIndex +{ + if(anIndex === selectedIndex) + return; + + if ((delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![delegate tabView:self shouldSelectTabViewItem:aTabViewItem]) + return; + + if (delegateSelectors & CPTabViewWillSelectTabViewItemSelector) + [delegate tabView:self willSelectTabViewItem:aTabViewItem]; + + [tabs selectSegmentWithTag:anIndex]; + [self _setSelectedIndex:anIndex]; + + if (delegateSelectors & CPTabViewDidSelectTabViewItemSelector) + [delegate tabView:self didSelectTabViewItem:aTabViewItem]; +} + +/*! + Returns the current item being displayed. +*/ +- (CPTabViewItem)selectedTabViewItem +{ + return [items objectAtIndex:selectedIndex]; +} + +// +/*! + Sets the tab view type. + @param aTabViewType the view type +*/ +- (void)setTabViewType:(CPTabViewType)aTabViewType +{ + if (type === aTabViewType) + return; + + if ((type === CPTopTabsBezelBorder || type === CPBottomTabsBezelBorder) + && (aTabViewType !== CPTopTabsBezelBorder && aTabViewType !== CPBottomTabsBezelBorder)) + [tabs removeFromSuperview]; + + if ((type === CPNoTabsBezelBorder || type === CPNoTabsLineBorder || type === CPNoTabsNoBorder) + && (aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsNoBorder)) + [self addSubview:tabs]; + + type = aTabViewType; + + switch(type) { + case CPTopTabsBezelBorder: + case CPBottomTabsBezelBorder: + case CPNoTabsBezelBorder: + [box setBorderType:CPBezelBorder]; + break; + case CPNoTabsLineBorder: + [box setBorderType:CPLineBorder]; + break; + case CPNoTabsNoBorder: + [box setBorderType:CPNoBorder]; + break; + } +} + +/*! + Returns the tab view type. +*/ +- (CPTabViewType)tabViewType +{ + return type; +} + +/*! + Returns the receiver's delegate. +*/ +- (id)delegate +{ + return delegate; +} + +/*! + Sets the delegate for this tab view. + @param aDelegate the tab view's delegate +*/ +- (void)setDelegate:(id)aDelegate +{ + if (delegate == aDelegate) + return; + + delegate = aDelegate; + + delegateSelectors = 0; + + if ([delegate respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)]) + delegateSelectors |= CPTabViewShouldSelectTabViewItemSelector; + + if ([delegate respondsToSelector:@selector(tabView:willSelectTabViewItem:)]) + delegateSelectors |= CPTabViewWillSelectTabViewItemSelector; + + if ([delegate respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) + delegateSelectors |= CPTabViewDidSelectTabViewItemSelector; + + if ([delegate respondsToSelector:@selector(tabViewDidChangeNumberOfTabViewItems:)]) + delegateSelectors |= CPTabViewDidChangeNumberOfTabViewItemsSelector; +} + +- (void)setBackgroundColor:(CPColor)aColor +{ + [box setBackgroundColor:aColor]; +} + +- (void)mouseDown:(CPEvent)anEvent +{ + var segmentIndex = [tabs testSegment:[tabs convertPoint:[anEvent locationInWindow] fromView:nil]]; + + if(segmentIndex != CPNotFound) { + [self selectTabViewItemAtIndex:segmentIndex]; + [tabs trackSegment:anEvent]; + } +} + +- (void)_repositionTabs +{ + var horizontalCenterOfSelf = CGRectGetWidth([self bounds])/2; + var verticalCenterOfTabs = CGRectGetHeight([tabs bounds])/2; + + if(type === CPBottomTabsBezelBorder) + [tabs setCenter:CGPointMake(horizontalCenterOfSelf, CGRectGetHeight([self bounds]) - verticalCenterOfTabs)]; + else + [tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)]; +} + +- (void)_setSelectedIndex:(CPNumber)index +{ + selectedIndex = index; + + [box setContentView:[[items objectAtIndex:selectedIndex] view]]; +} + +- (void)_updateItems +{ + [tabs setSegmentCount:[items count]]; + + for(var i = 0; i < [items count]; i++) + { + [tabs setLabel:[[items objectAtIndex:i] label] forSegment:i]; + [tabs setTag:i forSegment:i]; + } + + if(selectedIndex === CPNotFound) + { + [self selectFirstTabViewItem:self]; + } +} + +@end + +var CPTabViewItemsKey = "CPTabViewItemsKey", + CPTabViewSelectedItemKey = "CPTabViewSelectedItemKey", + CPTabViewTypeKey = "CPTabViewTypeKey", + CPTabViewDelegateKey = "CPTabViewDelegateKey"; + +@implementation CPTabView (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super initWithCoder:aCoder]) + { + type = [aCoder decodeIntForKey:CPTabViewTypeKey]; + items = []; + + var encodedItems = [aCoder decodeObjectForKey:CPTabViewItemsKey]; + for (var i = 0; encodedItems && i < encodedItems.length; i++) + [self insertTabViewItem:encodedItems[i] atIndex:i]; + + var selected = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey]; + if (selected) + [self selectTabViewItem:selected]; + + [self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + + [aCoder encodeObject:items forKey:CPTabViewItemsKey];; + [aCoder encodeObject:[self selectedTabViewItem] forKey:CPTabViewSelectedItemKey]; + + [aCoder encodeInt:type forKey:CPTabViewTypeKey]; + + [aCoder encodeConditionalObject:delegate forKey:CPTabViewDelegateKey]; +} + +@end diff --git a/Tests/Manual/CPTabView2/AppController.j b/Tests/Manual/CPTabView2/AppController.j new file mode 100644 index 000000000..09aac924b --- /dev/null +++ b/Tests/Manual/CPTabView2/AppController.j @@ -0,0 +1,42 @@ +/* + * AppController.j + * CPTabView2 + * + * Created by You on August 27, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import +@import + +@implementation AppController : CPObject + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], + contentView = [theWindow contentView]; + + var tabView = [[CPTabView2 alloc] initWithFrame:CGRectMake(50,50,400,400)]; + [tabView setTabViewType:CPNoTabsBezelBorder]; + [tabView setTabViewType:CPBottomTabsBezelBorder]; + + var view = [[CPView alloc] initWithFrame:CGRectMake(20, 20, 200, 200)]; + [view addSubview:[CPTextField labelWithTitle:@"First"]]; + var item = [[CPTabViewItem alloc] initWithIdentifier:@"a"]; + [item setView:view]; + [item setLabel:"Test"]; + [tabView addTabViewItem:item]; + + view = [[CPView alloc] initWithFrame:CGRectMake(20, 20, 200, 200)]; + [view addSubview:[CPTextField labelWithTitle:@"Second"]]; + item = [[CPTabViewItem alloc] initWithIdentifier:@"a"]; + [item setView:view]; + [item setLabel:"Test2"]; + [tabView addTabViewItem:item]; + + [contentView addSubview:tabView]; + + [theWindow orderFront:self]; +} + +@end diff --git a/Tests/Manual/CPTabView2/Info.plist b/Tests/Manual/CPTabView2/Info.plist new file mode 100644 index 000000000..f00b01f29 --- /dev/null +++ b/Tests/Manual/CPTabView2/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + CPTabView2 + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/CPTabView2/Jakefile b/Tests/Manual/CPTabView2/Jakefile new file mode 100644 index 000000000..43a74e5db --- /dev/null +++ b/Tests/Manual/CPTabView2/Jakefile @@ -0,0 +1,93 @@ +/* + * Jakefile + * CPTabView2 + * + * Created by You on August 27, 2010. + * Copyright 2010, Your Company 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 ("CPTabView2", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CPTabView2.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPTabView2"); + task.setIdentifier("com.yourcompany.CPTabView2"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPTabView2"); + 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", ["CPTabView2"], 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", "CPTabView2", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CPTabView2", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CPTabView2")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPTabView2"), FILE.join("Build", "Deployment", "CPTabView2")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CPTabView2")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPTabView2"), FILE.join("Build", "Desktop", "CPTabView2", "CPTabView2.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CPTabView2", "CPTabView2.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPTabView2")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPTabView2/Resources/spinner.gif b/Tests/Manual/CPTabView2/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPTabView2/index-debug.html b/Tests/Manual/CPTabView2/index-debug.html new file mode 100644 index 000000000..d794ea518 --- /dev/null +++ b/Tests/Manual/CPTabView2/index-debug.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + CPTabView2 + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPTabView2/index.html b/Tests/Manual/CPTabView2/index.html new file mode 100644 index 000000000..904d15f6b --- /dev/null +++ b/Tests/Manual/CPTabView2/index.html @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + CPTabView2 + + + + + + + + + + + + +
+
+ + + +
+
+ + + + diff --git a/Tests/Manual/CPTabView2/main.j b/Tests/Manual/CPTabView2/main.j new file mode 100644 index 000000000..e4ad3053f --- /dev/null +++ b/Tests/Manual/CPTabView2/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPTabView2 + * + * Created by You on August 27, 2010. + * Copyright 2010, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 33505796753ace0f8964b49b3990a526dcc2bc98 Mon Sep 17 00:00:00 2001 From: Derek Hammer Date: Fri, 27 Aug 2010 02:22:25 -0500 Subject: [PATCH 03/10] Patch to fix error. :( --- AppKit/CPTabView2.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPTabView2.j b/AppKit/CPTabView2.j index 43cec65a6..0b3238095 100644 --- a/AppKit/CPTabView2.j +++ b/AppKit/CPTabView2.j @@ -138,7 +138,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier { - for (var k = [items count]; k >= 0; index--) + for (var index = [items count]; index >= 0; index--) if ([[items[index] identifier] isEqual:anIdentifier]) return index; From 8e74418a5c5afaa1751fcd7f468b5706dd12338f Mon Sep 17 00:00:00 2001 From: Derek Hammer Date: Sun, 19 Sep 2010 15:45:27 -0500 Subject: [PATCH 04/10] Replacing CPTabView with new one --- AppKit/CPTabView.j | 758 ++++++++++++-------------------------------- AppKit/CPTabView2.j | 438 ------------------------- 2 files changed, 194 insertions(+), 1002 deletions(-) delete mode 100644 AppKit/CPTabView2.j diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 04fa320ba..0b3238095 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -1,31 +1,4 @@ -/* - * CPTabView.j - * AppKit - * - * Created by Francisco Tolmasky. - * Copyright 2008, 280 North, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -@import "CPImageView.j" -@import "CPTabViewItem.j" -@import "CPView.j" - -#include "CoreGraphics/CGGeometry.h" - +@import /* Places tabs on top with a bezeled border. @@ -34,7 +7,7 @@ */ CPTopTabsBezelBorder = 0; //CPLeftTabsBezelBorder = 1; -//CPBottomTabsBezelBorder = 2; +CPBottomTabsBezelBorder = 2; //CPRightTabsBezelBorder = 3; /* Displays no tabs and has a bezeled border. @@ -55,171 +28,50 @@ CPNoTabsLineBorder = 5; */ CPNoTabsNoBorder = 6; -var CPTabViewBezelBorderLeftImage = nil, - CPTabViewBackgroundCenterImage = nil, - CPTabViewBezelBorderRightImage = nil, - CPTabViewBezelBorderColor = nil, - CPTabViewBezelBorderBackgroundColor = nil; - -var LEFT_INSET = 7.0, - RIGHT_INSET = 7.0; - var CPTabViewDidSelectTabViewItemSelector = 1, CPTabViewShouldSelectTabViewItemSelector = 2, CPTabViewWillSelectTabViewItemSelector = 4, CPTabViewDidChangeNumberOfTabViewItemsSelector = 8; -/*! - @ingroup appkit - @class CPTabView +var HEIGHT_OF_SEGMENTED_CONTROL = 24; - This class represents a view that has multiple subviews (CPTabViewItem) presented as individual tabs. - Only one CPTabViewItem is shown at a time, and other CPTabViewItems can be made visible - (one at a time) by clicking on the CPTabViewItem's tab at the top of the tab view. - - THe currently selected CPTabViewItem is the view that is displayed. -*/ -@implementation CPTabView : CPView +@implementation CPTabView2 : CPView { - CPView _labelsView; - CPView _backgroundView; - CPView _separatorView; + CPArray items; - CPView _auxiliaryView; - CPView _contentView; + CPSegmentedControl tabs; + CPBox box; - CPArray _tabViewItems; - CPTabViewItem _selectedTabViewItem; + CPNumber selectedIndex; - CPTabViewType _tabViewType; - - id _delegate; - unsigned _delegateSelectors; -} - -/* - @ignore -*/ -+ (void)initialize -{ - if (self != CPTabView) - return; - - var bundle = [CPBundle bundleForClass:self], - - emptyImage = [[CPImage alloc] initByReferencingFile:@"" size:CGSizeMake(7.0, 0.0)], - backgroundImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBackgroundCenter.png"] size:CGSizeMake(1.0, 1.0)], - - bezelBorderLeftImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBorderLeft.png"] size:CGSizeMake(7.0, 1.0)], - bezerBorderImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBorder.png"] size:CGSizeMake(1.0, 1.0)], - bezelBorderRightImage = [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/CPTabViewBezelBorderRight.png"] size:CGSizeMake(7.0, 1.0)]; - - CPTabViewBezelBorderBackgroundColor = [CPColor colorWithPatternImage:[[CPNinePartImage alloc] initWithImageSlices: - [ - emptyImage, - emptyImage, - emptyImage, - - bezelBorderLeftImage, - backgroundImage, - bezelBorderRightImage, - - bezelBorderLeftImage, - bezerBorderImage, - bezelBorderRightImage - ]]]; - - CPTabViewBezelBorderColor = [CPColor colorWithPatternImage:bezerBorderImage]; -} - -/* - @ignore -*/ -+ (CPColor)bezelBorderColor -{ - return CPTabViewBezelBorderColor; + CPTabViewType type; + + id delegate; + unsigned delegateSelectors; } - (id)initWithFrame:(CGRect)aFrame { - self = [super initWithFrame:aFrame]; - - if (self) - { - _tabViewType = CPTopTabsBezelBorder; - _tabViewItems = []; - } - - return self; -} - -- (void)viewDidMoveToWindow -{ - if (_tabViewType != CPTopTabsBezelBorder || _labelsView) - return; - - [self _createBezelBorder]; - [self layoutSubviews]; -} - -/* @ignore */ -- (void)_createBezelBorder -{ - var bounds = [self bounds]; - - _labelsView = [[_CPTabLabelsView alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(bounds), 0.0)]; - - [_labelsView setTabView:self]; - [_labelsView setAutoresizingMask:CPViewWidthSizable]; - - [self addSubview:_labelsView]; - - _backgroundView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; - - [_backgroundView setBackgroundColor:CPTabViewBezelBorderBackgroundColor]; - - [_backgroundView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - - [self addSubview:_backgroundView]; - - _separatorView = [[CPView alloc] initWithFrame:CGRectMakeZero()]; - - [_separatorView setBackgroundColor:[[self class] bezelBorderColor]]; - [_separatorView setAutoresizingMask:CPViewWidthSizable | CPViewMaxYMargin]; - - [self addSubview:_separatorView]; -} - -/* - Lays out the subviews - @ignore -*/ -- (void)layoutSubviews -{ - if (_tabViewType == CPTopTabsBezelBorder) - { - var backgroundRect = [self bounds], - labelsViewHeight = [_CPTabLabelsView height]; - - backgroundRect.origin.y += labelsViewHeight; - backgroundRect.size.height -= labelsViewHeight; - - [_backgroundView setFrame:backgroundRect]; - - var auxiliaryViewHeight = 5.0; - - if (_auxiliaryView) - { - auxiliaryViewHeight = CGRectGetHeight([_auxiliaryView frame]); - - [_auxiliaryView setFrame:CGRectMake(LEFT_INSET, labelsViewHeight, CGRectGetWidth(backgroundRect) - LEFT_INSET - RIGHT_INSET, auxiliaryViewHeight)]; - } - - [_separatorView setFrame:CGRectMake(LEFT_INSET, labelsViewHeight + auxiliaryViewHeight, CGRectGetWidth(backgroundRect) - LEFT_INSET - RIGHT_INSET, 1.0)]; - } - - // CPNoTabsNoBorder - [_contentView setFrame:[self contentRect]]; + self = [super initWithFrame:aFrame]; + if(self) + { + items = [CPArray array]; + + tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, HEIGHT_OF_SEGMENTED_CONTROL)]; + [tabs setHitTests:NO]; + + box = [[CPBox alloc] initWithFrame:CGRectMake(0, HEIGHT_OF_SEGMENTED_CONTROL/2, CGRectGetWidth(aFrame), + CGRectGetHeight(aFrame)-HEIGHT_OF_SEGMENTED_CONTROL)]; + + selectedIndex = CPNotFound; + + [self setTabViewType:CPTopTabsBezelBorder]; + [self setBackgroundColor:[CPColor colorWithCalibratedWhite:0.95 alpha:1.0]]; + + [self addSubview:box]; + [self addSubview:tabs]; + } + return self; } // Adding and Removing Tabs @@ -229,7 +81,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)addTabViewItem:(CPTabViewItem)aTabViewItem { - [self insertTabViewItem:aTabViewItem atIndex:[_tabViewItems count]]; + [self insertTabViewItem:aTabViewItem atIndex:[items count]]; } /*! @@ -240,20 +92,13 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)insertTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(unsigned)anIndex { - if (!_labelsView) - [self _createBezelBorder]; + [items insertObject:aTabViewItem atIndex:anIndex]; + + [self _updateItems]; + [self _repositionTabs]; - [_tabViewItems insertObject:aTabViewItem atIndex:anIndex]; - - [_labelsView tabView:self didAddTabViewItem:aTabViewItem]; - - [aTabViewItem _setTabView:self]; - - if ([_tabViewItems count] == 1) - [self selectFirstTabViewItem:self]; - - if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) - [_delegate tabViewDidChangeNumberOfTabViewItems:self]; + if (delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) + [delegate tabViewDidChangeNumberOfTabViewItems:self]; } /*! @@ -262,16 +107,19 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)removeTabViewItem:(CPTabViewItem)aTabViewItem { - var index = [self indexOfTabViewItem:aTabViewItem]; + for(var i = 0; i < [items count]; i++) + { + if([items objectAtIndex:i] === aTabViewItem) + { + [items removeObjectAtIndex:i]; + } + } - [_tabViewItems removeObjectIdenticalTo:aTabViewItem]; - - [_labelsView tabView:self didRemoveTabViewItemAtIndex:index]; - - [aTabViewItem _setTabView:nil]; - - if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) - [_delegate tabViewDidChangeNumberOfTabViewItems:self]; + [self _updateItems]; + [self _repositionTabs]; + + if (delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) + [delegate tabViewDidChangeNumberOfTabViewItems:self]; } // Accessing Tabs @@ -281,7 +129,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (int)indexOfTabViewItem:(CPTabViewItem)aTabViewItem { - return [_tabViewItems indexOfObjectIdenticalTo:aTabViewItem]; + return [items indexOfObjectIdenticalTo:aTabViewItem]; } /*! @@ -290,14 +138,11 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier { - var index = 0, - count = [_tabViewItems count]; + for (var index = [items count]; index >= 0; index--) + if ([[items[index] identifier] isEqual:anIdentifier]) + return index; - for (; index < count; ++index) - if ([[_tabViewItems[index] identifier] isEqual:anIdentifier]) - return index; - - return index; + return CPNotFound; } /*! @@ -305,7 +150,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (unsigned)numberOfTabViewItems { - return [_tabViewItems count]; + return [items count]; } /*! @@ -313,7 +158,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (CPTabViewItem)tabViewItemAtIndex:(unsigned)anIndex { - return _tabViewItems[anIndex]; + return [items objectAtIndex:anIndex]; } /*! @@ -321,7 +166,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (CPArray)tabViewItems { - return _tabViewItems; + return [items copy]; // Copy? } // Selecting a Tab @@ -331,10 +176,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)selectFirstTabViewItem:(id)aSender { - var count = [_tabViewItems count]; - - if (count) - [self selectTabViewItemAtIndex:0]; + if([items count] === 0) + return; // throw? + + [self selectTabViewItemAtIndex:0]; } /*! @@ -343,10 +188,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)selectLastTabViewItem:(id)aSender { - var count = [_tabViewItems count]; - - if (count) - [self selectTabViewItemAtIndex:count - 1]; + if([items count] === 0) + return; // throw? + + [self selectTabViewItemAtIndex:[items count]-1]; } /*! @@ -355,13 +200,15 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)selectNextTabViewItem:(id)aSender { - if (!_selectedTabViewItem) - return; - - var index = [self indexOfTabViewItem:_selectedTabViewItem], - count = [_tabViewItems count]; - - [self selectTabViewItemAtIndex:index + 1 % count]; + if(selectedIndex === CPNotFound) + return; + + var nextIndex = selectedIndex + 1; + + if(nextIndex === [items count]) + return; // does nothing. According to spec at (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSTabView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTabView/selectNextTabViewItem:) + + [self selectTabViewItemAtIndex:nextIndex]; } /*! @@ -370,13 +217,15 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)selectPreviousTabViewItem:(id)aSender { - if (!_selectedTabViewItem) - return; + if(selectedIndex === CPNotFound) + return; + + var previousIndex = selectedIndex - 1; - var index = [self indexOfTabViewItem:_selectedTabViewItem], - count = [_tabViewItems count]; - - [self selectTabViewItemAtIndex:index == 0 ? count : index - 1]; + if(previousIndex < 0) + return; // does nothing. See above. + + [self selectTabViewItemAtIndex:previousIndex]; } /*! @@ -385,47 +234,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)selectTabViewItem:(CPTabViewItem)aTabViewItem { - if ((_delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![_delegate tabView:self shouldSelectTabViewItem:aTabViewItem]) - return; - - if (_delegateSelectors & CPTabViewWillSelectTabViewItemSelector) - [_delegate tabView:self willSelectTabViewItem:aTabViewItem]; - - if (_selectedTabViewItem) - { - _selectedTabViewItem._tabState = CPBackgroundTab; - [_labelsView tabView:self didChangeStateOfTabViewItem:_selectedTabViewItem]; - } - _selectedTabViewItem = aTabViewItem; - - _selectedTabViewItem._tabState = CPSelectedTab; - - var _previousContentView = _contentView; - _contentView = [_selectedTabViewItem view]; - - if (_previousContentView !== _contentView) - { - [_previousContentView removeFromSuperview]; - [_contentView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; - [self addSubview:_contentView]; - } - - var _previousAuxiliaryView = _auxiliaryView; - _auxiliaryView = [_selectedTabViewItem auxiliaryView]; - - if (_previousAuxiliaryView !== _auxiliaryView) - { - [_previousAuxiliaryView removeFromSuperview]; - [_auxiliaryView setAutoresizingMask:CPViewWidthSizable]; - [self addSubview:_auxiliaryView]; - } - - [_labelsView tabView:self didChangeStateOfTabViewItem:_selectedTabViewItem]; - - [self layoutSubviews]; - - if (_delegateSelectors & CPTabViewDidSelectTabViewItemSelector) - [_delegate tabView:self didSelectTabViewItem:aTabViewItem]; + [self selectTabViewItemAtIndex:[self indexOfTabViewItem:aTabViewItem]]; } /*! @@ -434,7 +243,20 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)selectTabViewItemAtIndex:(unsigned)anIndex { - [self selectTabViewItem:_tabViewItems[anIndex]]; + if(anIndex === selectedIndex) + return; + + if ((delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![delegate tabView:self shouldSelectTabViewItem:aTabViewItem]) + return; + + if (delegateSelectors & CPTabViewWillSelectTabViewItemSelector) + [delegate tabView:self willSelectTabViewItem:aTabViewItem]; + + [tabs selectSegmentWithTag:anIndex]; + [self _setSelectedIndex:anIndex]; + + if (delegateSelectors & CPTabViewDidSelectTabViewItemSelector) + [delegate tabView:self didSelectTabViewItem:aTabViewItem]; } /*! @@ -442,7 +264,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (CPTabViewItem)selectedTabViewItem { - return _selectedTabViewItem; + return [items objectAtIndex:selectedIndex]; } // @@ -452,22 +274,32 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)setTabViewType:(CPTabViewType)aTabViewType { - if (_tabViewType == aTabViewType) - return; - - _tabViewType = aTabViewType; - - if (_tabViewType == CPNoTabsBezelBorder || _tabViewType == CPNoTabsLineBorder || _tabViewType == CPNoTabsNoBorder) - [_labelsView removeFromSuperview]; - else if (_labelsView && ![_labelsView superview]) - [self addSubview:_labelsView]; - - if (_tabViewType == CPNoTabsLineBorder || _tabViewType == CPNoTabsNoBorder) - [_backgroundView removeFromSuperview]; - else if (_backgroundView && ![_backgroundView superview]) - [self addSubview:_backgroundView]; - - [self layoutSubviews]; + if (type === aTabViewType) + return; + + if ((type === CPTopTabsBezelBorder || type === CPBottomTabsBezelBorder) + && (aTabViewType !== CPTopTabsBezelBorder && aTabViewType !== CPBottomTabsBezelBorder)) + [tabs removeFromSuperview]; + + if ((type === CPNoTabsBezelBorder || type === CPNoTabsLineBorder || type === CPNoTabsNoBorder) + && (aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsNoBorder)) + [self addSubview:tabs]; + + type = aTabViewType; + + switch(type) { + case CPTopTabsBezelBorder: + case CPBottomTabsBezelBorder: + case CPNoTabsBezelBorder: + [box setBorderType:CPBezelBorder]; + break; + case CPNoTabsLineBorder: + [box setBorderType:CPLineBorder]; + break; + case CPNoTabsNoBorder: + [box setBorderType:CPNoBorder]; + break; + } } /*! @@ -475,31 +307,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (CPTabViewType)tabViewType { - return _tabViewType; -} - -// Determining the Size -/*! - Returns the content rectangle. -*/ -- (CGRect)contentRect -{ - var contentRect = CGRectMakeCopy([self bounds]); - - if (_tabViewType == CPTopTabsBezelBorder) - { - var labelsViewHeight = [_CPTabLabelsView height], - auxiliaryViewHeight = _auxiliaryView ? CGRectGetHeight([_auxiliaryView frame]) : 5.0, - separatorViewHeight = 1.0; - - contentRect.origin.y += labelsViewHeight + auxiliaryViewHeight + separatorViewHeight; - contentRect.size.height -= labelsViewHeight + auxiliaryViewHeight + separatorViewHeight * 2.0; // 2 for the bottom border as well. - - contentRect.origin.x += LEFT_INSET; - contentRect.size.width -= LEFT_INSET + RIGHT_INSET; - } - - return contentRect; + return type; } /*! @@ -507,7 +315,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (id)delegate { - return _delegate; + return delegate; } /*! @@ -516,35 +324,73 @@ var CPTabViewDidSelectTabViewItemSelector = 1, */ - (void)setDelegate:(id)aDelegate { - if (_delegate == aDelegate) - return; + if (delegate == aDelegate) + return; - _delegate = aDelegate; + delegate = aDelegate; - _delegateSelectors = 0; + delegateSelectors = 0; - if ([_delegate respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)]) - _delegateSelectors |= CPTabViewShouldSelectTabViewItemSelector; + if ([delegate respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)]) + delegateSelectors |= CPTabViewShouldSelectTabViewItemSelector; - if ([_delegate respondsToSelector:@selector(tabView:willSelectTabViewItem:)]) - _delegateSelectors |= CPTabViewWillSelectTabViewItemSelector; + if ([delegate respondsToSelector:@selector(tabView:willSelectTabViewItem:)]) + delegateSelectors |= CPTabViewWillSelectTabViewItemSelector; - if ([_delegate respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) - _delegateSelectors |= CPTabViewDidSelectTabViewItemSelector; + if ([delegate respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) + delegateSelectors |= CPTabViewDidSelectTabViewItemSelector; - if ([_delegate respondsToSelector:@selector(tabViewDidChangeNumberOfTabViewItems:)]) - _delegateSelectors |= CPTabViewDidChangeNumberOfTabViewItemsSelector; + if ([delegate respondsToSelector:@selector(tabViewDidChangeNumberOfTabViewItems:)]) + delegateSelectors |= CPTabViewDidChangeNumberOfTabViewItemsSelector; } -// +- (void)setBackgroundColor:(CPColor)aColor +{ + [box setBackgroundColor:aColor]; +} - (void)mouseDown:(CPEvent)anEvent { - var location = [_labelsView convertPoint:[anEvent locationInWindow] fromView:nil], - tabViewItem = [_labelsView representedTabViewItemAtPoint:location]; + var segmentIndex = [tabs testSegment:[tabs convertPoint:[anEvent locationInWindow] fromView:nil]]; + + if(segmentIndex != CPNotFound) { + [self selectTabViewItemAtIndex:segmentIndex]; + [tabs trackSegment:anEvent]; + } +} - if (tabViewItem) - [self selectTabViewItem:tabViewItem]; +- (void)_repositionTabs +{ + var horizontalCenterOfSelf = CGRectGetWidth([self bounds])/2; + var verticalCenterOfTabs = CGRectGetHeight([tabs bounds])/2; + + if(type === CPBottomTabsBezelBorder) + [tabs setCenter:CGPointMake(horizontalCenterOfSelf, CGRectGetHeight([self bounds]) - verticalCenterOfTabs)]; + else + [tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)]; +} + +- (void)_setSelectedIndex:(CPNumber)index +{ + selectedIndex = index; + + [box setContentView:[[items objectAtIndex:selectedIndex] view]]; +} + +- (void)_updateItems +{ + [tabs setSegmentCount:[items count]]; + + for(var i = 0; i < [items count]; i++) + { + [tabs setLabel:[[items objectAtIndex:i] label] forSegment:i]; + [tabs setTag:i forSegment:i]; + } + + if(selectedIndex === CPNotFound) + { + [self selectFirstTabViewItem:self]; + } } @end @@ -560,15 +406,12 @@ var CPTabViewItemsKey = "CPTabViewItemsKey", { if (self = [super initWithCoder:aCoder]) { - _tabViewType = [aCoder decodeIntForKey:CPTabViewTypeKey]; - _tabViewItems = []; + type = [aCoder decodeIntForKey:CPTabViewTypeKey]; + items = []; - // FIXME: this is somewhat hacky - [self _createBezelBorder]; - - var items = [aCoder decodeObjectForKey:CPTabViewItemsKey]; - for (var i = 0; items && i < items.length; i++) - [self insertTabViewItem:items[i] atIndex:i]; + var encodedItems = [aCoder decodeObjectForKey:CPTabViewItemsKey]; + for (var i = 0; encodedItems && i < encodedItems.length; i++) + [self insertTabViewItem:encodedItems[i] atIndex:i]; var selected = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey]; if (selected) @@ -582,227 +425,14 @@ var CPTabViewItemsKey = "CPTabViewItemsKey", - (void)encodeWithCoder:(CPCoder)aCoder { - var actualSubviews = _subviews; - _subviews = []; - [super encodeWithCoder:aCoder]; - _subviews = actualSubviews; + [super encodeWithCoder:aCoder]; + + [aCoder encodeObject:items forKey:CPTabViewItemsKey];; + [aCoder encodeObject:[self selectedTabViewItem] forKey:CPTabViewSelectedItemKey]; - [aCoder encodeObject:_tabViewItems forKey:CPTabViewItemsKey];; - [aCoder encodeObject:_selectedTabViewItem forKey:CPTabViewSelectedItemKey]; + [aCoder encodeInt:type forKey:CPTabViewTypeKey]; - [aCoder encodeInt:_tabViewType forKey:CPTabViewTypeKey]; - - [aCoder encodeConditionalObject:_delegate forKey:CPTabViewDelegateKey]; -} - -@end - - -var _CPTabLabelsViewBackgroundColor = nil, - _CPTabLabelsViewInsideMargin = 10.0, - _CPTabLabelsViewOutsideMargin = 15.0; - -/* @ignore */ -@implementation _CPTabLabelsView : CPView -{ - CPTabView _tabView; - CPDictionary _tabLabels; -} - -+ (void)initialize -{ - if (self != [_CPTabLabelsView class]) - return; - - var bundle = [CPBundle bundleForClass:self]; - - _CPTabLabelsViewBackgroundColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelsViewLeft.png"] size:CGSizeMake(12.0, 26.0)], - [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelsViewCenter.png"] size:CGSizeMake(1.0, 26.0)], - [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelsViewRight.png"] size:CGSizeMake(12.0, 26.0)] - ] isVertical:NO]]; -} - -+ (float)height -{ - return 26.0; -} - -- (id)initWithFrame:(CGRect)aFrame -{ - self = [super initWithFrame:aFrame]; - - if (self) - { - _tabLabels = []; - - [self setBackgroundColor:_CPTabLabelsViewBackgroundColor]; - - [self setFrameSize:CGSizeMake(CGRectGetWidth(aFrame), 26.0)]; - } - - return self; -} - -- (void)setTabView:(CPTabView)aTabView -{ - _tabView = aTabView; -} - -- (CPTabView)tabView -{ - return _tabView; -} - -- (void)tabView:(CPTabView)aTabView didAddTabViewItem:(CPTabViewItem)aTabViewItem -{ - var label = [[_CPTabLabel alloc] initWithFrame:CGRectMakeZero()]; - - [label setTabViewItem:aTabViewItem]; - - _tabLabels.push(label); - - [self addSubview:label]; - - [self layoutSubviews]; -} - -- (void)tabView:(CPTabView)aTabView didRemoveTabViewItemAtIndex:(unsigned)index -{ - var label = _tabLabels[index]; - - [_tabLabels removeObjectAtIndex:index]; - - [label removeFromSuperview]; - - [self layoutSubviews]; -} - - -(void)tabView:(CPTabView)aTabView didChangeStateOfTabViewItem:(CPTabViewItem)aTabViewItem - { - [_tabLabels[[aTabView indexOfTabViewItem:aTabViewItem]] setTabState:[aTabViewItem tabState]]; - } - -- (CPTabViewItem)representedTabViewItemAtPoint:(CGPoint)aPoint -{ - var index = 0, - count = _tabLabels.length; - - for (; index < count; ++index) - { - var label = _tabLabels[index]; - - if (CGRectContainsPoint([label frame], aPoint)) - return [label tabViewItem]; - } - - return nil; -} - -- (void)layoutSubviews -{ - var index = 0, - count = _tabLabels.length, - width = (_CGRectGetWidth([self bounds]) - (count - 1) * _CPTabLabelsViewInsideMargin - 2 * _CPTabLabelsViewOutsideMargin) / count, - x = _CPTabLabelsViewOutsideMargin; - - for (; index < count; ++index) - { - var label = _tabLabels[index], - frame = _CGRectMake(x, 8.0, width, 18.0); - - [label setFrame:frame]; - - x = _CGRectGetMaxX(frame) + _CPTabLabelsViewInsideMargin; - } -} - -- (void)setFrameSize:(CGSize)aSize -{ - if (CGSizeEqualToSize([self frame].size, aSize)) - return; - - [super setFrameSize:aSize]; - - [self layoutSubviews]; -} - -@end - -var _CPTabLabelBackgroundColor = nil, - _CPTabLabelSelectedBackgroundColor = nil; - -/* @ignore */ -@implementation _CPTabLabel : CPView -{ - CPTabViewItem _tabViewItem; - CPTextField _labelField; -} - -+ (void)initialize -{ - if (self != [_CPTabLabel class]) - return; - - var bundle = [CPBundle bundleForClass:self]; - - _CPTabLabelBackgroundColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelBackgroundLeft.png"] size:CGSizeMake(6.0, 18.0)], - [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelBackgroundCenter.png"] size:CGSizeMake(1.0, 18.0)], - [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelBackgroundRight.png"] size:CGSizeMake(6.0, 18.0)] - ] isVertical:NO]]; - - _CPTabLabelSelectedBackgroundColor = [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices: - [ - [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelSelectedLeft.png"] size:CGSizeMake(3.0, 18.0)], - [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelSelectedCenter.png"] size:CGSizeMake(1.0, 18.0)], - [[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"CPTabView/_CPTabLabelSelectedRight.png"] size:CGSizeMake(3.0, 18.0)] - ] isVertical:NO]]; -} - -- (id)initWithFrame:(CGRect)aFrame -{ - self = [super initWithFrame:aFrame]; - - if (self) - { - _labelField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; - - [_labelField setAlignment:CPCenterTextAlignment]; - [_labelField setFrame:CGRectMake(5.0, 0.0, CGRectGetWidth(aFrame) - 10.0, 20.0)]; - [_labelField setAutoresizingMask:CPViewWidthSizable]; - [_labelField setFont:[CPFont boldSystemFontOfSize:11.0]]; - - [self addSubview:_labelField]; - - [self setTabState:CPBackgroundTab]; - } - - return self; -} - -- (void)setTabState:(CPTabState)aTabState -{ - [self setBackgroundColor:aTabState == CPSelectedTab ? _CPTabLabelSelectedBackgroundColor : _CPTabLabelBackgroundColor]; -} - -- (void)setTabViewItem:(CPTabViewItem)aTabViewItem -{ - _tabViewItem = aTabViewItem; - - [self update]; -} - -- (CPTabViewItem)tabViewItem -{ - return _tabViewItem; -} - -- (void)update -{ - [_labelField setStringValue:[_tabViewItem label]]; + [aCoder encodeConditionalObject:delegate forKey:CPTabViewDelegateKey]; } @end diff --git a/AppKit/CPTabView2.j b/AppKit/CPTabView2.j deleted file mode 100644 index 0b3238095..000000000 --- a/AppKit/CPTabView2.j +++ /dev/null @@ -1,438 +0,0 @@ -@import - -/* - Places tabs on top with a bezeled border. - @global - @group CPTabViewType -*/ -CPTopTabsBezelBorder = 0; -//CPLeftTabsBezelBorder = 1; -CPBottomTabsBezelBorder = 2; -//CPRightTabsBezelBorder = 3; -/* - Displays no tabs and has a bezeled border. - @global - @group CPTabViewType -*/ -CPNoTabsBezelBorder = 4; -/* - Has no tabs and displays a line border. - @global - @group CPTabViewType -*/ -CPNoTabsLineBorder = 5; -/* - Displays no tabs and no border. - @global - @group CPTabViewType -*/ -CPNoTabsNoBorder = 6; - -var CPTabViewDidSelectTabViewItemSelector = 1, - CPTabViewShouldSelectTabViewItemSelector = 2, - CPTabViewWillSelectTabViewItemSelector = 4, - CPTabViewDidChangeNumberOfTabViewItemsSelector = 8; - -var HEIGHT_OF_SEGMENTED_CONTROL = 24; - -@implementation CPTabView2 : CPView -{ - CPArray items; - - CPSegmentedControl tabs; - CPBox box; - - CPNumber selectedIndex; - - CPTabViewType type; - - id delegate; - unsigned delegateSelectors; -} - -- (id)initWithFrame:(CGRect)aFrame -{ - self = [super initWithFrame:aFrame]; - if(self) - { - items = [CPArray array]; - - tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, HEIGHT_OF_SEGMENTED_CONTROL)]; - [tabs setHitTests:NO]; - - box = [[CPBox alloc] initWithFrame:CGRectMake(0, HEIGHT_OF_SEGMENTED_CONTROL/2, CGRectGetWidth(aFrame), - CGRectGetHeight(aFrame)-HEIGHT_OF_SEGMENTED_CONTROL)]; - - selectedIndex = CPNotFound; - - [self setTabViewType:CPTopTabsBezelBorder]; - [self setBackgroundColor:[CPColor colorWithCalibratedWhite:0.95 alpha:1.0]]; - - [self addSubview:box]; - [self addSubview:tabs]; - } - return self; -} - -// Adding and Removing Tabs -/*! - Adds a CPTabViewItem to the tab view. - @param aTabViewItem the item to add -*/ -- (void)addTabViewItem:(CPTabViewItem)aTabViewItem -{ - [self insertTabViewItem:aTabViewItem atIndex:[items count]]; -} - -/*! - Inserts a CPTabViewItem into the tab view - at the specified index. - @param aTabViewItem the item to insert - @param anIndex the index for the item -*/ -- (void)insertTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(unsigned)anIndex -{ - [items insertObject:aTabViewItem atIndex:anIndex]; - - [self _updateItems]; - [self _repositionTabs]; - - if (delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) - [delegate tabViewDidChangeNumberOfTabViewItems:self]; -} - -/*! - Removes the specified tab view item from the tab view. - @param aTabViewItem the item to remove -*/ -- (void)removeTabViewItem:(CPTabViewItem)aTabViewItem -{ - for(var i = 0; i < [items count]; i++) - { - if([items objectAtIndex:i] === aTabViewItem) - { - [items removeObjectAtIndex:i]; - } - } - - [self _updateItems]; - [self _repositionTabs]; - - if (delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) - [delegate tabViewDidChangeNumberOfTabViewItems:self]; -} - -// Accessing Tabs -/*! - Returns the index of the specified item - @param aTabViewItem the item to find the index for -*/ -- (int)indexOfTabViewItem:(CPTabViewItem)aTabViewItem -{ - return [items indexOfObjectIdenticalTo:aTabViewItem]; -} - -/*! - Returns the index of the CPTabViewItem with the specified identifier. - @param anIdentifier the identifier of the item -*/ -- (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier -{ - for (var index = [items count]; index >= 0; index--) - if ([[items[index] identifier] isEqual:anIdentifier]) - return index; - - return CPNotFound; -} - -/*! - Returns the number of items in the tab view. -*/ -- (unsigned)numberOfTabViewItems -{ - return [items count]; -} - -/*! - Returns the CPTabViewItem at the specified index. -*/ -- (CPTabViewItem)tabViewItemAtIndex:(unsigned)anIndex -{ - return [items objectAtIndex:anIndex]; -} - -/*! - Returns the array of items that backs this tab view. -*/ -- (CPArray)tabViewItems -{ - return [items copy]; // Copy? -} - -// Selecting a Tab -/*! - Sets the first tab view item in the array to be displayed to the user. - @param aSender the object making this request -*/ -- (void)selectFirstTabViewItem:(id)aSender -{ - if([items count] === 0) - return; // throw? - - [self selectTabViewItemAtIndex:0]; -} - -/*! - Sets the last tab view item in the array to be displayed to the user. - @param aSender the object making this request -*/ -- (void)selectLastTabViewItem:(id)aSender -{ - if([items count] === 0) - return; // throw? - - [self selectTabViewItemAtIndex:[items count]-1]; -} - -/*! - Sets the next tab item in the array to be displayed. - @param aSender the object making this request -*/ -- (void)selectNextTabViewItem:(id)aSender -{ - if(selectedIndex === CPNotFound) - return; - - var nextIndex = selectedIndex + 1; - - if(nextIndex === [items count]) - return; // does nothing. According to spec at (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSTabView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTabView/selectNextTabViewItem:) - - [self selectTabViewItemAtIndex:nextIndex]; -} - -/*! - Selects the previous item in the array for display. - @param aSender the object making this request -*/ -- (void)selectPreviousTabViewItem:(id)aSender -{ - if(selectedIndex === CPNotFound) - return; - - var previousIndex = selectedIndex - 1; - - if(previousIndex < 0) - return; // does nothing. See above. - - [self selectTabViewItemAtIndex:previousIndex]; -} - -/*! - Displays the specified item in the tab view. - @param aTabViewItem the item to display -*/ -- (void)selectTabViewItem:(CPTabViewItem)aTabViewItem -{ - [self selectTabViewItemAtIndex:[self indexOfTabViewItem:aTabViewItem]]; -} - -/*! - Selects the item at the specified index. - @param anIndex the index of the item to display. -*/ -- (void)selectTabViewItemAtIndex:(unsigned)anIndex -{ - if(anIndex === selectedIndex) - return; - - if ((delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![delegate tabView:self shouldSelectTabViewItem:aTabViewItem]) - return; - - if (delegateSelectors & CPTabViewWillSelectTabViewItemSelector) - [delegate tabView:self willSelectTabViewItem:aTabViewItem]; - - [tabs selectSegmentWithTag:anIndex]; - [self _setSelectedIndex:anIndex]; - - if (delegateSelectors & CPTabViewDidSelectTabViewItemSelector) - [delegate tabView:self didSelectTabViewItem:aTabViewItem]; -} - -/*! - Returns the current item being displayed. -*/ -- (CPTabViewItem)selectedTabViewItem -{ - return [items objectAtIndex:selectedIndex]; -} - -// -/*! - Sets the tab view type. - @param aTabViewType the view type -*/ -- (void)setTabViewType:(CPTabViewType)aTabViewType -{ - if (type === aTabViewType) - return; - - if ((type === CPTopTabsBezelBorder || type === CPBottomTabsBezelBorder) - && (aTabViewType !== CPTopTabsBezelBorder && aTabViewType !== CPBottomTabsBezelBorder)) - [tabs removeFromSuperview]; - - if ((type === CPNoTabsBezelBorder || type === CPNoTabsLineBorder || type === CPNoTabsNoBorder) - && (aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsNoBorder)) - [self addSubview:tabs]; - - type = aTabViewType; - - switch(type) { - case CPTopTabsBezelBorder: - case CPBottomTabsBezelBorder: - case CPNoTabsBezelBorder: - [box setBorderType:CPBezelBorder]; - break; - case CPNoTabsLineBorder: - [box setBorderType:CPLineBorder]; - break; - case CPNoTabsNoBorder: - [box setBorderType:CPNoBorder]; - break; - } -} - -/*! - Returns the tab view type. -*/ -- (CPTabViewType)tabViewType -{ - return type; -} - -/*! - Returns the receiver's delegate. -*/ -- (id)delegate -{ - return delegate; -} - -/*! - Sets the delegate for this tab view. - @param aDelegate the tab view's delegate -*/ -- (void)setDelegate:(id)aDelegate -{ - if (delegate == aDelegate) - return; - - delegate = aDelegate; - - delegateSelectors = 0; - - if ([delegate respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)]) - delegateSelectors |= CPTabViewShouldSelectTabViewItemSelector; - - if ([delegate respondsToSelector:@selector(tabView:willSelectTabViewItem:)]) - delegateSelectors |= CPTabViewWillSelectTabViewItemSelector; - - if ([delegate respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) - delegateSelectors |= CPTabViewDidSelectTabViewItemSelector; - - if ([delegate respondsToSelector:@selector(tabViewDidChangeNumberOfTabViewItems:)]) - delegateSelectors |= CPTabViewDidChangeNumberOfTabViewItemsSelector; -} - -- (void)setBackgroundColor:(CPColor)aColor -{ - [box setBackgroundColor:aColor]; -} - -- (void)mouseDown:(CPEvent)anEvent -{ - var segmentIndex = [tabs testSegment:[tabs convertPoint:[anEvent locationInWindow] fromView:nil]]; - - if(segmentIndex != CPNotFound) { - [self selectTabViewItemAtIndex:segmentIndex]; - [tabs trackSegment:anEvent]; - } -} - -- (void)_repositionTabs -{ - var horizontalCenterOfSelf = CGRectGetWidth([self bounds])/2; - var verticalCenterOfTabs = CGRectGetHeight([tabs bounds])/2; - - if(type === CPBottomTabsBezelBorder) - [tabs setCenter:CGPointMake(horizontalCenterOfSelf, CGRectGetHeight([self bounds]) - verticalCenterOfTabs)]; - else - [tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)]; -} - -- (void)_setSelectedIndex:(CPNumber)index -{ - selectedIndex = index; - - [box setContentView:[[items objectAtIndex:selectedIndex] view]]; -} - -- (void)_updateItems -{ - [tabs setSegmentCount:[items count]]; - - for(var i = 0; i < [items count]; i++) - { - [tabs setLabel:[[items objectAtIndex:i] label] forSegment:i]; - [tabs setTag:i forSegment:i]; - } - - if(selectedIndex === CPNotFound) - { - [self selectFirstTabViewItem:self]; - } -} - -@end - -var CPTabViewItemsKey = "CPTabViewItemsKey", - CPTabViewSelectedItemKey = "CPTabViewSelectedItemKey", - CPTabViewTypeKey = "CPTabViewTypeKey", - CPTabViewDelegateKey = "CPTabViewDelegateKey"; - -@implementation CPTabView (CPCoding) - -- (id)initWithCoder:(CPCoder)aCoder -{ - if (self = [super initWithCoder:aCoder]) - { - type = [aCoder decodeIntForKey:CPTabViewTypeKey]; - items = []; - - var encodedItems = [aCoder decodeObjectForKey:CPTabViewItemsKey]; - for (var i = 0; encodedItems && i < encodedItems.length; i++) - [self insertTabViewItem:encodedItems[i] atIndex:i]; - - var selected = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey]; - if (selected) - [self selectTabViewItem:selected]; - - [self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]]; - } - - return self; -} - -- (void)encodeWithCoder:(CPCoder)aCoder -{ - [super encodeWithCoder:aCoder]; - - [aCoder encodeObject:items forKey:CPTabViewItemsKey];; - [aCoder encodeObject:[self selectedTabViewItem] forKey:CPTabViewSelectedItemKey]; - - [aCoder encodeInt:type forKey:CPTabViewTypeKey]; - - [aCoder encodeConditionalObject:delegate forKey:CPTabViewDelegateKey]; -} - -@end From 9b57d041818c405ae41f3c9ad08fef391dbef816 Mon Sep 17 00:00:00 2001 From: Derek Hammer Date: Sun, 19 Sep 2010 15:46:04 -0500 Subject: [PATCH 05/10] Tabs to spaces --- AppKit/CPTabView.j | 248 ++++++++++++++++++++++----------------------- 1 file changed, 124 insertions(+), 124 deletions(-) diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 0b3238095..2bb24438c 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -37,41 +37,41 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; @implementation CPTabView2 : CPView { - CPArray items; + CPArray items; - CPSegmentedControl tabs; - CPBox box; + CPSegmentedControl tabs; + CPBox box; - CPNumber selectedIndex; + CPNumber selectedIndex; - CPTabViewType type; - - id delegate; - unsigned delegateSelectors; + CPTabViewType type; + + id delegate; + unsigned delegateSelectors; } - (id)initWithFrame:(CGRect)aFrame { - self = [super initWithFrame:aFrame]; - if(self) - { - items = [CPArray array]; + self = [super initWithFrame:aFrame]; + if(self) + { + items = [CPArray array]; - tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, HEIGHT_OF_SEGMENTED_CONTROL)]; - [tabs setHitTests:NO]; + tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, HEIGHT_OF_SEGMENTED_CONTROL)]; + [tabs setHitTests:NO]; - box = [[CPBox alloc] initWithFrame:CGRectMake(0, HEIGHT_OF_SEGMENTED_CONTROL/2, CGRectGetWidth(aFrame), - CGRectGetHeight(aFrame)-HEIGHT_OF_SEGMENTED_CONTROL)]; + box = [[CPBox alloc] initWithFrame:CGRectMake(0, HEIGHT_OF_SEGMENTED_CONTROL/2, CGRectGetWidth(aFrame), + CGRectGetHeight(aFrame)-HEIGHT_OF_SEGMENTED_CONTROL)]; - selectedIndex = CPNotFound; + selectedIndex = CPNotFound; - [self setTabViewType:CPTopTabsBezelBorder]; - [self setBackgroundColor:[CPColor colorWithCalibratedWhite:0.95 alpha:1.0]]; + [self setTabViewType:CPTopTabsBezelBorder]; + [self setBackgroundColor:[CPColor colorWithCalibratedWhite:0.95 alpha:1.0]]; - [self addSubview:box]; - [self addSubview:tabs]; - } - return self; + [self addSubview:box]; + [self addSubview:tabs]; + } + return self; } // Adding and Removing Tabs @@ -81,7 +81,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)addTabViewItem:(CPTabViewItem)aTabViewItem { - [self insertTabViewItem:aTabViewItem atIndex:[items count]]; + [self insertTabViewItem:aTabViewItem atIndex:[items count]]; } /*! @@ -92,8 +92,8 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)insertTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(unsigned)anIndex { - [items insertObject:aTabViewItem atIndex:anIndex]; - + [items insertObject:aTabViewItem atIndex:anIndex]; + [self _updateItems]; [self _repositionTabs]; @@ -107,17 +107,17 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)removeTabViewItem:(CPTabViewItem)aTabViewItem { - for(var i = 0; i < [items count]; i++) - { - if([items objectAtIndex:i] === aTabViewItem) - { - [items removeObjectAtIndex:i]; - } - } + for(var i = 0; i < [items count]; i++) + { + if([items objectAtIndex:i] === aTabViewItem) + { + [items removeObjectAtIndex:i]; + } + } - [self _updateItems]; - [self _repositionTabs]; - + [self _updateItems]; + [self _repositionTabs]; + if (delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector) [delegate tabViewDidChangeNumberOfTabViewItems:self]; } @@ -129,7 +129,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (int)indexOfTabViewItem:(CPTabViewItem)aTabViewItem { - return [items indexOfObjectIdenticalTo:aTabViewItem]; + return [items indexOfObjectIdenticalTo:aTabViewItem]; } /*! @@ -138,11 +138,11 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier { - for (var index = [items count]; index >= 0; index--) - if ([[items[index] identifier] isEqual:anIdentifier]) - return index; + for (var index = [items count]; index >= 0; index--) + if ([[items[index] identifier] isEqual:anIdentifier]) + return index; - return CPNotFound; + return CPNotFound; } /*! @@ -150,7 +150,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (unsigned)numberOfTabViewItems { - return [items count]; + return [items count]; } /*! @@ -158,7 +158,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (CPTabViewItem)tabViewItemAtIndex:(unsigned)anIndex { - return [items objectAtIndex:anIndex]; + return [items objectAtIndex:anIndex]; } /*! @@ -166,7 +166,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (CPArray)tabViewItems { - return [items copy]; // Copy? + return [items copy]; // Copy? } // Selecting a Tab @@ -188,10 +188,10 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectLastTabViewItem:(id)aSender { - if([items count] === 0) - return; // throw? + if([items count] === 0) + return; // throw? - [self selectTabViewItemAtIndex:[items count]-1]; + [self selectTabViewItemAtIndex:[items count]-1]; } /*! @@ -200,15 +200,15 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectNextTabViewItem:(id)aSender { - if(selectedIndex === CPNotFound) - return; + if(selectedIndex === CPNotFound) + return; - var nextIndex = selectedIndex + 1; + var nextIndex = selectedIndex + 1; - if(nextIndex === [items count]) - return; // does nothing. According to spec at (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSTabView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTabView/selectNextTabViewItem:) + if(nextIndex === [items count]) + return; // does nothing. According to spec at (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSTabView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTabView/selectNextTabViewItem:) - [self selectTabViewItemAtIndex:nextIndex]; + [self selectTabViewItemAtIndex:nextIndex]; } /*! @@ -217,15 +217,15 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectPreviousTabViewItem:(id)aSender { - if(selectedIndex === CPNotFound) - return; + if(selectedIndex === CPNotFound) + return; - var previousIndex = selectedIndex - 1; + var previousIndex = selectedIndex - 1; - if(previousIndex < 0) - return; // does nothing. See above. + if(previousIndex < 0) + return; // does nothing. See above. - [self selectTabViewItemAtIndex:previousIndex]; + [self selectTabViewItemAtIndex:previousIndex]; } /*! @@ -234,7 +234,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectTabViewItem:(CPTabViewItem)aTabViewItem { - [self selectTabViewItemAtIndex:[self indexOfTabViewItem:aTabViewItem]]; + [self selectTabViewItemAtIndex:[self indexOfTabViewItem:aTabViewItem]]; } /*! @@ -243,18 +243,18 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectTabViewItemAtIndex:(unsigned)anIndex { - if(anIndex === selectedIndex) - return; - - if ((delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![delegate tabView:self shouldSelectTabViewItem:aTabViewItem]) - return; - - if (delegateSelectors & CPTabViewWillSelectTabViewItemSelector) - [delegate tabView:self willSelectTabViewItem:aTabViewItem]; + if(anIndex === selectedIndex) + return; + + if ((delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![delegate tabView:self shouldSelectTabViewItem:aTabViewItem]) + return; + + if (delegateSelectors & CPTabViewWillSelectTabViewItemSelector) + [delegate tabView:self willSelectTabViewItem:aTabViewItem]; + + [tabs selectSegmentWithTag:anIndex]; + [self _setSelectedIndex:anIndex]; - [tabs selectSegmentWithTag:anIndex]; - [self _setSelectedIndex:anIndex]; - if (delegateSelectors & CPTabViewDidSelectTabViewItemSelector) [delegate tabView:self didSelectTabViewItem:aTabViewItem]; } @@ -264,7 +264,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (CPTabViewItem)selectedTabViewItem { - return [items objectAtIndex:selectedIndex]; + return [items objectAtIndex:selectedIndex]; } // @@ -274,32 +274,32 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)setTabViewType:(CPTabViewType)aTabViewType { - if (type === aTabViewType) - return; - - if ((type === CPTopTabsBezelBorder || type === CPBottomTabsBezelBorder) - && (aTabViewType !== CPTopTabsBezelBorder && aTabViewType !== CPBottomTabsBezelBorder)) - [tabs removeFromSuperview]; - - if ((type === CPNoTabsBezelBorder || type === CPNoTabsLineBorder || type === CPNoTabsNoBorder) - && (aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsNoBorder)) - [self addSubview:tabs]; - - type = aTabViewType; - - switch(type) { - case CPTopTabsBezelBorder: - case CPBottomTabsBezelBorder: - case CPNoTabsBezelBorder: - [box setBorderType:CPBezelBorder]; - break; - case CPNoTabsLineBorder: - [box setBorderType:CPLineBorder]; - break; - case CPNoTabsNoBorder: - [box setBorderType:CPNoBorder]; - break; - } + if (type === aTabViewType) + return; + + if ((type === CPTopTabsBezelBorder || type === CPBottomTabsBezelBorder) + && (aTabViewType !== CPTopTabsBezelBorder && aTabViewType !== CPBottomTabsBezelBorder)) + [tabs removeFromSuperview]; + + if ((type === CPNoTabsBezelBorder || type === CPNoTabsLineBorder || type === CPNoTabsNoBorder) + && (aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsBezelBorder && aTabViewType !== CPNoTabsNoBorder)) + [self addSubview:tabs]; + + type = aTabViewType; + + switch(type) { + case CPTopTabsBezelBorder: + case CPBottomTabsBezelBorder: + case CPNoTabsBezelBorder: + [box setBorderType:CPBezelBorder]; + break; + case CPNoTabsLineBorder: + [box setBorderType:CPLineBorder]; + break; + case CPNoTabsNoBorder: + [box setBorderType:CPNoBorder]; + break; + } } /*! @@ -307,7 +307,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (CPTabViewType)tabViewType { - return type; + return type; } /*! @@ -315,7 +315,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (id)delegate { - return delegate; + return delegate; } /*! @@ -324,39 +324,39 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)setDelegate:(id)aDelegate { - if (delegate == aDelegate) - return; + if (delegate == aDelegate) + return; - delegate = aDelegate; + delegate = aDelegate; - delegateSelectors = 0; + delegateSelectors = 0; - if ([delegate respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)]) - delegateSelectors |= CPTabViewShouldSelectTabViewItemSelector; + if ([delegate respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)]) + delegateSelectors |= CPTabViewShouldSelectTabViewItemSelector; - if ([delegate respondsToSelector:@selector(tabView:willSelectTabViewItem:)]) - delegateSelectors |= CPTabViewWillSelectTabViewItemSelector; + if ([delegate respondsToSelector:@selector(tabView:willSelectTabViewItem:)]) + delegateSelectors |= CPTabViewWillSelectTabViewItemSelector; - if ([delegate respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) - delegateSelectors |= CPTabViewDidSelectTabViewItemSelector; + if ([delegate respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) + delegateSelectors |= CPTabViewDidSelectTabViewItemSelector; - if ([delegate respondsToSelector:@selector(tabViewDidChangeNumberOfTabViewItems:)]) - delegateSelectors |= CPTabViewDidChangeNumberOfTabViewItemsSelector; + if ([delegate respondsToSelector:@selector(tabViewDidChangeNumberOfTabViewItems:)]) + delegateSelectors |= CPTabViewDidChangeNumberOfTabViewItemsSelector; } - (void)setBackgroundColor:(CPColor)aColor { - [box setBackgroundColor:aColor]; + [box setBackgroundColor:aColor]; } - (void)mouseDown:(CPEvent)anEvent { - var segmentIndex = [tabs testSegment:[tabs convertPoint:[anEvent locationInWindow] fromView:nil]]; - - if(segmentIndex != CPNotFound) { - [self selectTabViewItemAtIndex:segmentIndex]; - [tabs trackSegment:anEvent]; - } + var segmentIndex = [tabs testSegment:[tabs convertPoint:[anEvent locationInWindow] fromView:nil]]; + + if(segmentIndex != CPNotFound) { + [self selectTabViewItemAtIndex:segmentIndex]; + [tabs trackSegment:anEvent]; + } } - (void)_repositionTabs @@ -364,10 +364,10 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; var horizontalCenterOfSelf = CGRectGetWidth([self bounds])/2; var verticalCenterOfTabs = CGRectGetHeight([tabs bounds])/2; - if(type === CPBottomTabsBezelBorder) - [tabs setCenter:CGPointMake(horizontalCenterOfSelf, CGRectGetHeight([self bounds]) - verticalCenterOfTabs)]; - else - [tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)]; + if(type === CPBottomTabsBezelBorder) + [tabs setCenter:CGPointMake(horizontalCenterOfSelf, CGRectGetHeight([self bounds]) - verticalCenterOfTabs)]; + else + [tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)]; } - (void)_setSelectedIndex:(CPNumber)index @@ -425,7 +425,7 @@ var CPTabViewItemsKey = "CPTabViewItemsKey", - (void)encodeWithCoder:(CPCoder)aCoder { - [super encodeWithCoder:aCoder]; + [super encodeWithCoder:aCoder]; [aCoder encodeObject:items forKey:CPTabViewItemsKey];; [aCoder encodeObject:[self selectedTabViewItem] forKey:CPTabViewSelectedItemKey]; From dd89a98242ddd2d2c563a44a66e07326e68b27d6 Mon Sep 17 00:00:00 2001 From: Derek Hammer Date: Sun, 19 Sep 2010 16:12:58 -0500 Subject: [PATCH 06/10] Renaming class to CPTabView from CPTabView2. Also doing a little clean up for style. --- AppKit/CPTabView.j | 45 +++++++++++++------------ Tests/Manual/CPTabView2/AppController.j | 2 +- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 2bb24438c..82d4f3cd4 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -35,7 +35,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1, var HEIGHT_OF_SEGMENTED_CONTROL = 24; -@implementation CPTabView2 : CPView +@implementation CPTabView : CPView { CPArray items; @@ -53,15 +53,15 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame]; - if(self) + if (self) { items = [CPArray array]; tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, HEIGHT_OF_SEGMENTED_CONTROL)]; [tabs setHitTests:NO]; - box = [[CPBox alloc] initWithFrame:CGRectMake(0, HEIGHT_OF_SEGMENTED_CONTROL/2, CGRectGetWidth(aFrame), - CGRectGetHeight(aFrame)-HEIGHT_OF_SEGMENTED_CONTROL)]; + box = [[CPBox alloc] initWithFrame:CGRectMake(0, HEIGHT_OF_SEGMENTED_CONTROL / 2, CGRectGetWidth(aFrame), + CGRectGetHeight(aFrame) - HEIGHT_OF_SEGMENTED_CONTROL)]; selectedIndex = CPNotFound; @@ -107,13 +107,13 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)removeTabViewItem:(CPTabViewItem)aTabViewItem { - for(var i = 0; i < [items count]; i++) + for (var i = 0; i < [items count]; i++) { - if([items objectAtIndex:i] === aTabViewItem) + if ([items objectAtIndex:i] === aTabViewItem) { [items removeObjectAtIndex:i]; } - } + } [self _updateItems]; [self _repositionTabs]; @@ -176,7 +176,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectFirstTabViewItem:(id)aSender { - if([items count] === 0) + if ([items count] === 0) return; // throw? [self selectTabViewItemAtIndex:0]; @@ -188,10 +188,10 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectLastTabViewItem:(id)aSender { - if([items count] === 0) + if ([items count] === 0) return; // throw? - [self selectTabViewItemAtIndex:[items count]-1]; + [self selectTabViewItemAtIndex:[items count] - 1]; } /*! @@ -200,12 +200,12 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectNextTabViewItem:(id)aSender { - if(selectedIndex === CPNotFound) + if (selectedIndex === CPNotFound) return; var nextIndex = selectedIndex + 1; - if(nextIndex === [items count]) + if (nextIndex === [items count]) return; // does nothing. According to spec at (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSTabView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTabView/selectNextTabViewItem:) [self selectTabViewItemAtIndex:nextIndex]; @@ -217,12 +217,12 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectPreviousTabViewItem:(id)aSender { - if(selectedIndex === CPNotFound) + if (selectedIndex === CPNotFound) return; var previousIndex = selectedIndex - 1; - if(previousIndex < 0) + if (previousIndex < 0) return; // does nothing. See above. [self selectTabViewItemAtIndex:previousIndex]; @@ -243,7 +243,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; */ - (void)selectTabViewItemAtIndex:(unsigned)anIndex { - if(anIndex === selectedIndex) + if (anIndex === selectedIndex) return; if ((delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![delegate tabView:self shouldSelectTabViewItem:aTabViewItem]) @@ -287,7 +287,7 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; type = aTabViewType; - switch(type) { + switch (type) { case CPTopTabsBezelBorder: case CPBottomTabsBezelBorder: case CPNoTabsBezelBorder: @@ -353,7 +353,8 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; { var segmentIndex = [tabs testSegment:[tabs convertPoint:[anEvent locationInWindow] fromView:nil]]; - if(segmentIndex != CPNotFound) { + if (segmentIndex != CPNotFound) + { [self selectTabViewItemAtIndex:segmentIndex]; [tabs trackSegment:anEvent]; } @@ -361,10 +362,10 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; - (void)_repositionTabs { - var horizontalCenterOfSelf = CGRectGetWidth([self bounds])/2; - var verticalCenterOfTabs = CGRectGetHeight([tabs bounds])/2; + var horizontalCenterOfSelf = CGRectGetWidth([self bounds]) / 2, + verticalCenterOfTabs = CGRectGetHeight([tabs bounds]) / 2; - if(type === CPBottomTabsBezelBorder) + if (type === CPBottomTabsBezelBorder) [tabs setCenter:CGPointMake(horizontalCenterOfSelf, CGRectGetHeight([self bounds]) - verticalCenterOfTabs)]; else [tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)]; @@ -381,13 +382,13 @@ var HEIGHT_OF_SEGMENTED_CONTROL = 24; { [tabs setSegmentCount:[items count]]; - for(var i = 0; i < [items count]; i++) + for (var i = 0; i < [items count]; i++) { [tabs setLabel:[[items objectAtIndex:i] label] forSegment:i]; [tabs setTag:i forSegment:i]; } - if(selectedIndex === CPNotFound) + if (selectedIndex === CPNotFound) { [self selectFirstTabViewItem:self]; } diff --git a/Tests/Manual/CPTabView2/AppController.j b/Tests/Manual/CPTabView2/AppController.j index 09aac924b..78e07acb6 100644 --- a/Tests/Manual/CPTabView2/AppController.j +++ b/Tests/Manual/CPTabView2/AppController.j @@ -16,7 +16,7 @@ var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], contentView = [theWindow contentView]; - var tabView = [[CPTabView2 alloc] initWithFrame:CGRectMake(50,50,400,400)]; + var tabView = [[CPTabView alloc] initWithFrame:CGRectMake(50,50,400,400)]; [tabView setTabViewType:CPNoTabsBezelBorder]; [tabView setTabViewType:CPBottomTabsBezelBorder]; From 9777e4c52f67d871201267a33bc290272a534ffd Mon Sep 17 00:00:00 2001 From: Randall Luecke Date: Mon, 20 Sep 2010 01:28:57 -0400 Subject: [PATCH 07/10] Added a missing import to the new CPTabView, and fixed the import for the test. --- AppKit/CPTabView.j | 1 + Tests/Manual/CPTabView2/AppController.j | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 82d4f3cd4..7c52a0cbb 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -1,4 +1,5 @@ @import +@import /* Places tabs on top with a bezeled border. diff --git a/Tests/Manual/CPTabView2/AppController.j b/Tests/Manual/CPTabView2/AppController.j index 78e07acb6..df2af9cb8 100644 --- a/Tests/Manual/CPTabView2/AppController.j +++ b/Tests/Manual/CPTabView2/AppController.j @@ -7,7 +7,8 @@ */ @import -@import +@import + @implementation AppController : CPObject @@ -18,7 +19,7 @@ var tabView = [[CPTabView alloc] initWithFrame:CGRectMake(50,50,400,400)]; [tabView setTabViewType:CPNoTabsBezelBorder]; - [tabView setTabViewType:CPBottomTabsBezelBorder]; + [tabView setTabViewType:CPTopTabsBezelBorder]; var view = [[CPView alloc] initWithFrame:CGRectMake(20, 20, 200, 200)]; [view addSubview:[CPTextField labelWithTitle:@"First"]]; From 266bed7dc982b98b6b8636b538b4cd65f79a8bcd Mon Sep 17 00:00:00 2001 From: Derek Hammer Date: Sun, 19 Sep 2010 13:36:37 -0500 Subject: [PATCH 08/10] Use include instead of push to increase performance of jake. --- common.jake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common.jake b/common.jake index 1aac31031..3607393e4 100644 --- a/common.jake +++ b/common.jake @@ -123,8 +123,8 @@ global.$BUILD_CJS_CAPPUCCINO_FRAMEWORKS = FILE.join($BUILD_CJS_CAPPUCCINO, "Fram global.CLEAN = require("jake/clean").CLEAN; global.CLOBBER = require("jake/clean").CLOBBER; -global.CLEAN.push(global.$BUILD_DIR); -global.CLOBBER.push(global.$BUILD_DIR); +global.CLEAN.include(global.$BUILD_DIR); +global.CLOBBER.include(global.$BUILD_DIR); global.$HOME_DIR = FILE.absolute(FILE.dirname(module.path)); global.$LICENSE_FILE = FILE.absolute(FILE.join(FILE.dirname(module.path), 'LICENSE')); From 461bb652630d23171aa3d3ffa02dc1d828687299 Mon Sep 17 00:00:00 2001 From: Mike Fellows Date: Thu, 16 Sep 2010 18:29:21 -0700 Subject: [PATCH 09/10] Set vertical slider disabled track-color to the proper background images, stop overwriting the horizontal slider disabled track-color background images with those meant for the vertical slider - fixes issue #737 --- AppKit/Themes/Aristo/ThemeDescriptors.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 6ae3eb5a8..f2090f24f 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1071,7 +1071,7 @@ var themedButtonValues = nil, [ [@"track-width", 5.0], [@"track-color", trackColor, CPThemeStateVertical], - [@"track-color", trackDisabledColor, CPThemeStateDisabled], + [@"track-color", trackDisabledColor, CPThemeStateVertical | CPThemeStateDisabled], [@"knob-size", CGSizeMake(23.0, 24.0)], [@"knob-color", knobColor], From 6dd872f2d2614298a7fd63a8124d0bf90e0e1bce Mon Sep 17 00:00:00 2001 From: Brian Donovan Date: Mon, 20 Sep 2010 08:17:53 -0700 Subject: [PATCH 10/10] Fix CPScrollView -contentSize return type. --- AppKit/CPScrollView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 9aad1b8fd..9b04aaebe 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -166,7 +166,7 @@ /*! Returns the size of the scroll view's content view. */ -- (CGRect)contentSize +- (CGSize)contentSize { return [_contentView frame].size; }