From df2cf923e12e03fe4f2f9834440c8c704398cb76 Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Fri, 11 May 2012 15:52:44 +0200 Subject: [PATCH 1/5] MainBundle path has no '/' at the end when running in CommonJS. This will make relative paths fail. For example if OBJJ_INCLUDE_PATHS has the path "../../MyLibrary". MyLibrary will not be found when the path is joined with mainBundlePath without an ending '/'. This is working when running in Browser. --- Objective-J/Bootstrap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Objective-J/Bootstrap.js b/Objective-J/Bootstrap.js index 3ed56821d..3ea3fe515 100644 --- a/Objective-J/Bootstrap.js +++ b/Objective-J/Bootstrap.js @@ -22,7 +22,7 @@ #ifdef COMMONJS -var mainBundleURL = new CFURL("file:" + require("file").cwd()); +var mainBundleURL = new CFURL("file:" + require("file").cwd()).asDirectoryPathURL(); #elif defined(BROWSER) // This is automatic when importing, but we'd like these important URLs to // be taken into consideration in the cache as well. From 364208e0295e4ba8ed90bc9f24f2a5bf1a7d6778 Mon Sep 17 00:00:00 2001 From: ggsato Date: Tue, 17 Jul 2012 15:36:18 +0900 Subject: [PATCH 2/5] fixed a bug that removeObject shows empty selection if an object at index 0 was removed --- AppKit/CPArrayController.j | 3 + .../AppController.j | 102 +++++++++++++++++ .../Info.plist | 12 ++ .../ArrayControllerRemovingFirstTest/Jakefile | 93 +++++++++++++++ .../Resources/spinner.gif | Bin 0 -> 1849 bytes .../index-debug.html | 107 ++++++++++++++++++ .../index.html | 78 +++++++++++++ .../ArrayControllerRemovingFirstTest/main.j | 18 +++ 8 files changed, 413 insertions(+) create mode 100644 Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j create mode 100644 Tests/Manual/ArrayControllerRemovingFirstTest/Info.plist create mode 100644 Tests/Manual/ArrayControllerRemovingFirstTest/Jakefile create mode 100644 Tests/Manual/ArrayControllerRemovingFirstTest/Resources/spinner.gif create mode 100644 Tests/Manual/ArrayControllerRemovingFirstTest/index-debug.html create mode 100644 Tests/Manual/ArrayControllerRemovingFirstTest/index.html create mode 100644 Tests/Manual/ArrayControllerRemovingFirstTest/main.j diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 764096a0b..3e22ad838 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -879,6 +879,9 @@ [_arrangedObjects removeObjectAtIndex:pos]; [_selectionIndexes shiftIndexesStartingAtIndex:pos by:-1]; + + // This will automatically handle the avoidsEmptySelection case. + [self __setSelectionIndexes:_selectionIndexes]; } [self didChangeValueForKey:@"content"]; diff --git a/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j b/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j new file mode 100644 index 000000000..1ddd8d6f6 --- /dev/null +++ b/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j @@ -0,0 +1,102 @@ +/* + * AppController.j + * ArrayControllerRemovingFirstTest + * + * Created by You on July 17, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import + + +@implementation AppController : CPObject +{ + CPArrayController arrayController; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], + contentView = [theWindow contentView]; + + arrayController = [[CPArrayController alloc] init]; + [arrayController addObserver:self forKeyPath:@"selectionIndex" options: nil context: nil]; + var items = [CPMutableArray array]; + [items addObject:[[Item alloc] initWithTitle:@"1st Item"]]; + [items addObject:[[Item alloc] initWithTitle:@"2nd Item"]]; + [items addObject:[[Item alloc] initWithTitle:@"3rd Item"]]; + [items addObject:[[Item alloc] initWithTitle:@"4th Item"]]; + [arrayController setContent:items]; + + var label = [CPTextField labelWithTitle:@"Press buttons to see [Remove First By Object] fails while [Remove First By Index] succeeds"]; + [label setFrameOrigin:CGPointMake(20, 20)]; + [contentView addSubview:label]; + + var field = [CPTextField textFieldWithStringValue:@"" placeholder:@"" width:100]; + [field setFrameOrigin:CGPointMake(20, 50)]; + [field bind:@"value" toObject:self withKeyPath:@"arrayController.selection.title" options:nil]; + [contentView addSubview:field]; + + var button = [CPButton buttonWithTitle:@"Remove First By Object"]; + [button setFrameOrigin:CGPointMake(150, 50)]; + [button setTarget:self]; + [button setAction:@selector(removeFirst:)]; + [contentView addSubview:button]; + + var button2 = [CPButton buttonWithTitle:@"Remove First By Index"]; + [button2 setFrameOrigin:CGPointMake(350, 50)]; + [button2 setTarget:self]; + [button2 setAction:@selector(removeFirstByIndex:)]; + [contentView addSubview:button2]; + + [arrayController setSelectionIndex:0] + + [theWindow orderFront:self]; + + // Uncomment the following line to turn on the standard menu bar. + //[CPMenu setMenuBarVisible:YES]; +} + +- (void)removeFirst:(id)sender +{ + var selectedObjects = [arrayController selectedObjects]; + [arrayController removeObject:[selectedObjects objectAtIndex:0]]; +} + +- (void)removeFirstByIndex:(id)sender +{ + [arrayController removeObjectAtArrangedObjectIndex:0]; +} + +- (void)observeValueForKeyPath:(CPString)keyPath ofObject:(id)object change:(CPDictionary)change context:(id)context +{ + var oldIndex = [change valueForKey:CPKeyValueChangeOldKey]; + var newIndex = [change valueForKey:CPKeyValueChangeNewKey]; + + CPLog("TCDocument selectionIndexChanged from " + oldIndex + " to " + newIndex + ", contains " + [[arrayController arrangedObjects] count] + " objects"); +} + +@end + +@implementation Item : CPObject +{ + CPString title; +} + +- (id)initWithTitle:(CPString)aTitle +{ + self = [super init]; + if (self) + { + title = aTitle; + } + return self; +} + +- (CPString)title +{ + return title; +} + +@end + diff --git a/Tests/Manual/ArrayControllerRemovingFirstTest/Info.plist b/Tests/Manual/ArrayControllerRemovingFirstTest/Info.plist new file mode 100644 index 000000000..42f65de58 --- /dev/null +++ b/Tests/Manual/ArrayControllerRemovingFirstTest/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + ArrayControllerRemovingFirstTest + CPPrincipalClass + CPApplication + + diff --git a/Tests/Manual/ArrayControllerRemovingFirstTest/Jakefile b/Tests/Manual/ArrayControllerRemovingFirstTest/Jakefile new file mode 100644 index 000000000..6f4a90273 --- /dev/null +++ b/Tests/Manual/ArrayControllerRemovingFirstTest/Jakefile @@ -0,0 +1,93 @@ +/* + * Jakefile + * ArrayControllerRemovingFirstTest + * + * Created by You on July 17, 2012. + * Copyright 2012, 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 ("ArrayControllerRemovingFirstTest", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "ArrayControllerRemovingFirstTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("ArrayControllerRemovingFirstTest"); + task.setIdentifier("com.yourcompany.ArrayControllerRemovingFirstTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("ArrayControllerRemovingFirstTest"); + 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", ["ArrayControllerRemovingFirstTest"], 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", "ArrayControllerRemovingFirstTest", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "ArrayControllerRemovingFirstTest", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "ArrayControllerRemovingFirstTest")); + OS.system(["press", "-f", FILE.join("Build", "Release", "ArrayControllerRemovingFirstTest"), FILE.join("Build", "Deployment", "ArrayControllerRemovingFirstTest")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "ArrayControllerRemovingFirstTest")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "ArrayControllerRemovingFirstTest"), FILE.join("Build", "Desktop", "ArrayControllerRemovingFirstTest", "ArrayControllerRemovingFirstTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "ArrayControllerRemovingFirstTest", "ArrayControllerRemovingFirstTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "ArrayControllerRemovingFirstTest")); + print("----------------------------"); +} diff --git a/Tests/Manual/ArrayControllerRemovingFirstTest/Resources/spinner.gif b/Tests/Manual/ArrayControllerRemovingFirstTest/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/ArrayControllerRemovingFirstTest/index-debug.html b/Tests/Manual/ArrayControllerRemovingFirstTest/index-debug.html new file mode 100644 index 000000000..1c5f0943a --- /dev/null +++ b/Tests/Manual/ArrayControllerRemovingFirstTest/index-debug.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + ArrayControllerRemovingFirstTest + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/ArrayControllerRemovingFirstTest/index.html b/Tests/Manual/ArrayControllerRemovingFirstTest/index.html new file mode 100644 index 000000000..707d86be9 --- /dev/null +++ b/Tests/Manual/ArrayControllerRemovingFirstTest/index.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + ArrayControllerRemovingFirstTest + + + + + + + + + + + + +
+
+ + + +
+
+ + + + diff --git a/Tests/Manual/ArrayControllerRemovingFirstTest/main.j b/Tests/Manual/ArrayControllerRemovingFirstTest/main.j new file mode 100644 index 000000000..60b8fb56d --- /dev/null +++ b/Tests/Manual/ArrayControllerRemovingFirstTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * ArrayControllerRemovingFirstTest + * + * Created by You on July 17, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 7e562fa3aa6d378ba0c4cb03f8ae5d2c687a8f7f Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 21 Jul 2012 13:08:54 +0100 Subject: [PATCH 3/5] Fixes #1624. Fix grouping for `CPNumberFormatter`. --- Foundation/CPNumberFormatter.j | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Foundation/CPNumberFormatter.j b/Foundation/CPNumberFormatter.j index 3bb9489a9..0dc2e950d 100644 --- a/Foundation/CPNumberFormatter.j +++ b/Foundation/CPNumberFormatter.j @@ -96,11 +96,13 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; // TODO This is just a temporary solution. Should be generalised. // Add in thousands separators. if (perMillSymbol) - while (commaPosition < [preFraction length]) + { + for (var commaPosition = 3, prefLength = [preFraction length]; commaPosition < prefLength; commaPosition += 4) { - preFraction = [preFraction stringByReplacingCharactersInRange:CPMakeRange(commaPosition, 0) withString:perMillSymbol]; - commaPosition += 4; + preFraction = [preFraction stringByReplacingCharactersInRange:CPMakeRange(prefLength - commaPosition, 0) withString:perMillSymbol]; + prefLength += 1; } + } if (fraction) return preFraction + "." + fraction; From a78c1bf03a2f2111317544531d5ed61175c36ed8 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 21 Jul 2012 13:12:59 +0100 Subject: [PATCH 4/5] Refs #1624. Fix grouping separator support. `perMillSymbol` was incorrectly used as the grouping separator. --- Foundation/CPNumberFormatter.j | 20 +++++--------------- Tests/Foundation/CPNumberFormatterTest.j | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/Foundation/CPNumberFormatter.j b/Foundation/CPNumberFormatter.j index 0dc2e950d..0197d02ef 100644 --- a/Foundation/CPNumberFormatter.j +++ b/Foundation/CPNumberFormatter.j @@ -57,6 +57,7 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; { CPNumberFormatterStyle _numberStyle @accessors(property=numberStyle); CPString _perMillSymbol @accessors(property=perMillSymbol); + CPString _groupingSeparator @accessors(property=groupingSeparator); CPNumberFormatterRoundingMode _roundingMode @accessors(property=roundingMode); CPUInteger _maximumFractionalDigits @accessors(property=maximalFractionalDigits); @@ -69,6 +70,7 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; { _roundingMode = CPNumberFormatterRoundHalfUp; _maximumFractionalDigits = 3; + _groupingSeparator = @","; } return self; @@ -90,16 +92,15 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; preFraction = parts[0], fraction = parts.length > 1 ? parts[1] : "", preFractionLength = [preFraction length], - commaPosition = 3, - perMillSymbol = [self _effectivePerMillSymbol]; + commaPosition = 3; // TODO This is just a temporary solution. Should be generalised. // Add in thousands separators. - if (perMillSymbol) + if (_groupingSeparator) { for (var commaPosition = 3, prefLength = [preFraction length]; commaPosition < prefLength; commaPosition += 4) { - preFraction = [preFraction stringByReplacingCharactersInRange:CPMakeRange(prefLength - commaPosition, 0) withString:perMillSymbol]; + preFraction = [preFraction stringByReplacingCharactersInRange:CPMakeRange(prefLength - commaPosition, 0) withString:_groupingSeparator]; prefLength += 1; } } @@ -141,17 +142,6 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; return YES; } -/*! - @ignore - Return the perMillSymbol if set, otherwise the locale default. -*/ -- (CPString)_effectivePerMillSymbol -{ - if (_perMillSymbol === nil || _perMillSymbol === undefined) - return ","; // (FIXME US Locale specific.) - return _perMillSymbol; -} - - (void)setRoundingMode:(CPNumberFormatterRoundingMode)aRoundingMode { _roundingMode = aRoundingMode; diff --git a/Tests/Foundation/CPNumberFormatterTest.j b/Tests/Foundation/CPNumberFormatterTest.j index 05ded5fc9..67f4addcb 100644 --- a/Tests/Foundation/CPNumberFormatterTest.j +++ b/Tests/Foundation/CPNumberFormatterTest.j @@ -16,6 +16,29 @@ [self assert:@"122,344.456" equals:formattedNumberString]; } +- (void)testSetGroupingSeparator_ +{ + var numberFormatter = [CPNumberFormatter new]; + [numberFormatter setNumberStyle:CPNumberFormatterDecimalStyle]; + + [self assert:@"1" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:1]]]; + [self assert:@"12" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:12]]]; + [self assert:@"123" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:123]]]; + [self assert:@"1,234" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:1234]]]; + [self assert:@"12,345" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:12345]]]; + [self assert:@"123,456" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:123456]]]; + [self assert:@"1,234,567" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:1234567]]]; + + [numberFormatter setGroupingSeparator:@" "]; + [self assert:@"1" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:1]]]; + [self assert:@"12" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:12]]]; + [self assert:@"123" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:123]]]; + [self assert:@"1 234" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:1234]]]; + [self assert:@"12 345" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:12345]]]; + [self assert:@"123 456" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:123456]]]; + [self assert:@"1 234 567" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:1234567]]]; +} + - (void)testRoundingMode { var numberFormatter = [[CPNumberFormatter alloc] init], From 8d1a5ac6b90b01c98ccd1f6dc8115aac5daba91c Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 21 Jul 2012 13:24:13 +0100 Subject: [PATCH 5/5] Format code. --- AppKit/CPRuleEditor/CPRuleEditor.j | 56 ++++++++++++++---------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/AppKit/CPRuleEditor/CPRuleEditor.j b/AppKit/CPRuleEditor/CPRuleEditor.j index e537a9199..9f30eb120 100644 --- a/AppKit/CPRuleEditor/CPRuleEditor.j +++ b/AppKit/CPRuleEditor/CPRuleEditor.j @@ -507,7 +507,7 @@ var CPRuleEditorItemPBoardType = @"CPRuleEditorItemPBoardType", - (int)parentRowForRow:(int)rowIndex { if (rowIndex < 0 || rowIndex >= [self numberOfRows]) - [CPException raise:CPRangeException reason:_cmd+@" row " + rowIndex + " is out of range"]; + [CPException raise:CPRangeException reason:_cmd + @" row " + rowIndex + " is out of range"]; var targetObject = [[self _rowCacheForIndex:rowIndex] rowObject]; @@ -548,7 +548,7 @@ TODO: implement - (CPRuleEditorRowType)rowTypeForRow:(int)rowIndex { if (rowIndex < 0 || rowIndex > [self numberOfRows]) - [CPException raise:CPRangeException reason:_cmd+@"row " + rowIndex + " is out of range"]; + [CPException raise:CPRangeException reason:_cmd + @"row " + rowIndex + " is out of range"]; var rowcache = [self _rowCacheForIndex:rowIndex]; if (rowcache) @@ -588,7 +588,7 @@ TODO: implement if (indexInSubrows !== CPNotFound) { [indexes addIndex:i]; - objectsCount --; + objectsCount--; if ([self rowTypeForRow:i] === CPRuleEditorRowTypeCompound) i += [[self subrowIndexesForRow:i] count]; @@ -848,7 +848,7 @@ TODO: implement } catch(error) { - CPLogConsole(@"Compound predicate error: [%@]\npredicateType:%i",[error description],compoundType); + CPLogConsole(@"Compound predicate error: [%@]\npredicateType:%i", [error description], compoundType); compoundPredicate = nil; } finally @@ -893,23 +893,21 @@ TODO: implement try { if (selector !== nil) - predicate = [CPComparisonPredicate - predicateWithLeftExpression:lhs - rightExpression:rhs - customSelector:selector + predicate = [CPComparisonPredicate predicateWithLeftExpression:lhs + rightExpression:rhs + customSelector:selector ]; else - predicate = [CPComparisonPredicate - predicateWithLeftExpression:lhs - rightExpression:rhs - modifier:(modifier || CPDirectPredicateModifier) - type:operator - options:(options || CPCaseInsensitivePredicateOption) + predicate = [CPComparisonPredicate predicateWithLeftExpression:lhs + rightExpression:rhs + modifier:(modifier || CPDirectPredicateModifier) + type:operator + options:(options || CPCaseInsensitivePredicateOption) ]; } catch(error) { - CPLogConsole(@"Row predicate error: ["+[error description]+"] for row "+aRow); + CPLogConsole(@"Row predicate error: [" + [error description] + "] for row " + aRow); predicate = nil; } finally @@ -1135,7 +1133,7 @@ TODO: implement - (_CPRuleEditorViewSliceDropSeparator)_createSliceDropSeparator { - var view = [[_CPRuleEditorViewSliceDropSeparator alloc] initWithFrame:CGRectMake(0,-10, [self frame].size.width, 2)]; + var view = [[_CPRuleEditorViewSliceDropSeparator alloc] initWithFrame:CGRectMake(0, -10, [self frame].size.width, 2)]; [view setAutoresizingMask:CPViewWidthSizable]; return view; } @@ -1316,7 +1314,7 @@ TODO: implement return [_boundArrayOwner mutableArrayValueForKey:_boundArrayKeyPath]; } -- (BOOL)_nextUnusedItems:({CPArray})items andValues:({CPArray})values forRow:(int)rowIndex forRowType:(unsigned int)type +- (BOOL)_nextUnusedItems:(CPArray)items andValues:(CPArray)values forRow:(int)rowIndex forRowType:(unsigned int)type { var parentItem = [items lastObject], // if empty items array, this is NULL aka the root item; childrenCount = [self _queryNumberOfChildrenOfItem:parentItem withRowType:type], @@ -1398,7 +1396,7 @@ TODO: implement { var item = [items objectAtIndex:i], value = [values objectAtIndex:i], - itemAndValue = [CPDictionary dictionaryWithObjects:[item,value] forKeys:["item","value"]]; + itemAndValue = [CPDictionary dictionaryWithObjects:[item, value] forKeys:["item", "value"]]; [itemsAndValues addObject:itemAndValue]; } @@ -2109,9 +2107,9 @@ TODO: implement mainRowIndex = [slice rowIndex], draggingRows = [CPIndexSet indexSetWithIndex:mainRowIndex], selected_indices = [self _selectedSliceIndices], - pasteboard = [CPPasteboard pasteboardWithName: CPDragPboard]; + pasteboard = [CPPasteboard pasteboardWithName:CPDragPboard]; - [pasteboard declareTypes:[CPArray arrayWithObjects: CPRuleEditorItemPBoardType, nil] owner: self]; + [pasteboard declareTypes:[CPArray arrayWithObjects:CPRuleEditorItemPBoardType, nil] owner: self]; if ([selected_indices containsIndex:mainRowIndex]) [draggingRows addIndexes:selected_indices]; @@ -2314,7 +2312,7 @@ TODO: implement { var rowObject = [[self _rowCacheForIndex:current_index] rowObject], subrows = [self _subrowObjectsOfObject:rowObject], - subIndexes = [self _globalIndexesForSubrowIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0,[subrows count])] ofParentObject:rowObject]; + subIndexes = [self _globalIndexesForSubrowIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [subrows count])] ofParentObject:rowObject]; numberOfChildrenOfPreviousBrother = [subIndexes count]; } @@ -2416,17 +2414,17 @@ var CPRuleEditorAlignmentGridWidthKey = @"CPRuleEditorAlignmentGridWidth", if (self !== nil) { [self setFormattingStringsFilename:[coder decodeObjectForKey:CPRuleEditorStringsFilenameKey]]; - _alignmentGridWidth = [coder decodeFloatForKey:CPRuleEditorAlignmentGridWidthKey]; - _sliceHeight = [coder decodeDoubleForKey:CPRuleEditorSliceHeightKey]; + _alignmentGridWidth = [coder decodeFloatForKey:CPRuleEditorAlignmentGridWidthKey]; + _sliceHeight = [coder decodeDoubleForKey:CPRuleEditorSliceHeightKey]; _editable = [coder decodeBoolForKey:CPRuleEditorEditableKey]; _allowsEmptyCompoundRows = [coder decodeBoolForKey:CPRuleEditorAllowsEmptyCompoundRowsKey]; _disallowEmpty = [coder decodeBoolForKey:CPRuleEditorDisallowEmptyKey]; - _nestingMode = [coder decodeIntForKey:CPRuleEditorNestingModeKey]; - _typeKeyPath = [coder decodeObjectForKey:CPRuleEditorRowTypeKeyPathKey]; - _itemsKeyPath = [coder decodeObjectForKey:CPRuleEditorItemsKeyPathKey]; - _valuesKeyPath = [coder decodeObjectForKey:CPRuleEditorValuesKeyPathKey]; - _subrowsArrayKeyPath = [coder decodeObjectForKey:CPRuleEditorSubrowsArrayKeyPathKey]; - _boundArrayKeyPath = [coder decodeObjectForKey:CPRuleEditorBoundArrayKeyPathKey]; + _nestingMode = [coder decodeIntForKey:CPRuleEditorNestingModeKey]; + _typeKeyPath = [coder decodeObjectForKey:CPRuleEditorRowTypeKeyPathKey]; + _itemsKeyPath = [coder decodeObjectForKey:CPRuleEditorItemsKeyPathKey]; + _valuesKeyPath = [coder decodeObjectForKey:CPRuleEditorValuesKeyPathKey]; + _subrowsArrayKeyPath = [coder decodeObjectForKey:CPRuleEditorSubrowsArrayKeyPathKey]; + _boundArrayKeyPath = [coder decodeObjectForKey:CPRuleEditorBoundArrayKeyPathKey]; _slicesHolder = [[self subviews] objectAtIndex:0]; _boundArrayOwner = [coder decodeObjectForKey:CPRuleEditorBoundArrayOwnerKey];