From d686a0dadf678c2eac8fdf4e4bcc12a68531e178 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Wed, 30 Jul 2014 21:09:41 +0200 Subject: [PATCH 01/70] reverseSetValuesFor: handle multiple selection --- AppKit/CPTextField.j | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 899c460b9..0b85ef76c 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1957,6 +1957,23 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [_source setObjectValue:aValue]; } +- (void)reverseSetValueFor:(CPString)aBinding +{ + var destination = [_info objectForKey:CPObservedObjectKey], + keyPath = [_info objectForKey:CPObservedKeyPathKey], + options = [_info objectForKey:CPOptionsKey], + newValue = [self valueForBinding:aBinding], + value = [destination valueForKeyPath:keyPath]; + + if (CPIsControllerMarker(value) && newValue == nil) return; + + newValue = [self reverseTransformValue:newValue withOptions:options]; + + [self suppressSpecificNotificationFromObject:destination keyPath:keyPath]; + [destination setValue:newValue forKeyPath:keyPath]; + [self unsuppressSpecificNotificationFromObject:destination keyPath:keyPath]; +} + @end @implementation _CPTextFieldPatternValueBinder : CPValueWithPatternBinding From 1767cf8ad4e5419fba40453eb1565b77ce91ca58 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 14 Aug 2014 22:41:59 +0200 Subject: [PATCH 02/70] formatting+nil equality --- AppKit/CPTextField.j | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 0b85ef76c..43f83d8ea 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1960,12 +1960,12 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", - (void)reverseSetValueFor:(CPString)aBinding { var destination = [_info objectForKey:CPObservedObjectKey], - keyPath = [_info objectForKey:CPObservedKeyPathKey], - options = [_info objectForKey:CPOptionsKey], - newValue = [self valueForBinding:aBinding], - value = [destination valueForKeyPath:keyPath]; + keyPath = [_info objectForKey:CPObservedKeyPathKey], + options = [_info objectForKey:CPOptionsKey], + newValue = [self valueForBinding:aBinding], + value = [destination valueForKeyPath:keyPath]; - if (CPIsControllerMarker(value) && newValue == nil) return; + if (CPIsControllerMarker(value) && newValue === nil) return; newValue = [self reverseTransformValue:newValue withOptions:options]; From ba20936c17eec7e6f6ee87f4ebb2b176234cb7f2 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 29 Oct 2014 15:04:55 -0700 Subject: [PATCH 03/70] Fixed: unable to chain sheet in a window Previously when chaining sheet on the same window, Cappuccino crashed. Now chaining a sheet in the delegate method of the method endSheet: will open the next sheet. Now when opening a sheet, we check if another sheet is currently closing. If yes, we wait till we get the notification of the closing of the previous sheet. And then we open the next sheet. Fixed #2159 Test app in Tests/Manual/AttachedSheet2/SheetWindowController.j --- AppKit/CPApplication.j | 4 +- AppKit/CPWindow/CPWindow.j | 49 +++++++++++++++---- .../AttachedSheet2/SheetWindowController.j | 11 +++-- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index f3783c75a..90d87c5c3 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -986,7 +986,9 @@ var CPMainCibFile = @"CPMainCibFile", return; } - [aSheet._windowView _enableSheet:YES inWindow:aWindow]; + if (![aWindow attachedSheet]) + [aSheet._windowView _enableSheet:YES inWindow:aWindow]; + [aWindow _attachSheet:aSheet modalDelegate:aModalDelegate didEndSelector:didEndSelector contextInfo:contextInfo]; } diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index f770fc642..baafd32a4 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -2679,6 +2679,23 @@ CPTexturedBackgroundWindowMask [attachedSheet setFrame:sheetFrame display:YES animate:NO]; } +- (void)_previousSheetIsClosedNotification:(CPNotification)aNotification +{ + [[CPNotificationCenter defaultCenter] removeObserver:self name:CPWindowDidEndSheetNotification object:self]; + + var sheet = _sheetContext[@"nextSheet"], + modalDelegate =_sheetContext[@"nextModalDelegate"], + endSelector = _sheetContext[@"nextEndSelector"], + contextInfo = _sheetContext[@"nextContextInfo"]; + + // Needed, becauwe when the notification CPWindowDidEndSheetNotification is sent, the sheetContext is not up to date... + setTimeout(function() + { + [sheet._windowView _enableSheet:YES inWindow:self]; + [self _attachSheet:sheet modalDelegate:modalDelegate didEndSelector:endSelector contextInfo:contextInfo]; + }, 0) +} + /* Starting point for sheet session, called from CPApplication beginSheet: */ @@ -2687,9 +2704,24 @@ CPTexturedBackgroundWindowMask { if (_sheetContext) { - [CPException raise:CPInternalInconsistencyException - reason:@"The target window of beginSheet: already has a sheet, did you forget orderOut: ?"]; - return; + // Here we wait till the current sheet is closed + if (_sheetContext[@"isClosing"]) + { + // Here we save the next sheet to open + _sheetContext[@"nextSheet"] = aSheet; + _sheetContext[@"nextModalDelegate"] = aModalDelegate; + _sheetContext[@"nextEndSelector"] = didEndSelector; + _sheetContext[@"nextContextInfo"] = contextInfo; + + [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(_previousSheetIsClosedNotification:) name:CPWindowDidEndSheetNotification object:self]; + return; + } + else + { + [CPException raise:CPInternalInconsistencyException + reason:@"The target window of beginSheet: already has a sheet, did you forget orderOut: ?"]; + return; + } } _sheetContext = { @@ -2741,7 +2773,12 @@ CPTexturedBackgroundWindowMask */ - (void)_detachSheetWindow { + if (_sheetContext["isClosing"]) + return; + _sheetContext["isAttached"] = NO; + _sheetContext["isClosing"] = YES; + _sheetContext["opened"] = NO; // A timer seems to be necessary for the animation to work correctly. // It would be ideal to block here and spin the event loop, until attach is complete. @@ -2874,12 +2911,6 @@ CPTexturedBackgroundWindowMask return; } - if (_sheetContext["isClosing"]) - return; - - _sheetContext["opened"] = NO; - _sheetContext["isClosing"] = YES; - // The parent window can be orderedOut to disable the sheet animate out, as in Cocoa if ([self isVisible]) { diff --git a/Tests/Manual/AttachedSheet2/SheetWindowController.j b/Tests/Manual/AttachedSheet2/SheetWindowController.j index 096beec68..41866b38f 100644 --- a/Tests/Manual/AttachedSheet2/SheetWindowController.j +++ b/Tests/Manual/AttachedSheet2/SheetWindowController.j @@ -399,9 +399,6 @@ _returnCode = 77; [CPApp endSheet:[self window] returnCode:_returnCode]; - - if (orderOutAfter) - [[self window] orderOut:nil]; } // @@ -519,7 +516,15 @@ // test sheet chaining. it should be possible to start another sheet from didEndSheet, // but only if we orderOut: the sheet before we called endSheet: This is how cocoa works too. if (returnCode == 77) + { + var orderOutAfter = [_orderOutAfterCheckbox state]; + + if (orderOutAfter) + [[self window] orderOut:self]; + [self runSheetForWindow:parentWindow]; + } + //[self runAlertSheet:parentWindow]; } From bfd0ceac53896ae933782de941f2ea6648a9766b Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 29 Oct 2014 21:50:46 -0700 Subject: [PATCH 04/70] Typo: becauwe instead of because --- AppKit/CPWindow/CPWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index baafd32a4..7a9c20217 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -2688,7 +2688,7 @@ CPTexturedBackgroundWindowMask endSelector = _sheetContext[@"nextEndSelector"], contextInfo = _sheetContext[@"nextContextInfo"]; - // Needed, becauwe when the notification CPWindowDidEndSheetNotification is sent, the sheetContext is not up to date... + // Needed, because when the notification CPWindowDidEndSheetNotification is sent, the sheetContext is not up to date... setTimeout(function() { [sheet._windowView _enableSheet:YES inWindow:self]; From 64a15db791ab60a2387aee7dbc72b746384f9923 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Fri, 31 Oct 2014 18:39:55 -0700 Subject: [PATCH 05/70] NEW: Environment variable to disable CommonJS environement building This patch allows user to disable the commonJS build phase by setting the system environement variable IGNORE_ENV_COMMONJS. For instance `export IGNORE_ENV_COMMONJS=1` --- Objective-J/CommonJS/lib/objective-j/jake/bundletask.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js index a31c5d781..e71b9129f 100644 --- a/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js +++ b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js @@ -35,7 +35,12 @@ function BundleTask(aName, anApplication) { Task.apply(this, arguments); - this.setEnvironments([environment.Browser, environment.CommonJS]); + var ignoreCommonJS = system.env["CAPP_IGNORE_COMMONJS_ENV"]; + + if (ignoreCommonJS && ignoreCommonJS.toLowerCase() == "no" || ignoreCommonJS == "1") + this.setEnvironments([environment.Browser]); + else + this.setEnvironments([environment.Browser, environment.CommonJS]); this._author = null; this._email = null; From 9621d76faa68c52b8c323c92ca8ef8779f1be652 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 12:10:23 -0400 Subject: [PATCH 06/70] Fixed: NativeHost is no longer built by default This commit removes NativeHost from the 'Tools' Jakefile, ensuring that it does not get built by default. Fixes #2239 --- Tools/Jakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/Jakefile b/Tools/Jakefile index d57ab7c6c..b0f0b52a8 100644 --- a/Tools/Jakefile +++ b/Tools/Jakefile @@ -2,6 +2,6 @@ require("../common.jake"); // nib2cib uses fontinfo and imagesize and capp uses nib2cib -subtasks(["fontinfo", "imagesize", "nib2cib", "capp", "capp_lint", "dump_theme", "NativeHost", "XcodeCapp"], ["build"/*, "clean", "clobber"*/]); +subtasks(["fontinfo", "imagesize", "nib2cib", "capp", "capp_lint", "dump_theme", "XcodeCapp"], ["build", /*"clean", "clobber"*/]); subtasks(["fontinfo", "imagesize"], ["clean", "clobber"]); From c37f0cfaa9bae48269f06fbc3889613964893f75 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Sat, 1 Nov 2014 12:20:03 -0400 Subject: [PATCH 07/70] Fixed: Removed old CI scripts from the Tools directory The Tools directory contained some old scripts for a previous continuous integration system. Since we're using Travis now, these are no longer needed. --- Tools/Scripts/ci-extra-nightlies.sh | 10 -------- Tools/Scripts/ci.sh | 36 ----------------------------- Tools/Scripts/cruise_config.rb | 6 ----- Tools/Scripts/githooks/pre-commit | 3 --- 4 files changed, 55 deletions(-) delete mode 100644 Tools/Scripts/ci-extra-nightlies.sh delete mode 100755 Tools/Scripts/ci.sh delete mode 100644 Tools/Scripts/cruise_config.rb delete mode 100755 Tools/Scripts/githooks/pre-commit diff --git a/Tools/Scripts/ci-extra-nightlies.sh b/Tools/Scripts/ci-extra-nightlies.sh deleted file mode 100644 index b0726ab50..000000000 --- a/Tools/Scripts/ci-extra-nightlies.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -PACKAGE_BRANCH="nightly" jake push-packages -code=$? -if [ $code -ne 0 ]; then - echo "NIGHTLY BUILD PUSH FAILED ($code)" - exit $code -else - echo "NIGHTLY BUILD PUSH SUCCEEDED" -fi diff --git a/Tools/Scripts/ci.sh b/Tools/Scripts/ci.sh deleted file mode 100755 index 4cce6225e..000000000 --- a/Tools/Scripts/ci.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -project_home="$(dirname "$PWD")" -extras="$project_home/ci-extra.sh" - -export PATH="$HOME/narwhal/bin:$PATH" -export CAPP_AUTO_UPGRADE="yes" - -export CAPP_BUILD="$project_home/build_incremental" -time jake CommonJS test-only -code=$? -if [ $code -ne 0 ]; then - echo "INCREMENTAL BUILD FAILED ($code)" - exit $code -else - echo "INCREMENTAL BUILD SUCCEEDED" -fi - -export CAPP_BUILD="$project_home/build_clean" -rm -rf "$CAPP_BUILD" - -time jake CommonJS test-only -code=$? -if [ $code -ne 0 ]; then - echo "CLEAN BUILD FAILED ($code)" - exit $code -else - echo "CLEAN BUILD SUCCEEDED" -fi - -# run any additional ci commands not common to all branches (like nightly builds) -if [ -f "$extras" ]; then - source "$extras" -fi - -exit 0 diff --git a/Tools/Scripts/cruise_config.rb b/Tools/Scripts/cruise_config.rb deleted file mode 100644 index 17c14a20d..000000000 --- a/Tools/Scripts/cruise_config.rb +++ /dev/null @@ -1,6 +0,0 @@ -Project.configure do |project| - - project.email_notifier.emails = ['objjbuild@googlegroups.com'] - project.build_command = 'Tools/Scripts/ci.sh' - -end diff --git a/Tools/Scripts/githooks/pre-commit b/Tools/Scripts/githooks/pre-commit deleted file mode 100755 index e5f2f4587..000000000 --- a/Tools/Scripts/githooks/pre-commit +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -jake test-only From 5bd07716eba18f5d9cb397c099dbd64a35bbd8d2 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 14:49:25 -0800 Subject: [PATCH 08/70] New: new options for the command objj This pull requests adds the following feature for the command objj: - Option -h or --help to get the help of the command - Option -I or --objj-include-paths to specify the frameworks to be used - Possibility to pass several files to the command, for example objj AppController.j Test.j --- Objective-J/CommonJS/lib/objective-j.js | 38 +++++++++++++++++++------ 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index cf5504a3f..ff89d8766 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -79,27 +79,47 @@ exports.run = function(args) // copy the args since we're going to modify them var argv = args.slice(1); - if (argv[0] === "--version") + if (argv[0] === "--version" || argv[0] === "-v") { print(exports.fullVersionString()); return; } - while (argv.length && argv[0].indexOf('-I') === 0) - OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().substr(2).split(':')); + if (argv[0] === "--help" || argv[0] === "-h") + { + print("Usage (objj): " + args[0] + " [options] [--] files..."); + print(" -v, --version print the current version of objj"); + print(" -I, --objj-include-paths specify the framework to be used") + print(" -h, --help print this help"); + return; + } + + while (argv.length && argv[0] == "-I" || argv[0] == "--objj-include-paths") + { + argv.shift(); + OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().split(":")); + } } if (argv && argv.length > 0) { - var arg0 = argv.shift(); - var mainFilePath = FILE.canonical(arg0); + while (argv.length > 0) + { + var arg0 = argv.shift(); + var mainFilePath = FILE.canonical(arg0); - exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); - if (typeof main === "function") - main([arg0].concat(argv)); + if (typeof main === "function") + main([arg0].concat(argv)); - require("browser/timeout").serviceTimeouts(); + require("browser/timeout").serviceTimeouts(); + + ObjectiveJ.Executable.resetCachedFileExecutableSearchers(); + ObjectiveJ.StaticResource.resetRootResources(); + ObjectiveJ.FileExecutable.resetFileExecutables(); + objj_resetRegisterClasses(); + } } else { From f21dcb8265d78683f984aa70014e1fb91a191ae7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 15:25:47 -0800 Subject: [PATCH 09/70] New: Added option --parser/-p to the command objj Previously it wasn't possible to specify a custom parser for the command objj. This is needed for xCodeCapp --- Objective-J/CommonJS/lib/objective-j.js | 8 +++++++- Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index ff89d8766..47d838406 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -90,10 +90,16 @@ exports.run = function(args) print("Usage (objj): " + args[0] + " [options] [--] files..."); print(" -v, --version print the current version of objj"); print(" -I, --objj-include-paths specify the framework to be used") - print(" -h, --help print this help"); + print(" -p, --parser specify to use a specific parser") return; } + if (argv[0] === "-p" || argv[0] === "--parser") + { + argv.shift(); + optionalParserUsed = true; + } + while (argv.length && argv[0] == "-I" || argv[0] == "--objj-include-paths") { argv.shift(); diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 81e9b7cf6..0a987b2e3 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -71,6 +71,7 @@ { launchPath = self.xcc.executablePaths[@"objj"]; arguments = @[ + @"--parser", self.xcc.parserPath, self.projectPath, self.sourcePath From f74888419c4bb29d4acb7715e11b796df4b17500 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 15:33:37 -0800 Subject: [PATCH 10/70] Fixed: part of the code missing after the previous commit refs #f21dcb8265d78683f984aa70014e1fb91a191ae7 --- Objective-J/CommonJS/lib/objective-j.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 47d838406..c123e81c0 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -121,6 +121,12 @@ exports.run = function(args) require("browser/timeout").serviceTimeouts(); + if (optionalParserUsed) + { + // Here we have no idea what the parser does...this is used for xCodeCapp + break; + } + ObjectiveJ.Executable.resetCachedFileExecutableSearchers(); ObjectiveJ.StaticResource.resetRootResources(); ObjectiveJ.FileExecutable.resetFileExecutables(); From 5678fe3b83fbb4e27f231b14ca59584b22127127 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 18:12:47 -0800 Subject: [PATCH 11/70] Fixed: change option -p in objj by bash concept -- --- Objective-J/CommonJS/lib/objective-j.js | 23 +++++++++---------- .../XcodeCapp/ProcessSourceOperation.m | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index c123e81c0..4b74070c2 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -89,17 +89,11 @@ exports.run = function(args) { print("Usage (objj): " + args[0] + " [options] [--] files..."); print(" -v, --version print the current version of objj"); - print(" -I, --objj-include-paths specify the framework to be used") - print(" -p, --parser specify to use a specific parser") + print(" -I, --objj-include-paths include a specific framework paths") + print(" -h, --help print this help"); return; } - if (argv[0] === "-p" || argv[0] === "--parser") - { - argv.shift(); - optionalParserUsed = true; - } - while (argv.length && argv[0] == "-I" || argv[0] == "--objj-include-paths") { argv.shift(); @@ -109,6 +103,8 @@ exports.run = function(args) if (argv && argv.length > 0) { + var endCommand = false; + while (argv.length > 0) { var arg0 = argv.shift(); @@ -116,16 +112,19 @@ exports.run = function(args) exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + if (argv[0] == "--") + { + endCommand = true; + argv.shift(); + } + if (typeof main === "function") main([arg0].concat(argv)); require("browser/timeout").serviceTimeouts(); - if (optionalParserUsed) - { - // Here we have no idea what the parser does...this is used for xCodeCapp + if (endCommand) break; - } ObjectiveJ.Executable.resetCachedFileExecutableSearchers(); ObjectiveJ.StaticResource.resetRootResources(); diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 0a987b2e3..8d95e03a8 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -71,8 +71,8 @@ { launchPath = self.xcc.executablePaths[@"objj"]; arguments = @[ - @"--parser", self.xcc.parserPath, + @"--", self.projectPath, self.sourcePath ]; From 4d77e7dd6b74f010b650db3c7db74dc7a7c88f91 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 19:54:35 -0800 Subject: [PATCH 12/70] Fixed: fixed issue with press, capp and nib2cib with the new command objj --- Objective-J/CommonJS/lib/objective-j.js | 3 +++ Objective-J/CommonJS/objj-executable | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 4b74070c2..883e34e7f 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -119,7 +119,10 @@ exports.run = function(args) } if (typeof main === "function") + { main([arg0].concat(argv)); + endCommand = true; + } require("browser/timeout").serviceTimeouts(); diff --git a/Objective-J/CommonJS/objj-executable b/Objective-J/CommonJS/objj-executable index 919302c11..9f2f05a02 100755 --- a/Objective-J/CommonJS/objj-executable +++ b/Objective-J/CommonJS/objj-executable @@ -3,5 +3,5 @@ var execPath = require("file").path(module.path); var mainPath = execPath.dirname().dirname().join("lib", execPath.basename(), "main.j"); -var args = ["objj", String(mainPath)].concat(system.args.slice(1)); +var args = ["objj", String(mainPath), "--"].concat(system.args.slice(1)); require("objective-j").run(args); From 7abcc42a42962b6bfbcb75be4372709ad133fc7e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 19:55:02 -0800 Subject: [PATCH 13/70] Test: updated test ToolTest.j. Added tests for capp_lint and objj --- Tests/Tools/ToolsTest.j | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Tests/Tools/ToolsTest.j b/Tests/Tools/ToolsTest.j index b3e16e59e..0b4605664 100644 --- a/Tests/Tools/ToolsTest.j +++ b/Tests/Tools/ToolsTest.j @@ -29,6 +29,18 @@ function cleanup() { status = OS.system(["flatten", "-f", "ToolsTestApp", "FlattenTestApp"].map(OS.enquote).join(" ") + " > /dev/null"); [self assert:0 equals:status message:"flatten failed"]; + + status = OS.system(["objj", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed"]; + + status = OS.system(["objj", "ToolsTestApp/AppController.j", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed with several files"]; + + status = OS.system(["objj", "-I", "ToolsTestApp/Frameworks", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"objj failed with options -I"]; + + status = OS.system(["capp_lint", "ToolsTestApp/AppController.j"]); + [self assert:0 equals:status message:"capp lint failed"]; } - (void)tearDown From 2bf012100a04eb67714486a1dcffd67d1c51f519 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 21:02:15 -0800 Subject: [PATCH 14/70] Test: removed test for capp_lint --- Tests/Manual/MultipleValueBindings/AppController.j | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Tests/Manual/MultipleValueBindings/AppController.j b/Tests/Manual/MultipleValueBindings/AppController.j index bbc814a2f..a39a346b4 100644 --- a/Tests/Manual/MultipleValueBindings/AppController.j +++ b/Tests/Manual/MultipleValueBindings/AppController.j @@ -6,8 +6,8 @@ * Copyright 2013, Cappuccino Foundation. All rights reserved. */ -@import -@import +@import +@import @import "Transformers.j" @@ -28,12 +28,13 @@ - (id)init { - if (self = [super init]) + if (self = super init]) { foo = nil; [self setNow]; [self setAllowColorChange:NO]; [self setCanEditPeople:YES]; + people = [ [CPDictionary dictionaryWithObjectsAndKeys:@"tom", @"firstname", @"jones", @"lastname", 27, @"age", 0, @"numberOfChildren"], [CPDictionary dictionaryWithObjectsAndKeys:@"dick", @"firstname", @"clark", @"lastname", 31, @"age", 4, @"numberOfChildren"], From 735b0f8593d5ef398bee8c664ab7778f722bad13 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 21:22:01 -0800 Subject: [PATCH 15/70] Revert "Test: removed test for capp_lint" This reverts commit 2bf012100a04eb67714486a1dcffd67d1c51f519. --- Tests/Manual/MultipleValueBindings/AppController.j | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Tests/Manual/MultipleValueBindings/AppController.j b/Tests/Manual/MultipleValueBindings/AppController.j index a39a346b4..bbc814a2f 100644 --- a/Tests/Manual/MultipleValueBindings/AppController.j +++ b/Tests/Manual/MultipleValueBindings/AppController.j @@ -6,8 +6,8 @@ * Copyright 2013, Cappuccino Foundation. All rights reserved. */ -@import -@import +@import +@import @import "Transformers.j" @@ -28,13 +28,12 @@ - (id)init { - if (self = super init]) + if (self = [super init]) { foo = nil; [self setNow]; [self setAllowColorChange:NO]; [self setCanEditPeople:YES]; - people = [ [CPDictionary dictionaryWithObjectsAndKeys:@"tom", @"firstname", @"jones", @"lastname", 27, @"age", 0, @"numberOfChildren"], [CPDictionary dictionaryWithObjectsAndKeys:@"dick", @"firstname", @"clark", @"lastname", 31, @"age", 4, @"numberOfChildren"], From 58f2d7117a825e2e56c6b3393ea1a9d2a41a56d9 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 3 Nov 2014 21:22:31 -0800 Subject: [PATCH 16/70] Test: removed test for capp_lint --- Tests/Tools/ToolsTest.j | 3 --- 1 file changed, 3 deletions(-) diff --git a/Tests/Tools/ToolsTest.j b/Tests/Tools/ToolsTest.j index 0b4605664..b588f25c7 100644 --- a/Tests/Tools/ToolsTest.j +++ b/Tests/Tools/ToolsTest.j @@ -38,9 +38,6 @@ function cleanup() { status = OS.system(["objj", "-I", "ToolsTestApp/Frameworks", "ToolsTestApp/AppController.j"]); [self assert:0 equals:status message:"objj failed with options -I"]; - - status = OS.system(["capp_lint", "ToolsTestApp/AppController.j"]); - [self assert:0 equals:status message:"capp lint failed"]; } - (void)tearDown From ad82b0064a240232d8e9834e1703776de6edd286 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 4 Nov 2014 13:23:54 -0800 Subject: [PATCH 17/70] Fixed: added options -m for objj. This option allows you to make objj on several files --- Objective-J/CommonJS/lib/objective-j.js | 27 ++++++++++++------- Objective-J/CommonJS/objj-executable | 2 +- Tests/Tools/ToolsTest.j | 2 +- .../XcodeCapp/ProcessSourceOperation.m | 19 +++++++------ 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 883e34e7f..1bce5a864 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -68,6 +68,8 @@ with (window) // runs the objj repl or file provided in args exports.run = function(args) { + var multipleFiles = false; + if (args) { // we expect args to be in the format: @@ -91,13 +93,24 @@ exports.run = function(args) print(" -v, --version print the current version of objj"); print(" -I, --objj-include-paths include a specific framework paths") print(" -h, --help print this help"); + print(" -m, --multifiles launch objj on several files") return; } - while (argv.length && argv[0] == "-I" || argv[0] == "--objj-include-paths") + while (argv.length && argv[0].indexOf('-') === 0) { - argv.shift(); - OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().split(":")); + switch (argv[0]) + { + case "-I": + argv.shift(); + OBJJ_INCLUDE_PATHS.unshift.apply(OBJJ_INCLUDE_PATHS, argv.shift().split(":")); + break; + + case "-m": + argv.shift(); + multipleFiles = true; + break + } } } @@ -112,12 +125,6 @@ exports.run = function(args) exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); - if (argv[0] == "--") - { - endCommand = true; - argv.shift(); - } - if (typeof main === "function") { main([arg0].concat(argv)); @@ -126,7 +133,7 @@ exports.run = function(args) require("browser/timeout").serviceTimeouts(); - if (endCommand) + if (!multipleFiles || endCommand) break; ObjectiveJ.Executable.resetCachedFileExecutableSearchers(); diff --git a/Objective-J/CommonJS/objj-executable b/Objective-J/CommonJS/objj-executable index 9f2f05a02..919302c11 100755 --- a/Objective-J/CommonJS/objj-executable +++ b/Objective-J/CommonJS/objj-executable @@ -3,5 +3,5 @@ var execPath = require("file").path(module.path); var mainPath = execPath.dirname().dirname().join("lib", execPath.basename(), "main.j"); -var args = ["objj", String(mainPath), "--"].concat(system.args.slice(1)); +var args = ["objj", String(mainPath)].concat(system.args.slice(1)); require("objective-j").run(args); diff --git a/Tests/Tools/ToolsTest.j b/Tests/Tools/ToolsTest.j index b588f25c7..000a05aa8 100644 --- a/Tests/Tools/ToolsTest.j +++ b/Tests/Tools/ToolsTest.j @@ -33,7 +33,7 @@ function cleanup() { status = OS.system(["objj", "ToolsTestApp/AppController.j"]); [self assert:0 equals:status message:"objj failed"]; - status = OS.system(["objj", "ToolsTestApp/AppController.j", "ToolsTestApp/AppController.j"]); + status = OS.system(["objj", "-m", "ToolsTestApp/AppController.j", "ToolsTestApp/AppController.j"]); [self assert:0 equals:status message:"objj failed with several files"]; status = OS.system(["objj", "-I", "ToolsTestApp/Frameworks", "ToolsTestApp/AppController.j"]); diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 8d95e03a8..7872f8887 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -44,7 +44,7 @@ return; NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - + NSDictionary *info = @{ @"projectId":self.projectId, @"path":self.sourcePath }; [center postNotificationName:XCCConversionDidStartNotification object:self userInfo:info]; @@ -72,7 +72,6 @@ launchPath = self.xcc.executablePaths[@"objj"]; arguments = @[ self.xcc.parserPath, - @"--", self.projectPath, self.sourcePath ]; @@ -85,21 +84,21 @@ return; [self.xcc performSelectorOnMainThread:@selector(computeIgnoredPaths) withObject:nil waitUntilDone:NO]; - + notificationTitle = @"Parsed .xcodecapp-ignore"; notificationMessage = @"Ignored paths updated"; } // Run the task and get the response if needed NSInteger status = 0; - + if (arguments) { if (self.isCancelled) return; DDLogVerbose(@"Running processing task: %@", launchPath); - + NSDictionary *taskResult = [self.xcc runTaskWithLaunchPath:launchPath arguments:arguments returnType:kTaskReturnTypeAny]; @@ -121,7 +120,7 @@ notificationTitle = @"Error converting xib"; NSString *message = [NSString stringWithFormat:@"%@\n%@", self.sourcePath.lastPathComponent, response]; - + NSDictionary *info = @{ @"projectId":self.projectId, @@ -132,7 +131,7 @@ if (self.isCancelled) return; - + [center postNotificationName:XCCConversionDidGenerateErrorNotification object:self userInfo:info]; } else @@ -153,14 +152,14 @@ [self postErrorNotificationForPath:self.sourcePath line:0 message:response status:status]; } } - + if ([self.xcc shouldShowErrorNotification]) [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } else if (!self.xcc.isLoadingProject) { BOOL showFinalNotification = YES; - + if ([self.xcc shouldProcessWithCappLint]) { showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]]; @@ -168,7 +167,7 @@ if (!showFinalNotification) [self.xcc showCappLintErrors]; } - + if (showFinalNotification) [self notifyUserWithTitle:notificationTitle message:notificationMessage]; } From f486c02b5e99c2929e957e6e8548399a375e6f7e Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Nov 2014 10:55:19 -0800 Subject: [PATCH 18/70] FIXED: Some APIs in CPComboBox were broken Previously, when setting font, alignement, intercellSpacing or itemHeight, CPComboBox was assuming the listDelegate was already created. This patch stores the values in CPComboBox if the listDelegate is not ready, and apply them once it is. --- AppKit/CPComboBox.j | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 6b783b426..293d13ad2 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -71,6 +71,8 @@ var CPComboBoxTextSubview = @"text", BOOL _forceSelection; BOOL _hasVerticalScroller; CPString _selectedStringValue; + CGSize _intercellSpacing; + float _itemHeight; BOOL _popUpButtonCausedResign; } @@ -140,7 +142,9 @@ var CPComboBoxTextSubview = @"text", return; _hasVerticalScroller = flag; - [[_listDelegate scrollView] setHasVerticalScroller:flag]; + + if (_listDelegate) + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; } - (CGSize)intercellSpacing @@ -150,7 +154,13 @@ var CPComboBoxTextSubview = @"text", - (void)setIntercellSpacing:(CGSize)aSize { - [[_listDelegate tableView] setIntercellSpacing:aSize]; + if (_intercellSpacing && CGSizeEqualToSize(aSize, _intercellSpacing)) + return; + + _intercellSpacing = aSize; + + if (_listDelegate) + [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; } - (BOOL)isButtonBordered @@ -173,10 +183,18 @@ var CPComboBoxTextSubview = @"text", - (void)setItemHeight:(float)itemHeight { - [[_listDelegate tableView] setRowHeight:itemHeight]; + if (itemHeight === _itemHeight) + return; - // FIXME: This shouldn't be necessary, but CPTableView does not tile after setRowHeight - [[_listDelegate tableView] reloadData]; + _itemHeight = itemHeight; + + if (_listDelegate) + { + [[_listDelegate tableView] setRowHeight:_itemHeight]; + + // FIXME: This shouldn't be necessary, but CPTableView does not tile after setRowHeight + [[_listDelegate tableView] reloadData]; + } } - (int)numberOfVisibleItems @@ -493,8 +511,16 @@ var CPComboBoxTextSubview = @"text", - (void)popUpList { if (!_listDelegate) + { [self setListDelegate:[[_CPPopUpList alloc] initWithDataSource:self]]; + [_listDelegate setFont:[self font]]; + [_listDelegate setAlignment:[self alignment]]; + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; + [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; + [[_listDelegate tableView] setRowHeight:_itemHeight]; + } + [self _selectMatchingItem]; // Note the offset here is 1 less than the focus ring width because the outer edge @@ -842,13 +868,17 @@ var CPComboBoxTextSubview = @"text", - (void)setFont:(CPFont)aFont { [super setFont:aFont]; - [_listDelegate setFont:aFont]; + + if (_listDelegate) + [_listDelegate setFont:aFont]; } - (void)setAlignment:(CPTextAlignment)alignment { [super setAlignment:alignment]; - [_listDelegate setAlignment:alignment]; + + if (_listDelegate) + [_listDelegate setAlignment:alignment]; } #pragma mark Pop Up Button Layout From d629f4b501b604687658dd11647c174c1350f467 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Nov 2014 11:11:03 -0800 Subject: [PATCH 19/70] STYLE: Make previous patch cleaner --- AppKit/CPComboBox.j | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 293d13ad2..b8a4481b8 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -469,6 +469,9 @@ var CPComboBoxTextSubview = @"text", // Apply our text style to the list [_listDelegate setFont:[self font]]; [_listDelegate setAlignment:[self alignment]]; + [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; + [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; + [[_listDelegate tableView] setRowHeight:_itemHeight]; } - (int)indexOfItemWithObjectValue:(id)anObject @@ -511,16 +514,8 @@ var CPComboBoxTextSubview = @"text", - (void)popUpList { if (!_listDelegate) - { [self setListDelegate:[[_CPPopUpList alloc] initWithDataSource:self]]; - [_listDelegate setFont:[self font]]; - [_listDelegate setAlignment:[self alignment]]; - [[_listDelegate scrollView] setHasVerticalScroller:_hasVerticalScroller]; - [[_listDelegate tableView] setIntercellSpacing:_intercellSpacing]; - [[_listDelegate tableView] setRowHeight:_itemHeight]; - } - [self _selectMatchingItem]; // Note the offset here is 1 less than the focus ring width because the outer edge From 97a65059e595b07a65819c44974690ca516e9bc6 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 11:12:17 -0800 Subject: [PATCH 20/70] Fixed: when using the option -m, objj doesn't process every files in a error is raised, now it does --- Objective-J/CommonJS/lib/objective-j.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js index 1bce5a864..9dbf5ebd9 100644 --- a/Objective-J/CommonJS/lib/objective-j.js +++ b/Objective-J/CommonJS/lib/objective-j.js @@ -123,7 +123,23 @@ exports.run = function(args) var arg0 = argv.shift(); var mainFilePath = FILE.canonical(arg0); - exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + if (multipleFiles) + { + // This is needed to process every files passed in args + // Otherwise it would stop when an error is raised or we would like to objj the other given files + try + { + exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + } + catch(e) + { + print("\n" + e); + } + } + else + { + exports.make_narwhal_factory(mainFilePath)(require, { }, module, system, print); + } if (typeof main === "function") { From 459374db1cf426d82ba22919382645d201bd9c0f Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Nov 2014 11:35:14 -0800 Subject: [PATCH 21/70] FIXED: Open the popup list as a child window in CPComboBox --- AppKit/_CPPopUpList.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopUpList.j b/AppKit/_CPPopUpList.j index f69f68f0a..2604f3652 100644 --- a/AppKit/_CPPopUpList.j +++ b/AppKit/_CPPopUpList.j @@ -229,7 +229,7 @@ var ListColumnIdentifier = @"1"; [self listWillPopUp]; - [_panel orderFront:nil]; + [[aView window] addChildWindow:_panel ordered:CPWindowAbove]; } #pragma mark Setting Display Attributes From b827b7ffce7b1e3ffe44e4409926703d5ec1daa7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 12:57:03 -0800 Subject: [PATCH 22/70] New: xCodeCapp 3.2, command objj on each processing files or on the entire project This pull requests adds a nice feature to xCodeCapp, now each time a fill is processing, xCodeCapp will launch the command objj to check the compilation issues. If it finds something, it will show them up on the classic error panel. This basically show import warnings, warnings you don't catch with your browser but only during the build of the application. Objj is only launched if no errors was found after the first parsing (the parser which translate a file to objective-c). This feature can be disabled on the preferences panel. The menu has a new menu item "Check Compilation Issues". This action will launch objj on each files of the project and shows warnings and errors found. The command objj will take automatically the OBJJ_INCLUDE_PATH in the index.html or index-debug.html. This options can be disabled in the preferences panel as well. This PR only works with the PR #2248 --- Tools/XcodeCapp/XcodeCapp/AppController.m | 32 +- Tools/XcodeCapp/XcodeCapp/Info.plist | 4 +- .../XcodeCapp/ProcessSourceOperation.m | 25 +- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 3 + Tools/XcodeCapp/XcodeCapp/UserDefaults.m | 4 +- Tools/XcodeCapp/XcodeCapp/XcodeCapp.h | 7 +- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 269 +++++- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 779 +++++++++++++++--- 8 files changed, 977 insertions(+), 146 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index 86aa8c3d7..e72307bd3 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -138,21 +138,23 @@ AppController *SharedAppControllerInstance = nil; - (void)registerDefaultPreferences { NSDictionary *appDefaults = @{ - kDefaultLastEventId: [NSNumber numberWithUnsignedLongLong:kFSEventStreamEventIdSinceNow], - kDefaultFirstLaunch: @YES, - kDefaultFirstLaunchVersion: @2.0, - kDefaultXCCAPIMode: [NSNumber numberWithInt:kXCCAPIModeAuto], - kDefaultXCCReactToInodeMod: @YES, - kDefaultXCCReopenLastProject: @YES, - kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, - kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, - kDefaultXCCAutoShowNotificationOnErrors: @YES, - kDefaultXCCAutoShowNotificationOnCappLint: @YES, - kDefaultXCCProjectHistory: [NSArray new], - kDefaultMaxRecentProjects: @20, - kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], - kDefaultAutoOpenXcodeProject: @YES, - kDefaultUseSymlinkWhenCreatingProject: @YES + kDefaultLastEventId: [NSNumber numberWithUnsignedLongLong:kFSEventStreamEventIdSinceNow], + kDefaultFirstLaunch: @YES, + kDefaultFirstLaunchVersion: @2.0, + kDefaultXCCAPIMode: [NSNumber numberWithInt:kXCCAPIModeAuto], + kDefaultXCCReactToInodeMod: @YES, + kDefaultXCCReopenLastProject: @YES, + kDefaultXCCAutoOpenErrorsPanelOnErrors: @YES, + kDefaultXCCAutoOpenErrorsPanelOnCappLint: @YES, + kDefaultXCCAutoShowNotificationOnErrors: @YES, + kDefaultXCCAutoShowNotificationOnCappLint: @YES, + kDefaultXCCProjectHistory: [NSArray new], + kDefaultMaxRecentProjects: @20, + kDefaultLogLevel: [NSNumber numberWithInt:LOG_LEVEL_WARN], + kDefaultAutoOpenXcodeProject: @YES, + kDefaultUseSymlinkWhenCreatingProject: @YES, + kDefaultXCCUseDebugFrameworkWithObjj: @YES, + kDefaultXCCShouldProcessObjj: @YES }; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; diff --git a/Tools/XcodeCapp/XcodeCapp/Info.plist b/Tools/XcodeCapp/XcodeCapp/Info.plist index 7f59ef93d..ddb9c5a21 100644 --- a/Tools/XcodeCapp/XcodeCapp/Info.plist +++ b/Tools/XcodeCapp/XcodeCapp/Info.plist @@ -21,11 +21,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.1 + 3.2 CFBundleSignature ???? CFBundleVersion - 3.1 + 3.2 LSApplicationCategoryType public.app-category.developer-tools LSUIElement diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 81e9b7cf6..51786d82a 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -45,7 +45,7 @@ NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - NSDictionary *info = @{ @"projectId":self.projectId, @"path":self.sourcePath }; + NSDictionary *info = @{ @"projectId":self.projectId, @"path":self.sourcePath}; [center postNotificationName:XCCConversionDidStartNotification object:self userInfo:info]; DDLogVerbose(@"Conversion started: %@", self.sourcePath); @@ -74,7 +74,7 @@ self.xcc.parserPath, self.projectPath, self.sourcePath - ]; + ]; notificationTitle = @"Objective-J source processed"; } @@ -141,7 +141,7 @@ @try { NSArray *errors = [response propertyList]; - + for (NSDictionary *error in errors) { [self postErrorNotificationForPath:error[@"path"] line:[error[@"line"] intValue] message:error[@"message"] status:status]; @@ -158,14 +158,23 @@ } else if (!self.xcc.isLoadingProject) { - BOOL showFinalNotification = YES; + BOOL showFinalNotification = NO; + + // At this point, we should only detect warnings + if ([self.xcc shouldProcessWithObjjWarnings]) + { + showFinalNotification = [self.xcc checkObjjWarningsForPath:[NSArray arrayWithObject:self.sourcePath]]; + [self.xcc showObjjWarnings]; + } + else + { + showFinalNotification = YES; + } if ([self.xcc shouldProcessWithCappLint]) { - showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]]; - - if (!showFinalNotification) - [self.xcc showCappLintErrors]; + showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]] && showFinalNotification; + [self.xcc showCappLintWarnings]; } if (showFinalNotification) diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index a89476cd0..903fd7b6c 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -19,8 +19,11 @@ extern NSString * const kDefaultXCCReactToInodeMod; extern NSString * const kDefaultXCCReopenLastProject; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint; +extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnObjjWarnings; extern NSString * const kDefaultXCCAutoShowNotificationOnErrors; extern NSString * const kDefaultXCCAutoShowNotificationOnCappLint; +extern NSString * const kDefaultXCCUseDebugFrameworkWithObjj; +extern NSString * const kDefaultXCCShouldProcessObjj; extern NSString * const kDefaultXCCProjectHistory; extern NSString * const kDefaultLastOpenedPath; extern NSString * const kDefaultPathModificationDates; diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index aee5793ae..18e976581 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -19,6 +19,8 @@ NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors = @"XCCAutoOpenErrorsPan NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint = @"XCCAutoOpenErrorsPanelOnCappLint"; NSString * const kDefaultXCCAutoShowNotificationOnErrors = @"XCCAutoOpenShowNotificationErrors"; NSString * const kDefaultXCCAutoShowNotificationOnCappLint = @"XCCAutoShowNotificationOnCappLint"; +NSString * const kDefaultXCCUseDebugFrameworkWithObjj = @"XCCUseDebugFrameworkWithObjj"; +NSString * const kDefaultXCCShouldProcessObjj = @"XCCShouldProcessObjj"; NSString * const kDefaultXCCProjectHistory = @"XCCProjectHistory"; NSString * const kDefaultLastOpenedPath = @"LastOpenedPath"; NSString * const kDefaultPathModificationDates = @"pathModificationDates"; @@ -26,4 +28,4 @@ NSString * const kDefaultMaxRecentProjects = @"maxRecentProjects"; NSString * const kDefaultLogLevel = @"logLevel"; NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; -NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; +NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h index 09f9ae64f..ef7b756c5 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.h @@ -156,9 +156,14 @@ extern NSString * const XCCCappLintDidEndNotification; - (NSDictionary*)createProject:(NSString*)aPath; +- (void)showCappLintWarnings; +- (void)showObjjWarnings; + - (BOOL)shouldProcessWithCappLint; - (BOOL)checkCappLintForPath:(NSArray*)paths; -- (void)showCappLintErrors; + +- (BOOL)shouldProcessWithObjjWarnings; +- (BOOL)checkObjjWarningsForPath:(NSArray*)paths; - (void)updateCappuccino; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 36ebc6c63..52f3920f6 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -76,6 +76,8 @@ static NSArray *XCCDefaultIgnoredPathPredicates = nil; NSString * const XCCCappLintDidStartNotification = @"XCCCappLintDidStartNotification"; NSString * const XCCCappLintDidEndNotification = @"XCCCappLintDidEndNotification"; +NSString * const XCCObjjDidStartNotification = @"XCCObjjDidStartNotification"; +NSString * const XCCObjjDidEndNotification = @"XCCObjjDidEndNotification"; @interface XcodeCapp () @@ -1694,6 +1696,13 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]; } +- (BOOL)shouldProcessWithObjjWarnings +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + return ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] || [defaults boolForKey:kDefaultXCCAutoShowNotificationOnErrors]) && [defaults boolForKey:kDefaultXCCShouldProcessObjj]; +} + - (void)showErrors { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -1704,41 +1713,96 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, } } -- (void)showCappLintErrors +- (void)showCappLintWarnings { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] && self.errorList.count) + NSUInteger numberError = [self.errorList count]; + NSDictionary *firstError; + NSUInteger i = 0; + + for (i = 0; i < numberError; i++) + { + NSDictionary *dict = [self.errorList objectAtIndex:i]; + + if ([[dict valueForKey:@"type"] isEqualToString: @"capp_lint"]) + { + firstError = dict; + break; + } + } + + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnCappLint] && firstError) [self openErrorsPanel:self]; - if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint]) + if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnCappLint] && firstError) { - NSUInteger numberError = [self.errorList count]; + NSDictionary *error = [self.errorList objectAtIndex:0]; + NSString *filename = [error objectForKey:@"path"]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:self.projectId] , @"projectId", + @"Code Style Issues", @"title", + filename.lastPathComponent , @"message", + nil]; + + [self wantUserNotificationWithInfo:dict]; + } +} + +- (void)showObjjWarnings +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + NSUInteger numberError = [self.errorList count]; + NSDictionary *firstError; + NSUInteger i = 0; + + for (i = 0; i < numberError; i++) + { + NSDictionary *dict = [self.errorList objectAtIndex:i]; - if (numberError) + if ([[dict valueForKey:@"type"] isEqualToString: @"objj"]) { - NSDictionary *error = [self.errorList objectAtIndex:0]; - NSString *filename = [error objectForKey:@"path"]; - - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:self.projectId] , @"projectId", - @"Code Style Issues", @"title", - filename.lastPathComponent , @"message", - nil]; - - [self wantUserNotificationWithInfo:dict]; + firstError = dict; + break; } } + + if ([defaults boolForKey:kDefaultXCCAutoOpenErrorsPanelOnErrors] && firstError) + [self openErrorsPanel:self]; + + if ([defaults boolForKey:kDefaultXCCAutoShowNotificationOnErrors] && firstError) + { + NSDictionary *error = [self.errorList objectAtIndex:0]; + NSString *filename = [error objectForKey:@"path"]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:self.projectId] , @"projectId", + @"Compiling Issues", @"title", + filename.lastPathComponent , @"message", + nil]; + + [self wantUserNotificationWithInfo:dict]; + } } - (void)pruneProcessingErrorsForProjectPath:(NSString *)path +{ + [self pruneProcessingErrorsForProjectPath:path type:nil]; +} + +- (void)pruneProcessingErrorsForProjectPath:(NSString *)path type:(NSString*)type { // Remove all errors for the path being processed NSIndexSet *matchingErrors = [self.errorList indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { - return [[obj valueForKey:@"path"] isEqualToString:path]; + if (type) + return ([[obj valueForKey:@"path"] isEqualToString:path] || [[obj valueForKey:@"realPath"] isEqualToString:path]) && [[obj valueForKey:@"type"] isEqualToString:type]; + else + return [[obj valueForKey:@"path"] isEqualToString:path] || [[obj valueForKey:@"realPath"] isEqualToString:path]; }]; - + [self.errorListController removeObjectsAtArrangedObjectIndexes:matchingErrors]; } @@ -1758,6 +1822,170 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, return index != NSNotFound; } +#pragma mark - objjj check + +- (NSString*)_getObjjIncludePaths +{ + NSRegularExpression *regulareExpressionFramework = [NSRegularExpression regularExpressionWithPattern:@"OBJJ_INCLUDE_PATHS ?= ?\\[\"(.*)\"\\," options:0 error:nil]; + + NSString *indexPath; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCUseDebugFrameworkWithObjj]) + indexPath = [NSString stringWithFormat:@"%@/index-debug.html", self.projectPath]; + else + indexPath = [NSString stringWithFormat:@"%@/index.html", self.projectPath]; + + NSDictionary *taskResult = [self runTaskWithLaunchPath:@"/bin/cat" arguments:[NSMutableArray arrayWithObject:indexPath] returnType:kTaskReturnTypeAny]; + + NSString *response = taskResult[@"response"]; + + NSArray *matches = [regulareExpressionFramework matchesInString:response options:0 range:NSMakeRange(0, [response length])]; + + for (NSTextCheckingResult *match in matches) + return [response substringWithRange:[match rangeAtIndex:1]]; + + return @"Frameworks/"; +} + +- (BOOL)checkObjjWarningsForPath:(NSArray*)paths +{ + DDLogVerbose(@"Checking path %@ with objj", paths); + + NSUInteger numberOfFiles = [paths count]; + + if (!numberOfFiles) + return YES; + + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidStartNotification object:self]; + + NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"-I", [self _getObjjIncludePaths], @"-m", nil]; + [arguments addObjectsFromArray:paths]; + + NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"objj"] + arguments:arguments + returnType:kTaskReturnTypeStdOut]; + + NSInteger status = [taskResult[@"status"] intValue]; + NSString *response = taskResult[@"response"]; + + if (status == 0 && [response length] == 0) + { + [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + return YES; + } + + NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; + + NSInteger numberOfErrors = [errors count]; + NSInteger i = 0; + NSMutableArray *dicts = [NSMutableArray array]; + + // When checking of the entire project, we have to be ready to find errors + NSRegularExpression *regulareExpressionFramework = [NSRegularExpression regularExpressionWithPattern:@"([\\S\\s]*)(WARNING|ERROR) line ([0-9]*) in file\\:(.*)\\: ([\\S\\s]*)" options:0 error:nil]; + + NSString *filePath; + + if ([paths count] == 1) + filePath = [paths firstObject]; + + for (i = 0; i < numberOfErrors; i++) + { + NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; + NSString *line; + NSString *path; + NSString *messageError; + + // We have an extra new line for the first error + if (i == 0) + error = (NSMutableString*)[error substringFromIndex:1]; + + NSArray *matches = [regulareExpressionFramework matchesInString:error options:0 range:NSMakeRange(0, [error length])]; + NSInteger j = 0; + + if (![matches count]) + { + DDLogVerbose(@"Error %@ has been ignored by xCodeCapp, the error doesn't respect any pattern", error); + continue; + } + + for (NSTextCheckingResult *match in matches) + { + for (j = 0; j < [match numberOfRanges]; j++) + { + switch (j) { + case 1: + messageError = [error substringWithRange:[match rangeAtIndex:j]]; + break; + + case 3: + line = [error substringWithRange:[match rangeAtIndex:j]]; + break; + + case 4: + path = [error substringWithRange:[match rangeAtIndex:j]]; + break; + + case 5: + messageError = [NSString stringWithFormat:@"Compiling issue at line %@ of file %@:\n%@ \n%@", line, path.lastPathComponent, [error substringWithRange:[match rangeAtIndex:j]], messageError]; + break; + + default: + break; + } + } + } + + // Make sure to delete all the compilations issue form the tableView + [self pruneProcessingErrorsForProjectPath:path type:@"objj"]; + + // Path and realPath are needed, we can get error on ViewController2.j while checking ViewController.j. + // When recompiling ViewController.j, realPath is used to know which errors have to be erased form the table + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:[line intValue]], @"line", + messageError , @"message", + (filePath ? filePath:path), @"path", + @"objj", @"type", + path , @"realPath", + nil]; + + // Compiler can show several times the same errors + if (![dicts containsObject:dict] && ![self.errorList containsObject:dict]) + [dicts addObject:dict]; + + } + + [self performSelectorOnMainThread:@selector(objjCompilerDidGenerateError:) withObject:dicts waitUntilDone:YES]; + + self.isProcessing = NO; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidEndNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; + + return NO; +} + +- (IBAction)checkProjectWithObjj:(id)sender +{ + [self clearErrors:self]; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center addObserver:self selector:@selector(objjDidEndNotification:) name:XCCObjjDidEndNotification object:nil]; + + [self performSelectorInBackground:@selector(checkObjjWarningsForPath:) withObject:self.xCodeCappTargetedFiles]; +} + +- (void)objjDidEndNotification:(NSNotification*)aNotification +{ + [self showObjjWarnings]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCObjjDidEndNotification object:nil]; +} + +- (void)objjCompilerDidGenerateError:(NSArray*)errors +{ + [self.errorListController addObjects:errors]; +} + #pragma mark - capp_lint @@ -1773,7 +2001,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, - (void)cappLintDidEndNotification:(NSNotification*)aNotification { - [self showCappLintErrors]; + [self showCappLintWarnings]; [[NSNotificationCenter defaultCenter] removeObserver:self name:XCCCappLintDidEndNotification object:nil]; } @@ -1840,18 +2068,19 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSInteger positionOfSecondColon = [errorWithoutPath rangeOfString:@":"].location; line = [errorWithoutPath substringToIndex:positionOfSecondColon]; - NSString *messageError = [NSString stringWithFormat:@"Code style issue: %@ \n%@", path.lastPathComponent, errorWithoutPath]; + NSString *messageError = [NSString stringWithFormat:@"Code style issue at line %@ of file %@:\n%@", line, path.lastPathComponent, errorWithoutPath]; NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:[line intValue]], @"line", messageError , @"message", path, @"path", + @"capp_lint", @"type", nil]; [dicts addObject:dict]; } - [self performSelectorOnMainThread:@selector(cappLintConversionDidGenerateError:) withObject:dicts waitUntilDone:NO]; + [self performSelectorOnMainThread:@selector(cappLintConversionDidGenerateError:) withObject:dicts waitUntilDone:YES]; self.isProcessing = NO; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidEndNotification object:self]; diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index 3efdd46af..239798b27 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -2,13 +2,13 @@ 1060 - 13C1021 - 5056 - 1265.19 - 697.40 + 14A389 + 6250 + 1343.14 + 755.00 - 5056 - 5056 + 6250 + 6250 NSArrayController @@ -108,6 +108,14 @@ + + Check Compilation Issues + + 2147483647 + + + + Check Project Code Style @@ -235,7 +243,7 @@ - + 256 @@ -243,8 +251,6 @@ 268 {{164, 20}, {203, 143}} - - YES 68157504 @@ -254,7 +260,7 @@ YUBhcGFyYWppdGEuY29tCiAgICAKICAgIEFsZXhhbmRyZSBXaWxoZWxtCiAgICBhbGV4YW5kcmUud2ls aGVsbWZyQGdtYWlsLmNvbQoKT3JpZ2luYWwgQ29jb2EgdmVyc2lvbiBkZXZlbG9wZWQgYnk6CiAgICBB bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - .LucidaGrandeUI + YES 11 3100 @@ -281,7 +287,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 266 {{164, 171}, {221, 74}} - YES @@ -329,7 +334,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{17, 108}, {128, 128}} - YES @@ -349,11 +353,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {402, 247} - - - {{0, 0}, {1440, 878}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} NO @@ -368,7 +370,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {315, 77} - + 256 @@ -384,7 +386,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 256 {550, 201} - YES NO @@ -461,20 +462,21 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{1, 1}, {550, 201}} - 4 + YES -2147483392 {{1, 273}, {512, 16}} - NO + _doScroller: + 1 _doScroller: @@ -484,16 +486,16 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ -2147483392 {{535, 1}, {16, 45}} - NO + _doScroller: + _doScroller: {{-1, 35}, {552, 203}} - 133682 @@ -509,7 +511,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 289 {{352, 8}, {85, 19}} - {250, 750} YES @@ -518,7 +519,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 134217728 Clear - .LucidaGrandeUI + YES 12 787 @@ -538,7 +539,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 292 {{20, 8}, {85, 19}} - {250, 750} YES @@ -563,8 +563,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 289 {{445, 8}, {85, 19}} - - {250, 750} YES @@ -585,11 +583,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {550, 237} - - - {{1440, -180}, {1920, 1058}} + {{1440, -180}, {1920, 1057}} {315, 99} {10000000000000, 10000000000000} errorPanel @@ -598,7 +594,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 3 2 - {{1964, 505}, {369, 415}} + {{1964, 505}, {369, 473}} 1618478080 Preferences NSWindow @@ -629,7 +625,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 0 Load the most recent project on launch - .LucidaGrandeUI + YES 13 1044 @@ -732,7 +728,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ -2076180416 2048 - .LucidaGrandeUI + YES 13 1301 @@ -804,7 +800,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - {{17, 245}, {332, 155}} + {{17, 303}, {332, 155}} @@ -813,15 +809,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 Projects - - LucidaGrande - 11 - 16 - + - - 3 - MCAwLjgAA + + 6 + System + labelColor + @@ -841,7 +835,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{146, 12}, {171, 18}} + {{149, 12}, {171, 18}} @@ -866,7 +860,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 39}, {126, 17}} + {{16, 40}, {126, 17}} @@ -886,7 +880,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{146, 38}, {171, 18}} + {{149, 37}, {171, 18}} @@ -908,14 +902,64 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO + + + 268 + {{16, 93}, {192, 18}} + + + + YES + + -2080374784 + 0 + Look for compilation issues + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + + + + 268 + {{16, 67}, {301, 18}} + + + + YES + + -2080374784 + 0 + Use include path from the index-debug file + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + - {{1, 1}, {330, 66}} + {{1, 1}, {330, 124}} - + - {{17, 159}, {332, 82}} + {{17, 159}, {332, 140}} @@ -924,12 +968,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 File processing - + - - 3 - MCAwLjgAA - + 1 @@ -1035,10 +1076,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ Code style - - 3 - MCAwLjgwMDAwMDAxMTkAA - + 1 @@ -1095,12 +1133,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 67108864 134217728 Update - + - - 3 - MCAwLjgAA - + 1 @@ -1109,12 +1144,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {369, 415} + {369, 473} - {{1440, -180}, {1920, 1058}} + {{1440, -180}, {1920, 1057}} {10000000000000, 10000000000000} xcc-prefs YES @@ -1155,7 +1190,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - {{0, 0}, {1440, 878}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} YES @@ -1186,7 +1221,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - + 256 @@ -1194,6 +1229,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{18, 22}, {251, 17}} + _NS:397 {251, 750} @@ -1216,6 +1252,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{269, 13}, {74, 32}} + + _NS:9 YES @@ -1239,6 +1277,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 {{20, 45}, {317, 20}} + _NS:9 {250, 250} @@ -1247,10 +1286,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {357, 84} + + _NS:21 - {{0, 0}, {1440, 878}} + {{0, 0}, {1440, 877}} {10000000000000, 10000000000000} updatingCappuccinoPanel YES @@ -1258,7 +1299,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - + delegate @@ -1507,6 +1548,22 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 30N-ga-LBo + + + save: + + + + kBr-PF-Ng7 + + + + save: + + + + HyN-S0-KXD + openXcodeProject: @@ -1531,14 +1588,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 774 - - - checkProjectWithCappLint: - - - - cNV-We-Why - clearErrors: @@ -1619,6 +1668,22 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ HJ3-bt-3EP + + + checkProjectWithCappLint: + + + + bwf-Gu-ART + + + + checkProjectWithObjj: + + + + oPW-bl-Ydt + values.XCCReopenLastProject @@ -2021,6 +2086,22 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ uwx-aq-p86 + + + enabled: projectPath.length + + + + + + enabled: projectPath.length + enabled + projectPath.length + 2 + + + a7g-oH-Wxj + value: values.XCCAutoOpenShowNotificationErrors @@ -2061,6 +2142,46 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ aof-Pn-nzf + + + value: values.kDefaultXCCUseDebugFrameworkWithObjj + + + + + + value: values.kDefaultXCCUseDebugFrameworkWithObjj + value + values.kDefaultXCCUseDebugFrameworkWithObjj + + NSValidatesImmediately + + + 2 + + + 8Eb-cw-Tsj + + + + value: values.XCCShouldProcessObjj + + + + + + value: values.XCCShouldProcessObjj + value + values.XCCShouldProcessObjj + + NSValidatesImmediately + + + 2 + + + 4tf-7Y-tid + @@ -2115,6 +2236,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + @@ -2466,9 +2588,11 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 848 - + + + @@ -2699,6 +2823,37 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + + wDc-Ir-hmE + + + + + + + + beY-m1-Aia + + + + + wGK-ie-cgv + + + + + + + + fJB-o4-AhU + + + + + SNH-t4-Ay7 + + + @@ -2744,6 +2899,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + {-243.5, 329.5} com.apple.InterfaceBuilder.CocoaPlugin @@ -2757,6 +2913,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2909,6 +3066,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2958,12 +3116,18 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + ToolTip @@ -2986,6 +3150,30 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + ToolTip + + ToolTip + + When an error or warning occurs, automatically open the Errors & Warnings panel + + + + com.apple.InterfaceBuilder.CocoaPlugin + + @@ -3002,9 +3190,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ id id id - id - id - id @@ -3023,18 +3208,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ openHelp: id - - openPreferences: - id - - - showInFinder: - id - - - updateCappuccino: - id - NSPanel @@ -3092,7 +3265,53 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ IBProjectSource - ./Classes/AppController.h + ../XcodeCapp/AppController.h + + + + AppController + + id + id + id + id + id + id + id + + + + createProject: + id + + + loadProject: + id + + + openAbout: + id + + + openHelp: + id + + + openPreferences: + id + + + showInFinder: + id + + + updateCappuccino: + id + + + + IBProjectSource + ../XcodeCapp/AppController.m @@ -3168,7 +3387,373 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ IBProjectSource - ./Classes/XcodeCapp.h + ../XcodeCapp/XcodeCapp.h + + + + XcodeCapp + + id + id + id + id + id + id + id + + + + checkProjectWithCappLint: + id + + + checkProjectWithObjj: + id + + + clearErrors: + id + + + openErrorInEditor: + id + + + openErrorsPanel: + id + + + openXcodeProject: + id + + + synchronizeProject: + id + + + + IBProjectSource + ../XcodeCapp/XcodeCapp.m + + + + + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSArrayController + NSObjectController + + IBFrameworkSource + AppKit.framework/Headers/NSArrayController.h + + + + NSBox + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSBox.h + + + + NSButton + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSButton.h + + + + NSButtonCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSButtonCell.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSController + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSController.h + + + + NSFontManager + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSImageCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSImageCell.h + + + + NSImageView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSImageView.h + + + + NSManagedObjectContext + NSObject + + IBFrameworkSource + CoreData.framework/Headers/NSManagedObjectContext.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSMenuItem + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSMenuItemCell + NSButtonCell + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItemCell.h + + + + NSObjectController + NSController + + IBFrameworkSource + AppKit.framework/Headers/NSObjectController.h + + + + NSPanel + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSPanel.h + + + + NSPopUpButton + NSButton + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButton.h + + + + NSPopUpButtonCell + NSMenuItemCell + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButtonCell.h + + + + NSProgressIndicator + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSProgressIndicator.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSScrollView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSScrollView.h + + + + NSScroller + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSScroller.h + + + + NSTableColumn + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableColumn.h + + + + NSTableView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSUserDefaultsController + NSController + + IBFrameworkSource + AppKit.framework/Headers/NSUserDefaultsController.h + + + + NSView + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + PDFView + NSView + + id + id + id + id + id + id + id + id + id + id + + + + goBack: + id + + + goForward: + id + + + goToFirstPage: + id + + + goToLastPage: + id + + + goToNextPage: + id + + + goToPreviousPage: + id + + + selectAll: + id + + + takeBackgroundColorFrom: + id + + + zoomIn: + id + + + zoomOut: + id + + + + IBFrameworkSource + Quartz.framework/Frameworks/PDFKit.framework/Headers/PDFView.h @@ -3180,10 +3765,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin.macosx - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 @@ -3191,8 +3772,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ YES 3 - {11, 11} - {10, 3} + {12, 12} + {10, 2} {15, 15} {128, 128} From 02bbe0e6f570f687782a52b301c83cdaf6c765d7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 13:07:25 -0800 Subject: [PATCH 23/70] Fixed: removed unused constant --- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index 903fd7b6c..2843e57c7 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -19,7 +19,6 @@ extern NSString * const kDefaultXCCReactToInodeMod; extern NSString * const kDefaultXCCReopenLastProject; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnErrors; extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnCappLint; -extern NSString * const kDefaultXCCAutoOpenErrorsPanelOnObjjWarnings; extern NSString * const kDefaultXCCAutoShowNotificationOnErrors; extern NSString * const kDefaultXCCAutoShowNotificationOnCappLint; extern NSString * const kDefaultXCCUseDebugFrameworkWithObjj; From 491b5dcd6f0b598d432bb6b35bbf1c62568cc2c7 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 14:13:08 -0800 Subject: [PATCH 24/70] Fixed: text cursor for CPTextField class doesn't take content-inset in account Previously, the text cursor of the CPTextField didn't take in account the content-inset. This raised issue with class as the CPComboBox, when the mouse was over the popUpButton, there was still the text cursor instead of the default one. Now it works as in Cocoa. --- AppKit/CPTextField.j | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 5f11f1d6e..fc3d833d9 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -350,8 +350,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); _sendActionOn = CPKeyUpMask | CPKeyDownMask; [self setValue:CPLeftTextAlignment forThemeAttribute:@"alignment"]; - - [self _updateCursor]; } return self; @@ -373,8 +371,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); if (shouldBeEditable) _isSelectable = YES; - [self _updateCursor]; - if (_isEditable) [self setThemeState:CPThemeStateEditable]; else @@ -405,7 +401,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)setEnabled:(BOOL)shouldBeEnabled { [super setEnabled:shouldBeEnabled]; - [self _updateCursor]; // We only allow first responder status if the field is enabled. if (!shouldBeEnabled && [[self window] firstResponder] === self) @@ -419,8 +414,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)setSelectable:(BOOL)aFlag { _isSelectable = aFlag; - - [self _updateCursor]; } /*! @@ -930,6 +923,12 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self textDidChange:[CPNotification notificationWithName:CPControlTextDidChangeNotification object:self userInfo:nil]]; } +- (void)mouseMoved:(CPEvent)anEvent +{ + [super mouseMoved:anEvent]; + [self _updateCursorForEvent:anEvent]; +} + - (void)mouseDown:(CPEvent)anEvent { // Don't track! (ever?) @@ -1140,9 +1139,14 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [super textDidChange:note]; } -- (void)_updateCursor +- (void)_updateCursorForEvent:(CPEvent)anEvent { - if ([self isEnabled] && ([self isSelectable] || [self isEditable])) + var frame = CGRectMakeCopy([self frame]), + contentInset = [self currentValueForThemeAttribute:@"content-inset"]; + + frame = [[self superview] convertRectToBase:CGRectInsetByInset(frame, contentInset)]; + + if ([self isEnabled] && ([self isSelectable] || [self isEditable]) && CGRectContainsPoint(frame, [anEvent locationInWindow])) { #if PLATFORM(DOM) self._DOMElement.style.cursor = "text"; @@ -1966,8 +1970,6 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [self setAlignment:[aCoder decodeIntForKey:CPTextFieldAlignmentKey]]; [self setPlaceholderString:[aCoder decodeObjectForKey:CPTextFieldPlaceholderStringKey]]; - - [self _updateCursor]; } return self; From fc43ec818596c5410f0bc5ee362f5dc2bb027afa Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 5 Nov 2014 14:26:34 -0800 Subject: [PATCH 25/70] Fixed: wrong content-inset for CPComboBox Previously, the content-inset of a CPComboBox was wrong, the text of the controller was over the popUPButton. --- AppKit/Themes/Aristo/ThemeDescriptors.j | 4 ++-- AppKit/Themes/Aristo2/ThemeDescriptors.j | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 3cc69832c..efbbb1c23 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1820,8 +1820,8 @@ var themedButtonValues = nil, // The right border inset has to make room for the focus ring and popup button [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], - [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(8.0, 24.0, 7.0, 8.0), [CPThemeStateBezeled, CPThemeStateEditing]], + [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(8.0, 27.0, 7.0, 8.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"popup-button-size", CGSizeMake(21.0, 23.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index c669539b5..f5f11c7f5 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -1312,9 +1312,9 @@ var themedButtonValues = nil, [@"bezel-inset", CGInsetMake(3.0, 5.0, 3.0, 4.0), [CPThemeStateBezeled, CPThemeStateDisabled]], // The right border inset has to make room for the focus ring and popup button - [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], - [@"content-inset", CGInsetMake(9.0, 26.0, 7.0, 10.0), CPThemeStateBezeled], - [@"content-inset", CGInsetMake(9.0, 24.0, 7.0, 10.0), [CPThemeStateBezeled, CPThemeStateEditing]], + [@"content-inset", CGInsetMake(9.0, 30.0, 7.0, 10.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], + [@"content-inset", CGInsetMake(9.0, 30.0, 7.0, 10.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(9.0, 28.0, 7.0, 10.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"popup-button-size", CGSizeMake(21.0, 23.0), [CPThemeStateBezeled, CPComboBoxStateButtonBordered]], [@"popup-button-size", CGSizeMake(17.0, 23.0), CPThemeStateBezeled], From ea0c5e291fa8469ecd6e1a8dae6fce12c990032f Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 6 Nov 2014 09:38:30 -0800 Subject: [PATCH 26/70] Fixed: notification xib converted wasn't displayed anymore Previously, the notification xib converted didn't show up. Now it does again. This PR fixes another issue. Now when checking the the compilation issues, we only pass objj file to the command objj. --- .../XcodeCapp/ProcessSourceOperation.m | 10 +++----- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 25 +++++++++++++++---- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m index 2c4858f2b..f41ffbddf 100644 --- a/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m +++ b/Tools/XcodeCapp/XcodeCapp/ProcessSourceOperation.m @@ -158,20 +158,16 @@ } else if (!self.xcc.isLoadingProject) { - BOOL showFinalNotification = NO; + BOOL showFinalNotification = YES; // At this point, we should only detect warnings - if ([self.xcc shouldProcessWithObjjWarnings]) + if ([self.xcc shouldProcessWithObjjWarnings] && ![self.xcc isXibFile:self.sourcePath]) { showFinalNotification = [self.xcc checkObjjWarningsForPath:[NSArray arrayWithObject:self.sourcePath]]; [self.xcc showObjjWarnings]; } - else - { - showFinalNotification = YES; - } - if ([self.xcc shouldProcessWithCappLint]) + if ([self.xcc shouldProcessWithCappLint] && ![self.xcc isXibFile:self.sourcePath]) { showFinalNotification = [self.xcc checkCappLintForPath:[NSArray arrayWithObject:self.sourcePath]] && showFinalNotification; [self.xcc showCappLintWarnings]; diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index 52f3920f6..f3998a0a3 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1852,15 +1852,26 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, DDLogVerbose(@"Checking path %@ with objj", paths); NSUInteger numberOfFiles = [paths count]; + NSUInteger i = 0; + NSMutableArray *objjPaths = [NSMutableArray array]; - if (!numberOfFiles) + // We only want the objj files + for (i = 0; i < numberOfFiles; i++) + { + NSString *path = [paths objectAtIndex:i]; + + if ([self isObjjFile:path]) + [objjPaths addObject:path]; + } + + if (![objjPaths count]) return YES; [[NSNotificationCenter defaultCenter] postNotificationName:XCCBatchDidStartNotification object:self]; [[NSNotificationCenter defaultCenter] postNotificationName:XCCObjjDidStartNotification object:self]; NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"-I", [self _getObjjIncludePaths], @"-m", nil]; - [arguments addObjectsFromArray:paths]; + [arguments addObjectsFromArray:objjPaths]; NSDictionary *taskResult = [self runTaskWithLaunchPath:self.executablePaths[@"objj"] arguments:arguments @@ -1879,7 +1890,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; NSInteger numberOfErrors = [errors count]; - NSInteger i = 0; + i = 0; NSMutableArray *dicts = [NSMutableArray array]; // When checking of the entire project, we have to be ready to find errors @@ -1906,8 +1917,12 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, if (![matches count]) { - DDLogVerbose(@"Error %@ has been ignored by xCodeCapp, the error doesn't respect any pattern", error); - continue; + // This shouldn't happen + DDLogVerbose(@"Error %@ doesn't respect any pattern", error); + + path = @""; + line = 0; + messageError = [NSString stringWithFormat:@"Compiling issue at line %@ of file %@:\n%@", line, path.lastPathComponent, error]; } for (NSTextCheckingResult *match in matches) From 26223bb38344f8751b43ffa7aa1f9db14ad08184 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 6 Nov 2014 09:52:40 -0800 Subject: [PATCH 27/70] Fixed: include path doesn't take the absolute path --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index f3998a0a3..f326c2654 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1842,9 +1842,9 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSArray *matches = [regulareExpressionFramework matchesInString:response options:0 range:NSMakeRange(0, [response length])]; for (NSTextCheckingResult *match in matches) - return [response substringWithRange:[match rangeAtIndex:1]]; + return [NSString stringWithFormat:@"%@/%@", self.projectPath, [response substringWithRange:[match rangeAtIndex:1]]]; - return @"Frameworks/"; + return [NSString stringWithFormat:@"%@/%@", self.projectPath ,@"Frameworks/"]; } - (BOOL)checkObjjWarningsForPath:(NSArray*)paths From 8ee443a43c6e04391a0b04f1f315251658b03a30 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Nov 2014 10:10:05 -0800 Subject: [PATCH 28/70] NEW: @typedef and ivar type warning Previously, ObjJ was ignoring unknow ivar type. This patch adds some check to ensure the type is either a known class, the current class itself, a global, a basic JS type or a declared custom type. In order to declare custom types, this patch introduces the @typedef keyword. For instance, this will throw a warning: ```objj @import @implementation MyClass: CPObject { NUSuppaType mode; } @end ``` This will not: ```objj @import @typedef NUSuppaType @implementation NUMyClass: CPObject { NUSuppaType mode; } @end ``` Declared types are shared accross all application, one type can only be declared once. --- Objective-J/ObjJAcornCompiler.js | 82 ++++++++++++++++++++++++++++++-- Objective-J/Runtime.js | 33 +++++++++++++ Objective-J/acorn.js | 78 +++++++++++++++++++----------- Objective-J/acornwalk.js | 2 + 4 files changed, 161 insertions(+), 34 deletions(-) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index 08b231ebe..fd6f020d3 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -353,6 +353,11 @@ ProtocolDef.prototype.getClassMethod = function(name) { return null; } +var TypeDef = function(name) +{ + this.name = name; +} + // methodDef = {"types": types, "name": selector} var MethodDef = function(name, types) { @@ -369,7 +374,7 @@ var wordPrefixOperators = exports.acorn.makePredicate("delete in instanceof new var isLogicalBinary = exports.acorn.makePredicate("LogicalExpression BinaryExpression"); var isInInstanceof = exports.acorn.makePredicate("in instanceof"); -var ObjJAcornCompiler = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags, /*unsigned*/ pass, /* Dictionary */ classDefs, /* Dictionary */ protocolDefs) +var ObjJAcornCompiler = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags, /*unsigned*/ pass, /* Dictionary */ classDefs, /* Dictionary */ protocolDefs, /* Dictionary */ typeDefs) { this.source = aString; this.URL = new CFURL(aURL); @@ -399,6 +404,7 @@ var ObjJAcornCompiler = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned* this.flags = flags | ObjJAcornCompiler.Flags.IncludeDebugSymbols; this.classDefs = classDefs ? classDefs : Object.create(null); this.protocolDefs = protocolDefs ? protocolDefs : Object.create(null); + this.typeDefs = typeDefs ? typeDefs : Object.create(null); this.lastPos = 0; if (currentCompilerFlags & ObjJAcornCompiler.Flags.Generate) this.generate = true; @@ -415,9 +421,9 @@ exports.ObjJAcornCompiler.compileToExecutable = function(/*String*/ aString, /*C return new ObjJAcornCompiler(aString, aURL, flags, 2).executable(); } -exports.ObjJAcornCompiler.compileToIMBuffer = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags, classDefs, protocolDefs) +exports.ObjJAcornCompiler.compileToIMBuffer = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags, classDefs, protocolDefs, typeDefs) { - return new ObjJAcornCompiler(aString, aURL, flags, 2, classDefs, protocolDefs).IMBuffer(); + return new ObjJAcornCompiler(aString, aURL, flags, 2, classDefs, protocolDefs, typeDefs).IMBuffer(); } exports.ObjJAcornCompiler.compileFileDependencies = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags) @@ -581,6 +587,31 @@ ObjJAcornCompiler.prototype.getProtocolDef = function(/* String */ aProtocolName // protocolDef = {"name": protocolName, "protocols": Object.create(null), "required": Object.create(null), "optional": Object.create(null)}; } +ObjJAcornCompiler.prototype.getTypeDef = function(/* String */ aTypeDefName) +{ + if (!aTypeDefName) + return null; + + var t = this.typeDefs[aTypeDefName]; + + if (t) + return t; + + if (typeof objj_getTypeDef === 'function') + { + var aTypeDef = objj_getTypeDef(aTypeDefName); + if (aTypeDef) + { + var typeDefName = typeDef_getName(aTypeDef) + t = new TypeDef(typeDefName); + this.typeDefs[typeDefName] = t; + return t; + } + } + + return null; +} + ObjJAcornCompiler.methodDefsFromMethodList = function(/* Array */ methodList) { var methodSize = methodList.length, @@ -1715,12 +1746,19 @@ ClassDeclarationStatement: function(node, st, c) { { var ivarDecl = node.ivardeclarations[i], ivarType = ivarDecl.ivartype ? ivarDecl.ivartype.name : null, + ivarTypeIsClass = ivarDecl.ivartype ? ivarDecl.ivartype.typeisclass : false, ivarName = ivarDecl.id.name, ivar = {"type": ivarType, "name": ivarName}, accessors = ivarDecl.accessors; if (ivars[ivarName]) - throw compiler.error_message("Instance variable '" + ivarName + "'is already declared for class " + className, ivarDecl.id); + throw compiler.error_message("Instance variable '" + ivarName + "' is already declared for class " + className, ivarDecl.id); + + var isTypeDefined = !ivarTypeIsClass || typeof global[ivarType] !== "undefined" || typeof window[ivarType] !== "undefined" + || compiler.getClassDef(ivarType) || compiler.getTypeDef(ivarType) || ivarType == classDef.name; + + if (!isTypeDefined) + compiler.addWarning(createMessage("Unknown type '" + ivarType + "' for ivar '" + ivarName + "'", ivarDecl.id, compiler.source)); if (firstIvarDeclaration) { @@ -1824,7 +1862,7 @@ ClassDeclarationStatement: function(node, st, c) { // Remove all @accessors or we will get a recursive loop in infinity var b = getterSetterBuffer.toString().replace(/@accessors(\(.*\))?/g, ""); - var imBuffer = ObjJAcornCompiler.compileToIMBuffer(b, "Accessors", compiler.flags, compiler.classDefs, compiler.protocolDefs); + var imBuffer = ObjJAcornCompiler.compileToIMBuffer(b, "Accessors", compiler.flags, compiler.classDefs, compiler.protocolDefs, compiler.typeDefs); // Add the accessors methods first to instance method buffer. // This will allow manually added set and get methods to override the compiler generated @@ -2393,5 +2431,39 @@ PreprocessStatement: function(node, st, c) { compiler.lastPos = node.start; compiler.jsBuffer.concat("//"); } +}, +TypeDefStatement: function(node, st, c) { + + var compiler = st.compiler, + generate = compiler.generate, + buffer = compiler.jsBuffer, + typeDefName = node.typedefname.name, + typeDef = compiler.getTypeDef(typeDefName), + typeDefScope = new Scope(st); + + if (typeDef) + throw compiler.error_message("Duplicate type definition " + typeDefName, node.typedefname); + + compiler.imBuffer = new StringBuffer(); + compiler.cmBuffer = new StringBuffer(); + + if (!generate) + buffer.concat(compiler.source.substring(compiler.lastPos, node.start)); + + buffer.concat("{var the_typedef = objj_allocateTypeDef(\"" + typeDefName + "\");"); + + typeDef = new TypeDef(typeDefName); + compiler.typeDefs[typeDefName] = typeDef; + typeDefScope.typeDef = typeDef; + + buffer.concat("\nobjj_registerTypeDef(the_typedef);\n"); + + buffer.concat("}"); + + compiler.jsBuffer = buffer; + + // Skip the "@end" + if (!generate) + compiler.lastPos = node.end; } }); diff --git a/Objective-J/Runtime.js b/Objective-J/Runtime.js index 75a43bf78..e352cf3e1 100644 --- a/Objective-J/Runtime.js +++ b/Objective-J/Runtime.js @@ -100,6 +100,11 @@ GLOBAL(objj_object) = function() this._UID = -1; } +GLOBAL(objj_typeDef) = function(/*String*/ aName) +{ + this.name = aName; +} + // Working with Classes GLOBAL(class_getName) = function(/*Class*/ aClass) @@ -440,6 +445,26 @@ GLOBAL(protocol_addProtocol) = function(/*Protocol*/ proto, /*Protocol*/ additio (proto.protocol_list || (proto.protocol_list = [])).push(addition); } + +var REGISTERED_TYPEDEFS = Object.create(null); + +GLOBAL(objj_allocateTypeDef) = function(/*String*/ aName) +{ + var typeDef = new objj_typeDef(aName); + + return typeDef; +} + +GLOBAL(objj_registerTypeDef) = function(/*TypeDef*/ typeDef) +{ + REGISTERED_TYPEDEFS[typeDef.name] = typeDef; +} + +GLOBAL(typeDef_getName) = function(/*TypeDef*/ typeDef) +{ + return typeDef.name; +} + var _class_initialize = function(/*Class*/ aClass) { var meta = GETMETA(aClass); @@ -619,6 +644,7 @@ GLOBAL(objj_resetRegisterClasses) = function() REGISTERED_CLASSES = Object.create(null); REGISTERED_PROTOCOLS = Object.create(null); + REGISTERED_TYPEDEFS = Object.create(null); resetBundle(); } @@ -751,6 +777,13 @@ GLOBAL(objj_getProtocol) = function(/*String*/ aName) return REGISTERED_PROTOCOLS[aName]; } +// Working with typeDef + +GLOBAL(objj_getTypeDef) = function(/*String*/ aName) +{ + return REGISTERED_TYPEDEFS[aName]; +} + // Working with Instance Variables GLOBAL(ivar_getName) = function(anIvar) diff --git a/Objective-J/acorn.js b/Objective-J/acorn.js index f12994057..594111ee0 100644 --- a/Objective-J/acorn.js +++ b/Objective-J/acorn.js @@ -375,12 +375,15 @@ if (typeof exports != "undefined" && !exports.acorn) { var _ref = {keyword: "ref"}, _deref = {keyword: "deref"}; var _protocol = {keyword: "protocol"}, _optional = {keyword: "optional"}, _required = {keyword: "required"}; var _interface = {keyword: "interface"}; + var _typedef = {keyword: "typedef"}; // Objective-J keywords var _filename = {keyword: "filename"}, _unsigned = {keyword: "unsigned", okAsIdent: true}, _signed = {keyword: "signed", okAsIdent: true}; var _byte = {keyword: "byte", okAsIdent: true}, _char = {keyword: "char", okAsIdent: true}, _short = {keyword: "short", okAsIdent: true}; var _int = {keyword: "int", okAsIdent: true}, _long = {keyword: "long", okAsIdent: true}, _id = {keyword: "id", okAsIdent: true}; + var _boolean = {keyword: "BOOL", okAsIdent: true}, _SEL = {keyword: "SEL", okAsIdent: true}, _float = {keyword: "float", okAsIdent: true}; + var _double = {keyword: "double", okAsIdent: true}; var _preprocess = {keyword: "#"}; // Preprocessor keywords @@ -415,14 +418,15 @@ if (typeof exports != "undefined" && !exports.acorn) { // Map Objective-J keyword names to token types. var keywordTypesObjJ = {"IBAction": _action, "IBOutlet": _outlet, "unsigned": _unsigned, "signed": _signed, "byte": _byte, "char": _char, - "short": _short, "int": _int, "long": _long, "id": _id }; + "short": _short, "int": _int, "long": _long, "id": _id, "float": _float, "BOOL": _boolean, "SEL": _SEL, + "double": _double}; // Map Objective-J "@" keyword names to token types. var objJAtKeywordTypes = {"implementation": _implementation, "outlet": _outlet, "accessors": _accessors, "end": _end, "import": _import, "action": _action, "selector": _selector, "class": _class, "global": _global, "ref": _ref, "deref": _deref, "protocol": _protocol, "optional": _optional, "required": _required, - "interface": _interface}; + "interface": _interface, "typedef": _typedef}; // Map Preprocessor keyword names to token types. @@ -547,7 +551,7 @@ if (typeof exports != "undefined" && !exports.acorn) { // The Objective-J keywords. - var isKeywordObjJ = makePredicate("IBAction IBOutlet byte char short int long unsigned signed id"); + var isKeywordObjJ = makePredicate("IBAction IBOutlet byte char short int long float unsigned signed id BOOL SEL double"); // The preprocessor keywords. @@ -662,6 +666,7 @@ var preprocessTokens = [_preIf, _preIfdef, _preIfndef, _preElse, _preElseIf, _pr } } } + tokVal = val; lastTokCommentsAfter = tokCommentsAfter; lastTokSpacesAfter = tokSpacesAfter; @@ -2277,6 +2282,15 @@ var preIfLevel = 0; } break; + // This is a Objective-J statement + case _typedef: + if (options.objj) { + next(); + node.typedefname = parseIdent(true); + return finishNode(node, "TypeDefStatement"); + } + break; + } // The indentation is one step to the right here to make sure it @@ -2317,6 +2331,7 @@ var preIfLevel = 0; if (outlet) decl.outlet = outlet; decl.ivartype = type; + // print("keyword: " + type.name + " is class " + type.typeisclass) decl.id = parseIdent(); if (strict && isStrictBadIdWord(decl.id.name)) raise(decl.id.start, "Binding " + decl.id.name + " in strict mode"); @@ -3021,6 +3036,7 @@ var preIfLevel = 0; node.typeisclass = true; next(); } else { + node.typeisclass = false; node.name = tokType.keyword; // Do nothing more if it is 'void' if (!eat(_void)) { @@ -3043,32 +3059,36 @@ var preIfLevel = 0; } else { // Now check if it is some basic type or an approved combination of basic types var nextKeyWord; - if (eat(_signed) || eat(_unsigned)) - nextKeyWord = tokType.keyword || true; - if (eat(_char) || eat(_byte) || eat(_short)) { - if (nextKeyWord) - node.name += " " + nextKeyWord; - nextKeyWord = tokType.keyword || true; - } else { - if (eat(_int)) { - if (nextKeyWord) - node.name += " " + nextKeyWord; - nextKeyWord = tokType.keyword || true; - } - if (eat(_long)) { - if (nextKeyWord) - node.name += " " + nextKeyWord; - nextKeyWord = tokType.keyword || true; - if (eat(_long)) { - node.name += " " + nextKeyWord; - } - } - } - if (!nextKeyWord) { - // It must be a class name if it was not a basic type. // FIXME: This is not true - node.name = (!options.forbidReserved && tokType.keyword) || unexpected(); - node.typeisclass = true; - next(); + if (eat(_float) || eat(_boolean) || eat(_SEL) || eat(_double)) + nextKeyWord = tokType.keyword; + else { + if (eat(_signed) || eat(_unsigned)) + nextKeyWord = tokType.keyword || true; + if (eat(_char) || eat(_byte) || eat(_short)) { + if (nextKeyWord) + node.name += " " + nextKeyWord; + nextKeyWord = tokType.keyword || true; + } else { + if (eat(_int)) { + if (nextKeyWord) + node.name += " " + nextKeyWord; + nextKeyWord = tokType.keyword || true; + } + if (eat(_long)) { + if (nextKeyWord) + node.name += " " + nextKeyWord; + nextKeyWord = tokType.keyword || true; + if (eat(_long)) { + node.name += " " + nextKeyWord; + } + } + } + if (!nextKeyWord) { + // It must be a class name if it was not a basic type. // FIXME: This is not true + node.name = (!options.forbidReserved && tokType.keyword) || unexpected(); + node.typeisclass = true; + next(); + } } } } diff --git a/Objective-J/acornwalk.js b/Objective-J/acornwalk.js index 87753e3f4..8d5666529 100644 --- a/Objective-J/acornwalk.js +++ b/Objective-J/acornwalk.js @@ -221,6 +221,8 @@ if (!exports.acorn) { } } + exports.TypeDefStatement = ignore; + exports.MethodDeclarationStatement = function(node, st, c) { var body = node.body; if (body) From f9275a70afe88236fb6cbe8c90c749ccdf8bb02b Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Nov 2014 10:17:05 -0800 Subject: [PATCH 29/70] FIXED: New warnings reveleaded by ivar type checking This patch fixes all new warnings --- AppKit/CPAlert.j | 97 +++--- AppKit/CPAnimation.j | 17 +- AppKit/CPApplication.j | 2 + AppKit/CPArrayController.j | 2 +- AppKit/CPBox.j | 3 + AppKit/CPButton.j | 4 +- AppKit/CPCollectionView.j | 1 + AppKit/CPColorPanel.j | 3 + AppKit/CPColorPicker.j | 2 + AppKit/CPComboBox.j | 2 +- AppKit/CPControl.j | 6 + AppKit/CPDatePicker/_CPDatePickerCalendar.j | 2 + AppKit/CPDatePicker/_CPDatePickerTextField.j | 6 +- AppKit/CPDragServer_Constants.j | 1 + AppKit/CPEvent.j | 5 + AppKit/CPImageView.j | 1 + AppKit/CPKeyValueBinding.j | 1 + AppKit/CPLevelIndicator.j | 2 + AppKit/CPMenu/_CPMenuBarWindow.j | 1 + AppKit/CPMenu/_CPMenuWindow.j | 2 + AppKit/CPMenuItem/_CPMenuItemMenuBarView.j | 1 + AppKit/CPMenuItem/_CPMenuItemStandardView.j | 3 + AppKit/CPMenuItem/_CPMenuItemView.j | 1 + AppKit/CPPasteboard.j | 3 +- AppKit/CPProgressIndicator.j | 1 + AppKit/CPRadio.j | 2 + AppKit/CPResponder.j | 1 + AppKit/CPRuleEditor/CPRuleEditor_Constants.j | 2 + AppKit/CPRuleEditor/_CPPredicateEditorTree.j | 2 + AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j | 2 + .../CPRuleEditor/_CPRuleEditorViewSliceRow.j | 2 + AppKit/CPScroller.j | 2 + AppKit/CPSegmentedControl.j | 1 + AppKit/CPShadowView.j | 2 +- AppKit/CPTabView.j | 1 + AppKit/CPTabViewItem.j | 2 +- AppKit/CPTableColumn.j | 1 + AppKit/CPTableView.j | 3 +- AppKit/CPTextField.j | 1 + AppKit/CPTheme.j | 1 + AppKit/CPTokenField.j | 3 + AppKit/CPToolbar.j | 4 +- AppKit/CPView.j | 3 + AppKit/CPWebView.j | 2 +- AppKit/CPWindow/CPWindow.j | 6 + AppKit/CPWindow/CPWindow_Constants.j | 2 + AppKit/CoreGraphics/CGAffineTransform.j | 2 + AppKit/CoreGraphics/CGColorSpace.j | 2 + AppKit/CoreGraphics/CGContext.j | 1 + AppKit/CoreGraphics/CGGradient.j | 1 + AppKit/CoreGraphics/CGPath.j | 3 +- AppKit/Platform/CPPlatformWindow.j | 3 + AppKit/_CPImageAndTextView.j | 2 +- AppKit/_CPPopUpList.j | 214 ++++++------- AppKit/_CPToolbarItem.j | 1 + Foundation/CPDateFormatter.j | 2 + Foundation/CPDecimal.j | 3 + Foundation/CPDictionary.j | 66 ++-- Foundation/CPGeometry.j | 1 + Foundation/CPJSONPConnection.j | 1 + Foundation/CPNotificationCenter.j | 291 +++++++++--------- Foundation/CPNumberFormatter.j | 3 +- Foundation/CPObject.j | 4 +- .../CPPredicate/CPComparisonPredicate.j | 4 +- Foundation/CPPredicate/CPCompoundPredicate.j | 2 +- Foundation/CPRange.j | 2 + Foundation/CPURLConnection.j | 2 + Foundation/CPUndoManager.j | 2 +- Foundation/CPUserSessionManager.j | 1 + Foundation/_CGGeometry.j | 6 + Foundation/_CPTypeDefinitions.j | 30 ++ 71 files changed, 496 insertions(+), 367 deletions(-) create mode 100644 Foundation/_CPTypeDefinitions.j diff --git a/AppKit/CPAlert.j b/AppKit/CPAlert.j index cbd40cfe6..2dec01211 100644 --- a/AppKit/CPAlert.j +++ b/AppKit/CPAlert.j @@ -44,6 +44,7 @@ var CPAlertDelegate_alertShowHelp_ = 1 << 0, CPAlertDelegate_alertDidEnd_returnCode_ = 1 << 1; +@typedef CPAlertStyle /* @global @group CPAlertStyle @@ -70,6 +71,54 @@ var bottomHeight = 71; @end + +@implementation _CPAlertThemeView : CPView + ++ (CPString)defaultThemeClass +{ + return @"alert"; +} + ++ (CPDictionary)themeAttributes +{ + return @{ + @"size": CGSizeMake(400.0, 110.0), + @"content-inset": CGInsetMake(15, 15, 15, 50), + @"informative-offset": 6, + @"button-offset": 10, + @"message-text-alignment": CPJustifiedTextAlignment, + @"message-text-color": [CPColor blackColor], + @"message-text-font": [CPFont boldSystemFontOfSize:13.0], + @"message-text-shadow-color": [CPNull null], + @"message-text-shadow-offset": CGSizeMakeZero(), + @"informative-text-alignment": CPJustifiedTextAlignment, + @"informative-text-color": [CPColor blackColor], + @"informative-text-font": [CPFont systemFontOfSize:12.0], + @"informative-text-shadow-color": [CPNull null], + @"informative-text-shadow-offset": CGSizeMakeZero(), + @"image-offset": CGPointMake(15, 12), + @"information-image": [CPNull null], + @"warning-image": [CPNull null], + @"error-image": [CPNull null], + @"help-image": [CPNull null], + @"help-image-left-offset": 15, + @"help-image-pressed": [CPNull null], + @"suppression-button-y-offset": 0.0, + @"suppression-button-x-offset": 0.0, + @"default-elements-margin": 3.0, + @"suppression-button-text-color": [CPColor blackColor], + @"suppression-button-text-font": [CPFont systemFontOfSize:12.0], + @"suppression-button-text-shadow-color": [CPNull null], + @"suppression-button-text-shadow-offset": 0.0, + @"modal-window-button-margin-y": 0.0, + @"modal-window-button-margin-x": 0.0, + @"standard-window-button-margin-y": 0.0, + @"standard-window-button-margin-x": 0.0, + }; +} + +@end + /*! @ingroup appkit @@ -813,51 +862,3 @@ var bottomHeight = 71; } @end - - -@implementation _CPAlertThemeView : CPView - -+ (CPString)defaultThemeClass -{ - return @"alert"; -} - -+ (CPDictionary)themeAttributes -{ - return @{ - @"size": CGSizeMake(400.0, 110.0), - @"content-inset": CGInsetMake(15, 15, 15, 50), - @"informative-offset": 6, - @"button-offset": 10, - @"message-text-alignment": CPJustifiedTextAlignment, - @"message-text-color": [CPColor blackColor], - @"message-text-font": [CPFont boldSystemFontOfSize:13.0], - @"message-text-shadow-color": [CPNull null], - @"message-text-shadow-offset": CGSizeMakeZero(), - @"informative-text-alignment": CPJustifiedTextAlignment, - @"informative-text-color": [CPColor blackColor], - @"informative-text-font": [CPFont systemFontOfSize:12.0], - @"informative-text-shadow-color": [CPNull null], - @"informative-text-shadow-offset": CGSizeMakeZero(), - @"image-offset": CGPointMake(15, 12), - @"information-image": [CPNull null], - @"warning-image": [CPNull null], - @"error-image": [CPNull null], - @"help-image": [CPNull null], - @"help-image-left-offset": 15, - @"help-image-pressed": [CPNull null], - @"suppression-button-y-offset": 0.0, - @"suppression-button-x-offset": 0.0, - @"default-elements-margin": 3.0, - @"suppression-button-text-color": [CPColor blackColor], - @"suppression-button-text-font": [CPFont systemFontOfSize:12.0], - @"suppression-button-text-shadow-color": [CPNull null], - @"suppression-button-text-shadow-offset": 0.0, - @"modal-window-button-margin-y": 0.0, - @"modal-window-button-margin-x": 0.0, - @"standard-window-button-margin-y": 0.0, - @"standard-window-button-margin-x": 0.0, - }; -} - -@end diff --git a/AppKit/CPAnimation.j b/AppKit/CPAnimation.j index 903cf3c2e..bef308b74 100644 --- a/AppKit/CPAnimation.j +++ b/AppKit/CPAnimation.j @@ -42,25 +42,10 @@ var CPAnimationDelegate_animationShouldStart_ = 1 << 1, CPAnimationDelegate_animationDidEnd_ = 1 << 3, CPAnimationDelegate_animationDidStop_ = 1 << 4; -/* - @global - @group CPAnimationCurve -*/ +@typedef CPAnimationCurve CPAnimationEaseInOut = 0; -/* - @global - @group CPAnimationCurve -*/ CPAnimationEaseIn = 1; -/* - @global - @group CPAnimationCurve -*/ CPAnimationEaseOut = 2; -/* - @global - @group CPAnimationCurve -*/ CPAnimationLinear = 3; ACTUAL_FRAME_RATE = 0; diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index f3783c75a..85e57a84f 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -37,6 +37,8 @@ @import "CPWindowController.j" @import "_CPPopoverWindow.j" +@typedef CPModalSession + var CPMainCibFile = @"CPMainCibFile", CPMainCibFileHumanFriendly = @"Main cib file base name", CPEventModifierFlags = 0; diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j index 0b25334d9..67e2f681e 100644 --- a/AppKit/CPArrayController.j +++ b/AppKit/CPArrayController.j @@ -23,7 +23,7 @@ */ @import - +@import @import "CPObjectController.j" @import "CPKeyValueBinding.j" diff --git a/AppKit/CPBox.j b/AppKit/CPBox.j index dc10564ff..29d0b3a08 100644 --- a/AppKit/CPBox.j +++ b/AppKit/CPBox.j @@ -24,6 +24,7 @@ @import "CPView.j" // CPBoxType +@typedef CPBoxType CPBoxPrimary = 0; CPBoxSecondary = 1; CPBoxSeparator = 2; @@ -31,12 +32,14 @@ CPBoxOldStyle = 3; CPBoxCustom = 4; // CPBorderType +@typedef CPBorderType CPNoBorder = 0; CPLineBorder = 1; CPBezelBorder = 2; CPGrooveBorder = 3; // CPTitlePosition +@typedef CPTitlePosition CPNoTitle = 0; CPAboveTop = 1; CPAtTop = 2; diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j index 8365d76c7..26c17edaa 100644 --- a/AppKit/CPButton.j +++ b/AppKit/CPButton.j @@ -29,8 +29,7 @@ @import "CPWindow_Constants.j" /* @group CPBezelStyle */ - - // IB style +@typedef CPBezelStyle CPRoundedBezelStyle = 1; // Push CPRegularSquareBezelStyle = 2; // Bevel CPThickSquareBezelStyle = 3; @@ -49,6 +48,7 @@ CPHUDBezelStyle = -1; /* @group CPButtonType */ +@typedef CPButtonType CPMomentaryLightButton = 0; CPPushOnPushOffButton = 1; CPToggleButton = 2; diff --git a/AppKit/CPCollectionView.j b/AppKit/CPCollectionView.j index 2da7f07d9..943c05a30 100644 --- a/AppKit/CPCollectionView.j +++ b/AppKit/CPCollectionView.j @@ -32,6 +32,7 @@ @import "CPPasteboard.j" @import "CPView.j" +@class _CPCollectionViewDropIndicator var CPCollectionViewDelegate_collectionView_acceptDrop_index_dropOperation_ = 1 << 0, CPCollectionViewDelegate_collectionView_canDragItemsAtIndexes_withEvent_ = 1 << 1, diff --git a/AppKit/CPColorPanel.j b/AppKit/CPColorPanel.j index af6bf3e1d..7d847a30f 100644 --- a/AppKit/CPColorPanel.j +++ b/AppKit/CPColorPanel.j @@ -27,6 +27,9 @@ @import "CPView.j" @class CPSlider +@class _CPColorPanelToolbar +@class _CPColorPanelSwatches +@class _CPColorPanelPreview @global CPApp diff --git a/AppKit/CPColorPicker.j b/AppKit/CPColorPicker.j index 14aed7793..ea3afcd88 100644 --- a/AppKit/CPColorPicker.j +++ b/AppKit/CPColorPicker.j @@ -25,6 +25,8 @@ @import "CPView.j" @class CPSlider +@class CPColorPanel +@class __CPColorWheel @global CPColorPickerViewWidth @global CPColorPickerViewHeight diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index b8a4481b8..01d424664 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -63,7 +63,7 @@ var CPComboBoxTextSubview = @"text", { CPArray _items; _CPPopUpList _listDelegate; - CPComboBoxDataSource _dataSource; + id _dataSource; BOOL _usesDataSource; BOOL _completes; BOOL _canComplete; diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index c2b1083ce..c6b96ef73 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -42,16 +42,19 @@ @end +@typedef CPTextAlignment CPLeftTextAlignment = 0; CPRightTextAlignment = 1; CPCenterTextAlignment = 2; CPJustifiedTextAlignment = 3; CPNaturalTextAlignment = 4; +@typedef CPControlSize CPRegularControlSize = 0; CPSmallControlSize = 1; CPMiniControlSize = 2; +@typedef CPLineBreakMode CPLineBreakByWordWrapping = 0; CPLineBreakByCharWrapping = 1; CPLineBreakByClipping = 2; @@ -59,11 +62,13 @@ CPLineBreakByTruncatingHead = 3; CPLineBreakByTruncatingTail = 4; CPLineBreakByTruncatingMiddle = 5; +@typedef CPVerticalTextAlignment CPTopVerticalTextAlignment = 1; CPCenterVerticalTextAlignment = 2; CPBottomVerticalTextAlignment = 3; // Deprecated for use with images, use the CPImageScale constants +@typedef CPImageScaling CPScaleProportionally = 0; CPScaleToFit = 1; CPScaleNone = 2; @@ -73,6 +78,7 @@ CPImageScaleAxesIndependently = 1; CPImageScaleNone = 2; CPImageScaleProportionallyUpOrDown = 3; +@typedef CPCellImagePosition CPNoImage = 0; CPImageOnly = 1; CPImageLeft = 2; diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j index 8ebd1ee8c..481bc6ba7 100644 --- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j +++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j @@ -29,6 +29,8 @@ @import @class CPDatePicker +@class _CPDatePickerMonthView +@class _CPDatePickerHeaderView @global CPApp @global CPSingleDateMode diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 39935b536..8fa09afce 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -31,6 +31,10 @@ @import @class CPDatePicker +@class _CPDatePickerElementTextField +@class _CPDatePickerElementView +@class _CPDatePickerMonthView +@class _CPDatePickerHeaderView @global CPSingleDateMode @global CPRangeDateMode @@ -1847,4 +1851,4 @@ var CPMonthDateType = 0, return CGRectMakeCopy(bounds); } -@end \ No newline at end of file +@end diff --git a/AppKit/CPDragServer_Constants.j b/AppKit/CPDragServer_Constants.j index 38ade5c31..7a347d3d4 100644 --- a/AppKit/CPDragServer_Constants.j +++ b/AppKit/CPDragServer_Constants.j @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@typedef CPDragOperation CPDragOperationNone = 0; CPDragOperationCopy = 1 << 1; CPDragOperationLink = 1 << 1; diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j index 8dbd7b720..d0ab4e128 100644 --- a/AppKit/CPEvent.j +++ b/AppKit/CPEvent.j @@ -31,9 +31,14 @@ @import "CPText.j" @class CPTextField +@class CPWindow @global CPApp +@typedef DOMEvent +@typedef CPEventType + + var _CPEventPeriodicEventPeriod = 0, _CPEventPeriodicEventTimer = nil, _CPEventUpperCaseRegex = new RegExp("[A-Z]"), diff --git a/AppKit/CPImageView.j b/AppKit/CPImageView.j index 1c4ef8dbc..6c041fdea 100644 --- a/AppKit/CPImageView.j +++ b/AppKit/CPImageView.j @@ -29,6 +29,7 @@ @global CPImagesPboardType @global appkit_tag_dom_elements +@typedef CPImageAlignment CPImageAlignCenter = 0; CPImageAlignTop = 1; CPImageAlignTopLeft = 2; diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j index 1913a4436..662280d16 100644 --- a/AppKit/CPKeyValueBinding.j +++ b/AppKit/CPKeyValueBinding.j @@ -35,6 +35,7 @@ var exposedBindingsMap = @{}, bindingsMap = @{}; +@typedef CPBindingOperationKind var CPBindingOperationAnd = 0, CPBindingOperationOr = 1; diff --git a/AppKit/CPLevelIndicator.j b/AppKit/CPLevelIndicator.j index 07ce720c3..c4e6422ee 100644 --- a/AppKit/CPLevelIndicator.j +++ b/AppKit/CPLevelIndicator.j @@ -25,11 +25,13 @@ @global CPApp +@typedef CPTickMarkPosition CPTickMarkBelow = 0; CPTickMarkAbove = 1; CPTickMarkLeft = CPTickMarkAbove; CPTickMarkRight = CPTickMarkBelow; +@typedef CPLevelIndicatorStyle CPRelevancyLevelIndicatorStyle = 0; CPContinuousCapacityLevelIndicatorStyle = 1; CPDiscreteCapacityLevelIndicatorStyle = 2; diff --git a/AppKit/CPMenu/_CPMenuBarWindow.j b/AppKit/CPMenu/_CPMenuBarWindow.j index 2c6c2bcaa..db9077b06 100644 --- a/AppKit/CPMenu/_CPMenuBarWindow.j +++ b/AppKit/CPMenu/_CPMenuBarWindow.j @@ -24,6 +24,7 @@ @import "_CPMenuManager.j" @class _CPMenuView +@class CPMenu @global CPMenuDidAddItemNotification @global CPMenuDidChangeItemNotification diff --git a/AppKit/CPMenu/_CPMenuWindow.j b/AppKit/CPMenu/_CPMenuWindow.j index ddf53a7dd..b11522d99 100644 --- a/AppKit/CPMenu/_CPMenuWindow.j +++ b/AppKit/CPMenu/_CPMenuWindow.j @@ -25,6 +25,8 @@ @import "CPWindow.j" @import "_CPMenuManager.j" +@class _CPMenuView + var _CPMenuWindowPool = [], _CPMenuWindowPoolCapacity = 5, diff --git a/AppKit/CPMenuItem/_CPMenuItemMenuBarView.j b/AppKit/CPMenuItem/_CPMenuItemMenuBarView.j index 265b78867..e6b209f7b 100644 --- a/AppKit/CPMenuItem/_CPMenuItemMenuBarView.j +++ b/AppKit/CPMenuItem/_CPMenuItemMenuBarView.j @@ -25,6 +25,7 @@ @class _CPMenuBarWindow @class _CPMenuView +@class CPMenuItem @implementation _CPMenuItemMenuBarView : CPView { diff --git a/AppKit/CPMenuItem/_CPMenuItemStandardView.j b/AppKit/CPMenuItem/_CPMenuItemStandardView.j index 2fc534b24..f7112befb 100644 --- a/AppKit/CPMenuItem/_CPMenuItemStandardView.j +++ b/AppKit/CPMenuItem/_CPMenuItemStandardView.j @@ -24,6 +24,9 @@ @import "CPImageView.j" @import "_CPImageAndTextView.j" +@class CPMenuItem + + @implementation _CPMenuItemStandardView : CPView { CPMenuItem _menuItem @accessors(property=menuItem); diff --git a/AppKit/CPMenuItem/_CPMenuItemView.j b/AppKit/CPMenuItem/_CPMenuItemView.j index 7156db2ed..8d6b8b2cf 100644 --- a/AppKit/CPMenuItem/_CPMenuItemView.j +++ b/AppKit/CPMenuItem/_CPMenuItemView.j @@ -26,6 +26,7 @@ @import "_CPMenuItemStandardView.j" @import "_CPMenuItemMenuBarView.j" +@class CPMenuItem @global CPApp /* diff --git a/AppKit/CPPasteboard.j b/AppKit/CPPasteboard.j index e93d1ddfa..8f5c4f754 100644 --- a/AppKit/CPPasteboard.j +++ b/AppKit/CPPasteboard.j @@ -26,6 +26,7 @@ @import @import +@typedef CPWebScriptObject CPGeneralPboard = @"CPGeneralPboard"; CPFontPboard = @"CPFontPboard"; @@ -66,7 +67,7 @@ var CPPasteboards = nil, unsigned _changeCount; CPString _stateUID; - WebScriptObject _nativePasteboard; + CPWebScriptObject _nativePasteboard; } /* diff --git a/AppKit/CPProgressIndicator.j b/AppKit/CPProgressIndicator.j index e0ea06ab4..3732c229b 100644 --- a/AppKit/CPProgressIndicator.j +++ b/AppKit/CPProgressIndicator.j @@ -26,6 +26,7 @@ @import "CPWindow_Constants.j" +@typedef CPProgressIndicatorStyle /* @global @group CPProgressIndicatorStyle diff --git a/AppKit/CPRadio.j b/AppKit/CPRadio.j index 8cf37cc3d..bb845aef3 100644 --- a/AppKit/CPRadio.j +++ b/AppKit/CPRadio.j @@ -25,6 +25,8 @@ @import "CPButton.j" +@class CPRadioGroup + @global CPApp diff --git a/AppKit/CPResponder.j b/AppKit/CPResponder.j index 08e3db3ac..eddf8b628 100644 --- a/AppKit/CPResponder.j +++ b/AppKit/CPResponder.j @@ -26,6 +26,7 @@ @import "CPEvent.j" @class CPKeyBinding +@class CPMenu CPDeleteKeyCode = 8; CPTabKeyCode = 9; diff --git a/AppKit/CPRuleEditor/CPRuleEditor_Constants.j b/AppKit/CPRuleEditor/CPRuleEditor_Constants.j index d68b6f48a..0870aedeb 100644 --- a/AppKit/CPRuleEditor/CPRuleEditor_Constants.j +++ b/AppKit/CPRuleEditor/CPRuleEditor_Constants.j @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + CPRuleEditorPredicateLeftExpression = "CPRuleEditorPredicateLeftExpression"; CPRuleEditorPredicateRightExpression = "CPRuleEditorPredicateRightExpression"; CPRuleEditorPredicateComparisonModifier = "CPRuleEditorPredicateComparisonModifier"; @@ -36,5 +37,6 @@ CPRuleEditorNestingModeList = 1; // Allows a single list, with no nes CPRuleEditorNestingModeCompound = 2; // Unlimited nesting and compound rows; this is the default CPRuleEditorNestingModeSimple = 3; // One compound row at the top with subrows beneath it, and no further nesting allowed +@typedef CPRuleEditorRowType CPRuleEditorRowTypeSimple = 0; CPRuleEditorRowTypeCompound = 1; diff --git a/AppKit/CPRuleEditor/_CPPredicateEditorTree.j b/AppKit/CPRuleEditor/_CPPredicateEditorTree.j index f0d47086f..8cb807a84 100644 --- a/AppKit/CPRuleEditor/_CPPredicateEditorTree.j +++ b/AppKit/CPRuleEditor/_CPPredicateEditorTree.j @@ -20,6 +20,8 @@ @import @import +@class CPPredicateEditorRowTemplate + @implementation _CPPredicateEditorTree : CPObject { CPPredicateEditorRowTemplate template @accessors; diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j index 39a6a1d47..2cec0efae 100644 --- a/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSlice.j @@ -19,6 +19,8 @@ @import "CPView.j" +@class CPRuleEditor + @implementation _CPRuleEditorViewSlice : CPView { CPRuleEditor _ruleEditor; diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j index 30470d5c6..d11eceb64 100644 --- a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j @@ -24,6 +24,8 @@ @import "CPDatePicker.j" @import "CPPopUpButton.j" +@class CPRuleEditorRowType + @global CPApp @global CPMiniControlSize @global CPSmallControlSize diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index efb3f5b2e..f293b34dd 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -33,6 +33,7 @@ @global CPApp // CPScroller Constants +@typedef CPScrollerPart CPScrollerNoPart = 0; CPScrollerDecrementPage = 1; CPScrollerKnob = 2; @@ -44,6 +45,7 @@ CPScrollerKnobSlot = 6; CPScrollerIncrementArrow = 0; CPScrollerDecrementArrow = 1; +@typedef CPUsableScrollerParts CPNoScrollerParts = 0; CPOnlyScrollerArrows = 1; CPAllScrollerParts = 2; diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index e95993152..e58d97ef1 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -28,6 +28,7 @@ @global CPApp +@typedef CPSegmentSwitchTracking CPSegmentSwitchTrackingSelectOne = 0; CPSegmentSwitchTrackingSelectAny = 1; CPSegmentSwitchTrackingMomentary = 2; diff --git a/AppKit/CPShadowView.j b/AppKit/CPShadowView.j index 5fcc5c26c..c6c223705 100644 --- a/AppKit/CPShadowView.j +++ b/AppKit/CPShadowView.j @@ -26,7 +26,7 @@ @import "CPImage.j" @import "CPView.j" - +@typedef CPShadowWeight CPLightShadow = 0; CPHeavyShadow = 1; diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j index 75f1d1ad5..ec145d802 100644 --- a/AppKit/CPTabView.j +++ b/AppKit/CPTabView.j @@ -25,6 +25,7 @@ @import "CPTabViewItem.j" @import "CPView.j" +@typedef CPTabViewType CPTopTabsBezelBorder = 0; //CPLeftTabsBezelBorder = 1; CPBottomTabsBezelBorder = 2; diff --git a/AppKit/CPTabViewItem.j b/AppKit/CPTabViewItem.j index 6c073b1d0..671d5bc78 100644 --- a/AppKit/CPTabViewItem.j +++ b/AppKit/CPTabViewItem.j @@ -23,7 +23,7 @@ @import @import "CPView.j" - +@class CPTabView /* The tab is currently selected. diff --git a/AppKit/CPTableColumn.j b/AppKit/CPTableColumn.j index 951cf45e4..e0f944a8e 100644 --- a/AppKit/CPTableColumn.j +++ b/AppKit/CPTableColumn.j @@ -31,6 +31,7 @@ @global CPTableViewColumnDidResizeNotification @class _CPTableColumnHeaderView +@class CPTableView CPTableColumnNoResizing = 0; CPTableColumnAutoresizingMask = 1 << 0; diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index 48157b537..e0961f6fa 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -42,6 +42,7 @@ @class CPTableHeaderView @class CPClipView @class CPButton +@class _CPDropOperationDrawingView @global CPApp @@ -170,7 +171,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; @implementation _CPTableDrawView : CPView { - CPTableView _tableView; + id _tableView; } - (id)initWithTableView:(CPTableView)aTableView diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 5f11f1d6e..28420db70 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -41,6 +41,7 @@ var CPTextFieldDelegate_control_didFailToFormatString_errorDescription_ = 1 << 1; +@typedef CPTextFieldBezelStyle CPTextFieldSquareBezel = 0; /*! A textfield bezel with squared corners. */ CPTextFieldRoundedBezel = 1; /*! A textfield bezel with rounded corners. */ diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index f87c3a2a2..426c462ca 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -26,6 +26,7 @@ @import @class CPView +@class _CPThemeAttribute var CPThemesByName = { }, CPThemeDefaultTheme = nil, diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index cc4b96765..705435aae 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -33,6 +33,9 @@ @import "CPTextField.j" @import "CPWindow_Constants.j" +@class _CPTokenFieldTokenCloseButton +@class _CPTokenFieldTokenDisclosureButton + @global CPApp @global CPTextFieldDidFocusNotification @global CPTextFieldDidBlurNotification diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j index 3cc711518..49c78924e 100644 --- a/AppKit/CPToolbar.j +++ b/AppKit/CPToolbar.j @@ -37,6 +37,8 @@ var CPToolbarDelegate_toolbar_itemForItemIdentifier_willBeInsertedIntoToolbar_ CPToolbarDelegate_toolbarSelectableItemIdentifiers_ = 1 << 4, CPToolbarDelegate_toolbarWillAddItem_ = 1 << 5; + +@typedef CPToolbarDisplayMode /* @global @group CPToolbarDisplayMode @@ -58,7 +60,7 @@ CPToolbarDisplayModeIconOnly = 2; */ CPToolbarDisplayModeLabelOnly = 3; - +@typedef CPToolbarSizeMode CPToolbarSizeModeDefault = 0; CPToolbarSizeModeRegular = 1; CPToolbarSizeModeSmall = 2; diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 1a600667c..70068d668 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -40,9 +40,12 @@ @class CPMenu @class CPClipView @class CPScrollView +@class CALayer @global appkit_tag_dom_elements +@typedef _CPViewFullScreenModeState + #if PLATFORM(DOM) if (typeof(appkit_tag_dom_elements) !== "undefined" && appkit_tag_dom_elements) diff --git a/AppKit/CPWebView.j b/AppKit/CPWebView.j index 98cc59caa..3f2ca713e 100644 --- a/AppKit/CPWebView.j +++ b/AppKit/CPWebView.j @@ -93,7 +93,7 @@ CPWebViewAppKitScrollMaxPollCount = 3; CPScrollView _scrollView; CPView _frameView; - IFrame _iframe; + DOMElement _iframe; CPString _mainFrameURL; CPArray _backwardStack; CPArray _forwardStack; diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index f770fc642..21a1b3f2d 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -50,9 +50,15 @@ @class CPMenu @class CPProgressIndicator +@class CPToolbar +@class CPWindowController +@class _CPWindowFrameAnimation @global CPApp +@typedef _CPWindowFullPlatformWindowSession + + @protocol CPWindowDelegate @optional diff --git a/AppKit/CPWindow/CPWindow_Constants.j b/AppKit/CPWindow/CPWindow_Constants.j index a9a2c3327..0caf4de78 100644 --- a/AppKit/CPWindow/CPWindow_Constants.j +++ b/AppKit/CPWindow/CPWindow_Constants.j @@ -81,6 +81,7 @@ CPWindowMinYMargin = 8; CPWindowHeightSizable = 16; CPWindowMaxYMargin = 32; +@typedef CPWindowLevel CPBackgroundWindowLevel = -1; /* Default level for windows @@ -143,6 +144,7 @@ CPDraggingWindowLevel = 500; */ CPScreenSaverWindowLevel = 1000; +@typedef CPWindowOrderingMode /* The receiver is placed directly in front of the window specified. @global diff --git a/AppKit/CoreGraphics/CGAffineTransform.j b/AppKit/CoreGraphics/CGAffineTransform.j index b73f26f07..0cfb36bcf 100644 --- a/AppKit/CoreGraphics/CGAffineTransform.j +++ b/AppKit/CoreGraphics/CGAffineTransform.j @@ -22,6 +22,8 @@ @import "CGGeometry.j" +@typedef CGAffineTransform + function CGAffineTransformMake(a, b, c, d, tx, ty) { diff --git a/AppKit/CoreGraphics/CGColorSpace.j b/AppKit/CoreGraphics/CGColorSpace.j index 9502a0703..e5d7673e8 100644 --- a/AppKit/CoreGraphics/CGColorSpace.j +++ b/AppKit/CoreGraphics/CGColorSpace.j @@ -20,6 +20,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +@typedef CGColorSpace + kCGColorSpaceModelUnknown = -1; kCGColorSpaceModelMonochrome = 0; kCGColorSpaceModelRGB = 1; diff --git a/AppKit/CoreGraphics/CGContext.j b/AppKit/CoreGraphics/CGContext.j index c0b43eabd..a00199586 100644 --- a/AppKit/CoreGraphics/CGContext.j +++ b/AppKit/CoreGraphics/CGContext.j @@ -25,6 +25,7 @@ @import "CGGeometry.j" @import "CGPath.j" +@typedef CGContext kCGLineCapButt = 0; kCGLineCapRound = 1; diff --git a/AppKit/CoreGraphics/CGGradient.j b/AppKit/CoreGraphics/CGGradient.j index 3681c086e..aea212219 100644 --- a/AppKit/CoreGraphics/CGGradient.j +++ b/AppKit/CoreGraphics/CGGradient.j @@ -23,6 +23,7 @@ @import "CGColor.j" @import "CGColorSpace.j" +@typedef CGGradient kCGGradientDrawsBeforeStartLocation = 1 << 0; kCGGradientDrawsAfterEndLocation = 1 << 1; diff --git a/AppKit/CoreGraphics/CGPath.j b/AppKit/CoreGraphics/CGPath.j index 45c5d9062..b7cea5164 100644 --- a/AppKit/CoreGraphics/CGPath.j +++ b/AppKit/CoreGraphics/CGPath.j @@ -23,6 +23,7 @@ @import "CGAffineTransform.j" @import "CGGeometry.j" +@typedef CGPath kCGPathElementMoveToPoint = 0; kCGPathElementAddLineToPoint = 1; @@ -629,4 +630,4 @@ function CGPathContainsPoint(aPath, aTransform, point, eoFill) /*! @} -*/ \ No newline at end of file +*/ diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j index 628293117..3e2ff2817 100644 --- a/AppKit/Platform/CPPlatformWindow.j +++ b/AppKit/Platform/CPPlatformWindow.j @@ -27,9 +27,12 @@ @class CPMenu @class CPPlatformPasteboard +@class CPWindow @global CPApp +@typedef DOMWindow + var PrimaryPlatformWindow = NULL; @implementation CPPlatformWindow : CPObject diff --git a/AppKit/_CPImageAndTextView.j b/AppKit/_CPImageAndTextView.j index 63b9d60b6..1a02755f5 100644 --- a/AppKit/_CPImageAndTextView.j +++ b/AppKit/_CPImageAndTextView.j @@ -71,7 +71,7 @@ var _CPimageAndTextViewFrameSizeChangedFlag = 1 << 0, #if PLATFORM(DOM) DOMElement _DOMImageElement; - DOMELement _DOMTextElement; + DOMElement _DOMTextElement; DOMElement _DOMTextShadowElement; #endif } diff --git a/AppKit/_CPPopUpList.j b/AppKit/_CPPopUpList.j index 2604f3652..3dd357132 100644 --- a/AppKit/_CPPopUpList.j +++ b/AppKit/_CPPopUpList.j @@ -65,6 +65,113 @@ var ListMinimumItems = 3; var ListColumnIdentifier = @"1"; +@implementation _CPPopUpPanel : CPPanel + +- (id)initWithContentRect:(CGRect)aContentRect styleMask:(unsigned)aStyleMask +{ + if (self = [super initWithContentRect:aContentRect styleMask:aStyleMask]) + _constrainsToUsableScreen = NO; + + [self _trapNextMouseDown]; + + return self; +} + +/*! + Returns \c YES if the receiver is able to receive input events + even when a modal session is active. +*/ +- (BOOL)worksWhenModal +{ + return YES; +} + +- (void)sendEvent:(CPEvent)anEvent +{ + var type = [anEvent type]; + + if (type === CPLeftMouseDown || type === CPRightMouseDown) + [[self delegate] setListWasClicked:YES]; + + return [super sendEvent:anEvent]; +} + +- (void)orderFront:(id)sender +{ + [self _trapNextMouseDown]; + [super orderFront:sender]; +} + +- (void)_mouseWasClicked:(CPEvent)anEvent +{ + var mouseWindow = [anEvent window], + rect = [[[self delegate] dataSource] bounds], + point = [[[self delegate] dataSource] convertPoint:[anEvent locationInWindow] fromView:nil]; + + if (mouseWindow != self && !CGRectContainsPoint(rect, point)) + [[self delegate] close]; + else + [self _trapNextMouseDown]; +} + +- (void)_trapNextMouseDown +{ + // Don't dequeue the event so clicks in controls will work + [CPApp setTarget:self selector:@selector(_mouseWasClicked:) forNextEventMatchingMask:CPLeftMouseDownMask untilDate:nil inMode:CPDefaultRunLoopMode dequeue:NO]; +} + +@end + +@implementation _CPPopUpTableView : CPTableView +{ + BOOL _acceptFirstResponder; +} + +- (id)initWithFrame:(CGRect)aFrame +{ + if (self = [super initWithFrame:aFrame]) + { + // We want the autocomplete to remain first responder until we are clicked. + _acceptFirstResponder = NO; + } + + return self; +} + +- (void)trackMouse:(CPEvent)anEvent +{ + if (![self isEnabled]) + return; + + [[self delegate] setItemWasClicked:YES]; + + // CPTableView will not track the click if it is not first responder + _acceptFirstResponder = YES; + [[self window] makeFirstResponder:self]; + [super trackMouse:anEvent]; +} + +- (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp +{ + _acceptFirstResponder = NO; + [super stopTracking:lastPoint at:aPoint mouseIsUp:mouseIsUp]; +} + +- (BOOL)acceptsFirstResponder +{ + return _acceptFirstResponder; +} + +/*! + Return the column used for the list. +*/ +- (CPTableColumn)listColumn +{ + return _tableColumns[0]; +} + +@end + /*! This class is a controller for a panel that can pop up and display a scrollable list of items in a CPTableView. It is used by CPComboBox to display the list of choices. @@ -800,110 +907,3 @@ var _CPPopUpListDataSourceKey = @"_CPPopUpListDataSourceKey", } @end - -@implementation _CPPopUpTableView : CPTableView -{ - BOOL _acceptFirstResponder; -} - -- (id)initWithFrame:(CGRect)aFrame -{ - if (self = [super initWithFrame:aFrame]) - { - // We want the autocomplete to remain first responder until we are clicked. - _acceptFirstResponder = NO; - } - - return self; -} - -- (void)trackMouse:(CPEvent)anEvent -{ - if (![self isEnabled]) - return; - - [[self delegate] setItemWasClicked:YES]; - - // CPTableView will not track the click if it is not first responder - _acceptFirstResponder = YES; - [[self window] makeFirstResponder:self]; - [super trackMouse:anEvent]; -} - -- (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp -{ - _acceptFirstResponder = NO; - [super stopTracking:lastPoint at:aPoint mouseIsUp:mouseIsUp]; -} - -- (BOOL)acceptsFirstResponder -{ - return _acceptFirstResponder; -} - -/*! - Return the column used for the list. -*/ -- (CPTableColumn)listColumn -{ - return _tableColumns[0]; -} - -@end - -@implementation _CPPopUpPanel : CPPanel - -- (id)initWithContentRect:(CGRect)aContentRect styleMask:(unsigned)aStyleMask -{ - if (self = [super initWithContentRect:aContentRect styleMask:aStyleMask]) - _constrainsToUsableScreen = NO; - - [self _trapNextMouseDown]; - - return self; -} - -/*! - Returns \c YES if the receiver is able to receive input events - even when a modal session is active. -*/ -- (BOOL)worksWhenModal -{ - return YES; -} - -- (void)sendEvent:(CPEvent)anEvent -{ - var type = [anEvent type]; - - if (type === CPLeftMouseDown || type === CPRightMouseDown) - [[self delegate] setListWasClicked:YES]; - - return [super sendEvent:anEvent]; -} - -- (void)orderFront:(id)sender -{ - [self _trapNextMouseDown]; - [super orderFront:sender]; -} - -- (void)_mouseWasClicked:(CPEvent)anEvent -{ - var mouseWindow = [anEvent window], - rect = [[[self delegate] dataSource] bounds], - point = [[[self delegate] dataSource] convertPoint:[anEvent locationInWindow] fromView:nil]; - - if (mouseWindow != self && !CGRectContainsPoint(rect, point)) - [[self delegate] close]; - else - [self _trapNextMouseDown]; -} - -- (void)_trapNextMouseDown -{ - // Don't dequeue the event so clicks in controls will work - [CPApp setTarget:self selector:@selector(_mouseWasClicked:) forNextEventMatchingMask:CPLeftMouseDownMask untilDate:nil inMode:CPDefaultRunLoopMode dequeue:NO]; -} - -@end diff --git a/AppKit/_CPToolbarItem.j b/AppKit/_CPToolbarItem.j index 5d5600b47..387805535 100644 --- a/AppKit/_CPToolbarItem.j +++ b/AppKit/_CPToolbarItem.j @@ -26,6 +26,7 @@ @import "CPImage.j" @import "CPView.j" +@class CPToolbar @global CPApp CPToolbarItemVisibilityPriorityStandard = 0; diff --git a/Foundation/CPDateFormatter.j b/Foundation/CPDateFormatter.j index 9f1badc65..b7c74cbf1 100644 --- a/Foundation/CPDateFormatter.j +++ b/Foundation/CPDateFormatter.j @@ -32,12 +32,14 @@ @global CPLocaleLanguageCode @global CPLocaleCountryCode +@typedef CPDateFormatterStyle CPDateFormatterNoStyle = 0; CPDateFormatterShortStyle = 1; CPDateFormatterMediumStyle = 2; CPDateFormatterLongStyle = 3; CPDateFormatterFullStyle = 4; +@typedef CPDateFormatterBehavior CPDateFormatterBehaviorDefault = 0; CPDateFormatterBehavior10_0 = 1000; CPDateFormatterBehavior10_4 = 1040; diff --git a/Foundation/CPDecimal.j b/Foundation/CPDecimal.j index 15d2f817d..72fbe89cc 100644 --- a/Foundation/CPDecimal.j +++ b/Foundation/CPDecimal.j @@ -52,6 +52,8 @@ @import "CPArray.j" @import "CPNumber.j" +@typedef CPDecimal + // Decimal size limits CPDecimalMaxDigits = 38; CPDecimalMaxExponent = 127; @@ -68,6 +70,7 @@ CPCalculationUnderflow = 3; CPCalculationDivideByZero = 4; //CPRoundingMode Enum +@typedef CPRoundingMode CPRoundPlain = 1; CPRoundDown = 2; CPRoundUp = 3; diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j index b95792f78..9c673be0c 100755 --- a/Foundation/CPDictionary.j +++ b/Foundation/CPDictionary.j @@ -31,38 +31,6 @@ var CPDictionaryShowNilDeprecationMessage = YES, CPDictionaryMaxDescriptionRecursion = 10; -/* @ignore */ -@implementation _CPDictionaryValueEnumerator : CPEnumerator -{ - CPEnumerator _keyEnumerator; - CPDictionary _dictionary; -} - -- (id)initWithDictionary:(CPDictionary)aDictionary -{ - self = [super init]; - - if (self) - { - _keyEnumerator = [aDictionary keyEnumerator]; - _dictionary = aDictionary; - } - - return self; -} - -- (id)nextObject -{ - var key = [_keyEnumerator nextObject]; - - if (key === nil) - return nil; - - return [_dictionary objectForKey:key]; -} - -@end - /*! @class CPDictionary @ingroup foundation @@ -801,6 +769,40 @@ var CPDictionaryShowNilDeprecationMessage = YES, @end + +/* @ignore */ +@implementation _CPDictionaryValueEnumerator : CPEnumerator +{ + CPEnumerator _keyEnumerator; + CPDictionary _dictionary; +} + +- (id)initWithDictionary:(CPDictionary)aDictionary +{ + self = [super init]; + + if (self) + { + _keyEnumerator = [aDictionary keyEnumerator]; + _dictionary = aDictionary; + } + + return self; +} + +- (id)nextObject +{ + var key = [_keyEnumerator nextObject]; + + if (key === nil) + return nil; + + return [_dictionary objectForKey:key]; +} + +@end + + /*! @class CPMutableDictionary @ingroup compatibility diff --git a/Foundation/CPGeometry.j b/Foundation/CPGeometry.j index 93a3a2b05..f8ef04a4c 100644 --- a/Foundation/CPGeometry.j +++ b/Foundation/CPGeometry.j @@ -22,6 +22,7 @@ @import "_CGGeometry.j" +@typedef CPRectEdge CPMinXEdge = 0; CPMinYEdge = 1; CPMaxXEdge = 2; diff --git a/Foundation/CPJSONPConnection.j b/Foundation/CPJSONPConnection.j index 0330cb223..374395784 100644 --- a/Foundation/CPJSONPConnection.j +++ b/Foundation/CPJSONPConnection.j @@ -23,6 +23,7 @@ @import "CPException.j" @import "CPObject.j" @import "CPRunLoop.j" +@import "CPURLRequest.j" CPJSONPConnectionCallbacks = {}; diff --git a/Foundation/CPNotificationCenter.j b/Foundation/CPNotificationCenter.j index 99ab18183..d8744fe11 100644 --- a/Foundation/CPNotificationCenter.j +++ b/Foundation/CPNotificationCenter.j @@ -29,151 +29,6 @@ var CPNotificationDefaultCenter = nil; -/*! - @class CPNotificationCenter - @ingroup foundation - @brief Sends messages (CPNotification) between objects. - - Cappuccino provides a framework for sending messages between objects within - a process called notifications. Objects register with an - CPNotificationCenter to be informed whenever other objects post - CPNotifications to it matching certain criteria. The notification center - processes notifications synchronously -- that is, control is only returned - to the notification poster once every recipient of the notification has - received it and processed it. -*/ -@implementation CPNotificationCenter : CPObject -{ - CPMutableDictionary _namedRegistries; - _CPNotificationRegistry _unnamedRegistry; -} - -/*! - Returns the application's notification center -*/ -+ (CPNotificationCenter)defaultCenter -{ - if (!CPNotificationDefaultCenter) - CPNotificationDefaultCenter = [[CPNotificationCenter alloc] init]; - - return CPNotificationDefaultCenter; -} - -- (id)init -{ - self = [super init]; - - if (self) - { - _namedRegistries = @{}; - _unnamedRegistry = [[_CPNotificationRegistry alloc] init]; - } - return self; -} - -/*! - Adds an object as an observer. The observer will receive notifications with the specified name - and/or containing the specified object (depending on if they are \c nil. - @param anObserver the observing object - @param aSelector the message sent to the observer when a notification occurs - @param aNotificationName the name of the notification the observer wants to watch - @param anObject the object in the notification the observer wants to watch -*/ -- (void)addObserver:(id)anObserver selector:(SEL)aSelector name:(CPString)aNotificationName object:(id)anObject -{ - var registry, - observer = [[_CPNotificationObserver alloc] initWithObserver:anObserver selector:aSelector]; - - if (aNotificationName == nil) - registry = _unnamedRegistry; - else if (!(registry = [_namedRegistries objectForKey:aNotificationName])) - { - registry = [[_CPNotificationRegistry alloc] init]; - [_namedRegistries setObject:registry forKey:aNotificationName]; - } - - [registry addObserver:observer object:anObject]; -} - -/*! - Unregisters the specified observer from all notifications. - @param anObserver the observer to unregister -*/ -- (void)removeObserver:(id)anObserver -{ - var name = nil, - names = [_namedRegistries keyEnumerator]; - - while ((name = [names nextObject]) !== nil) - [[_namedRegistries objectForKey:name] removeObserver:anObserver object:nil]; - - [_unnamedRegistry removeObserver:anObserver object:nil]; -} - -/*! - Unregisters the specified observer from notifications matching the specified name and/or object. - @param anObserver the observer to remove - @param aNotificationName the name of notifications to no longer watch - @param anObject notifications containing this object will no longer be watched -*/ -- (void)removeObserver:(id)anObserver name:(CPString)aNotificationName object:(id)anObject -{ - if (aNotificationName == nil) - { - var name = nil, - names = [_namedRegistries keyEnumerator]; - - while ((name = [names nextObject]) !== nil) - [[_namedRegistries objectForKey:name] removeObserver:anObserver object:anObject]; - - [_unnamedRegistry removeObserver:anObserver object:anObject]; - } - else - [[_namedRegistries objectForKey:aNotificationName] removeObserver:anObserver object:anObject]; -} - -/*! - Posts a notification to all observers that match the specified notification's name and object. - @param aNotification the notification being posted - @throws CPInvalidArgumentException if aNotification is nil -*/ -- (void)postNotification:(CPNotification)aNotification -{ - if (!aNotification) - [CPException raise:CPInvalidArgumentException reason:"postNotification: does not except 'nil' notifications"]; - - _CPNotificationCenterPostNotification(self, aNotification); -} - -/*! - Posts a new notification with the specified name, object, and dictionary. - @param aNotificationName the name of the notification name - @param anObject the associated object - @param aUserInfo the associated dictionary -*/ -- (void)postNotificationName:(CPString)aNotificationName object:(id)anObject userInfo:(CPDictionary)aUserInfo -{ - _CPNotificationCenterPostNotification(self, [[CPNotification alloc] initWithName:aNotificationName object:anObject userInfo:aUserInfo]); -} - -/*! - Posts a new notification with the specified name and object. - @param aNotificationName the name of the notification - @param anObject the associated object -*/ -- (void)postNotificationName:(CPString)aNotificationName object:(id)anObject -{ - _CPNotificationCenterPostNotification(self, [[CPNotification alloc] initWithName:aNotificationName object:anObject userInfo:nil]); -} - -@end - -var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ self, /* CPNotification */ aNotification) -{ - [self._unnamedRegistry postNotification:aNotification]; - [[self._namedRegistries objectForKey:[aNotification name]] postNotification:aNotification]; -}; - /* Mapping of Notification Name to listening object/selector. @ignore @@ -338,3 +193,149 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ } @end + + +/*! + @class CPNotificationCenter + @ingroup foundation + @brief Sends messages (CPNotification) between objects. + + Cappuccino provides a framework for sending messages between objects within + a process called notifications. Objects register with an + CPNotificationCenter to be informed whenever other objects post + CPNotifications to it matching certain criteria. The notification center + processes notifications synchronously -- that is, control is only returned + to the notification poster once every recipient of the notification has + received it and processed it. +*/ +@implementation CPNotificationCenter : CPObject +{ + CPMutableDictionary _namedRegistries; + _CPNotificationRegistry _unnamedRegistry; +} + +/*! + Returns the application's notification center +*/ ++ (CPNotificationCenter)defaultCenter +{ + if (!CPNotificationDefaultCenter) + CPNotificationDefaultCenter = [[CPNotificationCenter alloc] init]; + + return CPNotificationDefaultCenter; +} + +- (id)init +{ + self = [super init]; + + if (self) + { + _namedRegistries = @{}; + _unnamedRegistry = [[_CPNotificationRegistry alloc] init]; + } + return self; +} + +/*! + Adds an object as an observer. The observer will receive notifications with the specified name + and/or containing the specified object (depending on if they are \c nil. + @param anObserver the observing object + @param aSelector the message sent to the observer when a notification occurs + @param aNotificationName the name of the notification the observer wants to watch + @param anObject the object in the notification the observer wants to watch +*/ +- (void)addObserver:(id)anObserver selector:(SEL)aSelector name:(CPString)aNotificationName object:(id)anObject +{ + var registry, + observer = [[_CPNotificationObserver alloc] initWithObserver:anObserver selector:aSelector]; + + if (aNotificationName == nil) + registry = _unnamedRegistry; + else if (!(registry = [_namedRegistries objectForKey:aNotificationName])) + { + registry = [[_CPNotificationRegistry alloc] init]; + [_namedRegistries setObject:registry forKey:aNotificationName]; + } + + [registry addObserver:observer object:anObject]; +} + +/*! + Unregisters the specified observer from all notifications. + @param anObserver the observer to unregister +*/ +- (void)removeObserver:(id)anObserver +{ + var name = nil, + names = [_namedRegistries keyEnumerator]; + + while ((name = [names nextObject]) !== nil) + [[_namedRegistries objectForKey:name] removeObserver:anObserver object:nil]; + + [_unnamedRegistry removeObserver:anObserver object:nil]; +} + +/*! + Unregisters the specified observer from notifications matching the specified name and/or object. + @param anObserver the observer to remove + @param aNotificationName the name of notifications to no longer watch + @param anObject notifications containing this object will no longer be watched +*/ +- (void)removeObserver:(id)anObserver name:(CPString)aNotificationName object:(id)anObject +{ + if (aNotificationName == nil) + { + var name = nil, + names = [_namedRegistries keyEnumerator]; + + while ((name = [names nextObject]) !== nil) + [[_namedRegistries objectForKey:name] removeObserver:anObserver object:anObject]; + + [_unnamedRegistry removeObserver:anObserver object:anObject]; + } + else + [[_namedRegistries objectForKey:aNotificationName] removeObserver:anObserver object:anObject]; +} + +/*! + Posts a notification to all observers that match the specified notification's name and object. + @param aNotification the notification being posted + @throws CPInvalidArgumentException if aNotification is nil +*/ +- (void)postNotification:(CPNotification)aNotification +{ + if (!aNotification) + [CPException raise:CPInvalidArgumentException reason:"postNotification: does not except 'nil' notifications"]; + + _CPNotificationCenterPostNotification(self, aNotification); +} + +/*! + Posts a new notification with the specified name, object, and dictionary. + @param aNotificationName the name of the notification name + @param anObject the associated object + @param aUserInfo the associated dictionary +*/ +- (void)postNotificationName:(CPString)aNotificationName object:(id)anObject userInfo:(CPDictionary)aUserInfo +{ + _CPNotificationCenterPostNotification(self, [[CPNotification alloc] initWithName:aNotificationName object:anObject userInfo:aUserInfo]); +} + +/*! + Posts a new notification with the specified name and object. + @param aNotificationName the name of the notification + @param anObject the associated object +*/ +- (void)postNotificationName:(CPString)aNotificationName object:(id)anObject +{ + _CPNotificationCenterPostNotification(self, [[CPNotification alloc] initWithName:aNotificationName object:anObject userInfo:nil]); +} + +@end + +var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ self, /* CPNotification */ aNotification) +{ + [self._unnamedRegistry postNotification:aNotification]; + [[self._namedRegistries objectForKey:[aNotification name]] postNotification:aNotification]; +}; diff --git a/Foundation/CPNumberFormatter.j b/Foundation/CPNumberFormatter.j index f59dca490..52737fc1c 100644 --- a/Foundation/CPNumberFormatter.j +++ b/Foundation/CPNumberFormatter.j @@ -24,7 +24,7 @@ @import "CPFormatter.j" @import "CPDecimalNumber.j" - +@typedef CPNumberFormatterStyle CPNumberFormatterNoStyle = 0; CPNumberFormatterDecimalStyle = 1; CPNumberFormatterCurrencyStyle = 2; @@ -32,6 +32,7 @@ CPNumberFormatterPercentStyle = 3; CPNumberFormatterScientificStyle = 4; CPNumberFormatterSpellOutStyle = 5; +@typedef CPNumberFormatterRoundingMode CPNumberFormatterRoundCeiling = CPRoundUp; CPNumberFormatterRoundFloor = CPRoundDown; CPNumberFormatterRoundDown = CPRoundDown; diff --git a/Foundation/CPObject.j b/Foundation/CPObject.j index 912aafa09..f5aea7aa6 100644 --- a/Foundation/CPObject.j +++ b/Foundation/CPObject.j @@ -62,6 +62,8 @@ CPLog(@"Got some class: %@", inst); @todo document KVC usage. */ +@import "_CPTypeDefinitions.j" + @class CPString @class CPException @@ -104,7 +106,7 @@ CPLog(@"Got some class: %@", inst); @implementation CPObject { - Class isa; + id isa; } + (void)load diff --git a/Foundation/CPPredicate/CPComparisonPredicate.j b/Foundation/CPPredicate/CPComparisonPredicate.j index f2cfb3172..338a4e7f3 100644 --- a/Foundation/CPPredicate/CPComparisonPredicate.j +++ b/Foundation/CPPredicate/CPComparisonPredicate.j @@ -32,8 +32,8 @@ @import "_CPPredicate.j" -var CPComparisonPredicateModifier, - CPPredicateOperatorType; +@typedef CPComparisonPredicateModifier +@typedef CPPredicateOperatorType /*! @ingroup foundation diff --git a/Foundation/CPPredicate/CPCompoundPredicate.j b/Foundation/CPPredicate/CPCompoundPredicate.j index e36ceb0d0..a38f3b065 100644 --- a/Foundation/CPPredicate/CPCompoundPredicate.j +++ b/Foundation/CPPredicate/CPCompoundPredicate.j @@ -26,7 +26,7 @@ @import "CPArray.j" @import "_CPPredicate.j" -var CPCompoundPredicateType; +@typedef CPCompoundPredicateType /*! @class CPCompoundPredicate diff --git a/Foundation/CPRange.j b/Foundation/CPRange.j index c9f9c7c2a..58dd550bc 100755 --- a/Foundation/CPRange.j +++ b/Foundation/CPRange.j @@ -25,6 +25,8 @@ @{ */ +@typedef CPRange + /*! Makes a CPRange. @param location the location for new range diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j index 420ce8402..88a1afbf8 100644 --- a/Foundation/CPURLConnection.j +++ b/Foundation/CPURLConnection.j @@ -26,6 +26,8 @@ @import "CPURLRequest.j" @import "CPURLResponse.j" +@typedef HTTPRequest + var CPURLConnectionDelegate = nil; /*! diff --git a/Foundation/CPUndoManager.j b/Foundation/CPUndoManager.j index af2111170..d4ad4914e 100644 --- a/Foundation/CPUndoManager.j +++ b/Foundation/CPUndoManager.j @@ -50,7 +50,7 @@ var _CPUndoGroupingPool = [], /* @ignore */ @implementation _CPUndoGrouping : CPObject { - _CPUndoGrouping _parent; + id _parent; CPMutableArray _invocations; CPString _actionName; } diff --git a/Foundation/CPUserSessionManager.j b/Foundation/CPUserSessionManager.j index b1cbd23cb..523a65e19 100644 --- a/Foundation/CPUserSessionManager.j +++ b/Foundation/CPUserSessionManager.j @@ -24,6 +24,7 @@ @import "CPObject.j" @import "CPString.j" +@typedef CPUserSessionStatus CPUserSessionUndeterminedStatus = 0; CPUserSessionLoggedInStatus = 1; CPUserSessionLoggedOutStatus = 2; diff --git a/Foundation/_CGGeometry.j b/Foundation/_CGGeometry.j index 4861ce8fd..d0482aa71 100644 --- a/Foundation/_CGGeometry.j +++ b/Foundation/_CGGeometry.j @@ -26,6 +26,12 @@ CGGeometry is not a part of Foundation. The reason _CGGeometry.j exists, and is */ +@typedef CGPoint +@typedef CGSize +@typedef CGRect +@typedef CGInset + + function CGPointMake(x, y) { return { x:x, y:y }; diff --git a/Foundation/_CPTypeDefinitions.j b/Foundation/_CPTypeDefinitions.j new file mode 100644 index 000000000..7aa874fe1 --- /dev/null +++ b/Foundation/_CPTypeDefinitions.j @@ -0,0 +1,30 @@ +/* + * _CPTypeDefintions.j + * Foundation + * + * Created by Antoine Mercadal. + * Copyright 2014, Antoine Mercadal. + * + * 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 + */ + +@typedef Class +@typedef CPInteger +@typedef CPUInteger +@typedef DOMElement +@typedef JSObject +@typedef CPMethodSignature +@typedef CPPropertyListFormat +@typedef CPTimeInterval From 9a5afb70b51e7fca2b2c5000095f72c5e1583bd9 Mon Sep 17 00:00:00 2001 From: Andrew Hankinson Date: Thu, 6 Nov 2014 13:40:47 -0500 Subject: [PATCH 30/70] Fixed: Environment configuration in Jakefile templates Previously the Jakefile template for the capp utility would emit a template where the "configuration" build environment parameter could have multiple values. At the head of the file, the configuration parameter could be an environment variable composed of ENV['CONFIG'], ENV['CONFIGURATION'] or ENV['c']. It would default to "Debug". However, other locations in this file did not use the detected configuration, and only looked at ENV['CONFIGURATION'] for the environment variable. This commit fixes this by using the detected configuration environment variable as the build environment. --- Tools/capp/Resources/Templates/Application/Jakefile | 12 ++++++------ .../capp/Resources/Templates/NibApplication/Jakefile | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Tools/capp/Resources/Templates/Application/Jakefile b/Tools/capp/Resources/Templates/Application/Jakefile index 6207c9b34..08a8c0c8b 100644 --- a/Tools/capp/Resources/Templates/Application/Jakefile +++ b/Tools/capp/Resources/Templates/Application/Jakefile @@ -55,13 +55,13 @@ task ("build", ["default"], function() task ("debug", function() { - ENV["CONFIGURATION"] = "Debug"; + configuration = ENV["CONFIGURATION"] = "Debug"; JAKE.subjake(["."], "build", ENV); }); task ("release", function() { - ENV["CONFIGURATION"] = "Release"; + configuration = ENV["CONFIGURATION"] = "Release"; JAKE.subjake(["."], "build", ENV); }); @@ -105,7 +105,7 @@ function updateApplicationSize() { print("Calculating application file sizes..."); - var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }), format = CFPropertyList.sniffedFormatOfString(contents), plist = CFPropertyList.propertyListFromString(contents), totalBytes = {executable:0, data:0, mhtml:0}; @@ -113,7 +113,7 @@ function updateApplicationSize() // Get the size of all framework executables and sprite data var frameworksDir = "Frameworks"; - if (ENV["CONFIGURATION"] === "Debug") + if (configuration === "Debug") frameworksDir = FILE.join(frameworksDir, "Debug"); var frameworks = FILE.list(frameworksDir); @@ -137,7 +137,7 @@ function updateApplicationSize() addBundleFileSizes(themePath, totalBytes); // Add sizes for the app - addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes); print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); @@ -149,7 +149,7 @@ function updateApplicationSize() plist.setValueForKey("CPApplicationSize", dict); - FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); + FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); } function addBundleFileSizes(bundlePath, totalBytes) diff --git a/Tools/capp/Resources/Templates/NibApplication/Jakefile b/Tools/capp/Resources/Templates/NibApplication/Jakefile index 6207c9b34..08a8c0c8b 100644 --- a/Tools/capp/Resources/Templates/NibApplication/Jakefile +++ b/Tools/capp/Resources/Templates/NibApplication/Jakefile @@ -55,13 +55,13 @@ task ("build", ["default"], function() task ("debug", function() { - ENV["CONFIGURATION"] = "Debug"; + configuration = ENV["CONFIGURATION"] = "Debug"; JAKE.subjake(["."], "build", ENV); }); task ("release", function() { - ENV["CONFIGURATION"] = "Release"; + configuration = ENV["CONFIGURATION"] = "Release"; JAKE.subjake(["."], "build", ENV); }); @@ -105,7 +105,7 @@ function updateApplicationSize() { print("Calculating application file sizes..."); - var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }), format = CFPropertyList.sniffedFormatOfString(contents), plist = CFPropertyList.propertyListFromString(contents), totalBytes = {executable:0, data:0, mhtml:0}; @@ -113,7 +113,7 @@ function updateApplicationSize() // Get the size of all framework executables and sprite data var frameworksDir = "Frameworks"; - if (ENV["CONFIGURATION"] === "Debug") + if (configuration === "Debug") frameworksDir = FILE.join(frameworksDir, "Debug"); var frameworks = FILE.list(frameworksDir); @@ -137,7 +137,7 @@ function updateApplicationSize() addBundleFileSizes(themePath, totalBytes); // Add sizes for the app - addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes); print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); @@ -149,7 +149,7 @@ function updateApplicationSize() plist.setValueForKey("CPApplicationSize", dict); - FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); + FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); } function addBundleFileSizes(bundlePath, totalBytes) From 45248bcb6553ecc797af910d261c3ea25c791393 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Nov 2014 12:17:58 -0800 Subject: [PATCH 31/70] FIXED: ivars warning fixes --- Foundation/CPDateFormatter.j | 1 + Foundation/CPTimeZone.j | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Foundation/CPDateFormatter.j b/Foundation/CPDateFormatter.j index b7c74cbf1..59a48019d 100644 --- a/Foundation/CPDateFormatter.j +++ b/Foundation/CPDateFormatter.j @@ -28,6 +28,7 @@ @import "CPLocale.j" @class CPNull +@class CPDictionary @global CPLocaleLanguageCode @global CPLocaleCountryCode diff --git a/Foundation/CPTimeZone.j b/Foundation/CPTimeZone.j index 3d294c25f..4b4ba6c1b 100644 --- a/Foundation/CPTimeZone.j +++ b/Foundation/CPTimeZone.j @@ -24,6 +24,8 @@ @import "CPDate.j" @import "CPLocale.j" +@class CPData + CPTimeZoneNameStyleStandard = 0; CPTimeZoneNameStyleShortStandard = 1; CPTimeZoneNameStyleDaylightSaving = 2; From 0f791be1956666ed131652a521b7c3ba3a16aec9 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Nov 2014 12:20:56 -0800 Subject: [PATCH 32/70] FIXED: config warning issues --- Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj index dce859d69..3449e0637 100644 --- a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj +++ b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj @@ -19,7 +19,7 @@ E164FE181720F44B00263CE3 /* parser.j in Resources */ = {isa = PBXBuildFile; fileRef = E164FE171720F44B00263CE3 /* parser.j */; }; E164FE1A1720F49A00263CE3 /* Growl Registration Ticket.growlRegDict in Resources */ = {isa = PBXBuildFile; fileRef = E164FE191720F49A00263CE3 /* Growl Registration Ticket.growlRegDict */; }; E164FE1F1720F51E00263CE3 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E164FE1D1720F50100263CE3 /* CoreServices.framework */; }; - E164FE211720F55600263CE3 /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E164FDF61720EBD600263CE3 /* Growl.framework */; }; + E164FE211720F55600263CE3 /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E164FDF61720EBD600263CE3 /* Growl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E164FE2F1721A34900263CE3 /* icon-active.png in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2C1721A34900263CE3 /* icon-active.png */; }; E164FE301721A34900263CE3 /* icon-inactive.png in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2D1721A34900263CE3 /* icon-inactive.png */; }; E164FE311721A34900263CE3 /* icon-working.png in Resources */ = {isa = PBXBuildFile; fileRef = E164FE2E1721A34900263CE3 /* icon-working.png */; }; @@ -34,7 +34,7 @@ E171D25F173C168C00210893 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E171D25E173C168C00210893 /* Foundation.framework */; }; E171D262173C168C00210893 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E171D261173C168C00210893 /* main.m */; }; E171D26A173C1ADD00210893 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E164FE1D1720F50100263CE3 /* CoreServices.framework */; }; - E171D26C173C1C8300210893 /* xcc in CopyFiles */ = {isa = PBXBuildFile; fileRef = E171D25D173C168C00210893 /* xcc */; }; + E171D26C173C1C8300210893 /* xcc in CopyFiles */ = {isa = PBXBuildFile; fileRef = E171D25D173C168C00210893 /* xcc */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E17A822D172700B90095CD83 /* XcodeCapp.iconset in Resources */ = {isa = PBXBuildFile; fileRef = E17A822C172700B90095CD83 /* XcodeCapp.iconset */; }; E17B55411732F57700809FFB /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E17B55401732F57700809FFB /* Quartz.framework */; }; E1A5594A172C5EE20088FB61 /* FindSourceFilesOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A55949172C5EE20088FB61 /* FindSourceFilesOperation.m */; }; @@ -389,7 +389,7 @@ E164FDC71720E77100263CE3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + LastUpgradeCheck = 0610; ORGANIZATIONNAME = "Cappuccino Project"; }; buildConfigurationList = E164FDCA1720E77100263CE3 /* Build configuration list for PBXProject "XcodeCapp" */; @@ -501,6 +501,7 @@ baseConfigurationReference = E164FDEF1720E7FA00263CE3 /* Debug.xcconfig */; buildSettings = { DSTROOT = /; + ONLY_ACTIVE_ARCH = YES; }; name = Debug; }; @@ -540,7 +541,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; @@ -576,7 +576,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; From aee89b1f63f2175d15b3ed115a0980a7479e9807 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Nov 2014 12:21:23 -0800 Subject: [PATCH 33/70] NEW: option to define if the reporting window should stay on top --- Tools/XcodeCapp/XcodeCapp/AppController.m | 3 +- Tools/XcodeCapp/XcodeCapp/UserDefaults.h | 1 + Tools/XcodeCapp/XcodeCapp/UserDefaults.m | 3 +- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 11 +- .../XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib | 159 ++++++++++++++---- 5 files changed, 140 insertions(+), 37 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/AppController.m b/Tools/XcodeCapp/XcodeCapp/AppController.m index e72307bd3..4647a079f 100644 --- a/Tools/XcodeCapp/XcodeCapp/AppController.m +++ b/Tools/XcodeCapp/XcodeCapp/AppController.m @@ -154,7 +154,8 @@ AppController *SharedAppControllerInstance = nil; kDefaultAutoOpenXcodeProject: @YES, kDefaultUseSymlinkWhenCreatingProject: @YES, kDefaultXCCUseDebugFrameworkWithObjj: @YES, - kDefaultXCCShouldProcessObjj: @YES + kDefaultXCCShouldProcessObjj: @YES, + kDefaultXCCPanelStyleUtility: @NO }; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h index 2843e57c7..9e5d5b804 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.h +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.h @@ -31,5 +31,6 @@ extern NSString * const kDefaultLogLevel; extern NSString * const kDefaultAutoOpenXcodeProject; extern NSString * const kDefaultUseSymlinkWhenCreatingProject; extern NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch; +extern NSString * const kDefaultXCCPanelStyleUtility; #endif diff --git a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m index 18e976581..d88657a6f 100644 --- a/Tools/XcodeCapp/XcodeCapp/UserDefaults.m +++ b/Tools/XcodeCapp/XcodeCapp/UserDefaults.m @@ -28,4 +28,5 @@ NSString * const kDefaultMaxRecentProjects = @"maxRecentProjects"; NSString * const kDefaultLogLevel = @"logLevel"; NSString * const kDefaultAutoOpenXcodeProject = @"autoOpenXcodeProject"; NSString * const kDefaultUseSymlinkWhenCreatingProject = @"useSymlinkWhenCreatingProject"; -NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; \ No newline at end of file +NSString * const kDefaultUpdateCappuccinoWithLastVersionOfMasterBranch = @"updateCappuccinoWithLastVersionOfMasterBranch"; +NSString * const kDefaultXCCPanelStyleUtility = @"XCCPanelStyleUtility"; \ No newline at end of file diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index f326c2654..3037b6651 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1566,18 +1566,21 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, - (IBAction)openErrorsPanel:(id)aSender { [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + [self.errorsPanel setFloatingPanel:[[NSUserDefaults standardUserDefaults] boolForKey:kDefaultXCCPanelStyleUtility]]; [self.errorsPanel makeKeyAndOrderFront:nil]; } - (IBAction)openErrorInEditor:(id)sender { id info = self.errorListController.selection; - - NSString *path = [info valueForKey:@"path"]; - + + NSString *path = [info valueForKey:@"realPath"] ? [info valueForKey:@"realPath"] : [info valueForKey:@"path"]; + + NSLog(@"09090900 %@", info); + if (path == NSNoSelectionMarker) return; - + if ([self isObjjFile:path]) { [self openObjjFile:path line:[[info valueForKey:@"line"] intValue]]; diff --git a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib index 239798b27..28098a798 100644 --- a/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib +++ b/Tools/XcodeCapp/XcodeCapp/en.lproj/MainMenu.xib @@ -2,9 +2,9 @@ 1060 - 14A389 + 14B17 6250 - 1343.14 + 1343.15 755.00 6250 @@ -243,7 +243,7 @@ - + 256 @@ -251,6 +251,8 @@ 268 {{164, 20}, {203, 143}} + + YES 68157504 @@ -287,6 +289,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 266 {{164, 171}, {221, 74}} + YES @@ -334,6 +337,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{17, 108}, {128, 128}} + YES @@ -353,24 +357,26 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {402, 247} + + - {{0, 0}, {1440, 877}} + {{0, 0}, {1440, 900}} {10000000000000, 10000000000000} NO 15 2 - {{1826, 825}, {550, 237}} - 1618478080 + {{890, 663}, {550, 237}} + 1613759488 Reporting NSPanel {315, 77} - + 256 @@ -386,6 +392,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 256 {550, 201} + YES NO @@ -462,6 +469,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{1, 1}, {550, 201}} + @@ -473,6 +481,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ -2147483392 {{1, 273}, {512, 16}} + NO _doScroller: @@ -486,6 +495,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ -2147483392 {{535, 1}, {16, 45}} + NO _doScroller: @@ -496,6 +506,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{-1, 35}, {552, 203}} + 133682 @@ -511,6 +522,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 289 {{352, 8}, {85, 19}} + {250, 750} YES @@ -539,6 +551,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 292 {{20, 8}, {85, 19}} + {250, 750} YES @@ -563,6 +576,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 289 {{445, 8}, {85, 19}} + + {250, 750} YES @@ -583,19 +598,21 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {550, 237} + + - {{1440, -180}, {1920, 1057}} + {{0, 0}, {1440, 900}} {315, 99} {10000000000000, 10000000000000} - errorPanel + YES 3 2 - {{1964, 505}, {369, 473}} - 1618478080 + {{534, 231}, {369, 510}} + 1613235200 Preferences NSWindow @@ -615,7 +632,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 81}, {271, 18}} + {{16, 118}, {271, 18}} @@ -649,10 +666,10 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{16, 51}, {241, 18}} + {{16, 88}, {241, 18}} - + YES -2080374784 @@ -671,10 +688,35 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO + + + 268 + {{16, 58}, {260, 18}} + + + + YES + + -2080374784 + 0 + Errors & Warnings panel always on top + + + 1211912448 + 2 + + + + + 400 + 75 + + NO + 268 - {{16, 109}, {298, 18}} + {{16, 146}, {298, 18}} @@ -699,7 +741,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{15, 20}, {106, 17}} + {{16, 17}, {106, 17}} @@ -719,7 +761,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ 268 - {{124, 14}, {56, 26}} + {{125, 11}, {56, 26}} @@ -794,13 +836,13 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {{1, 1}, {330, 139}} + {{1, 1}, {330, 176}} - {{17, 303}, {332, 155}} + {{17, 303}, {332, 192}} @@ -1144,12 +1186,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ NO - {369, 473} + {369, 510} - {{1440, -180}, {1920, 1057}} + {{0, 0}, {1440, 900}} {10000000000000, 10000000000000} xcc-prefs YES @@ -1164,7 +1206,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ - + 256 @@ -1176,8 +1218,6 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {{0, 8}, {716, 654}} - - YES 1 NO @@ -1186,11 +1226,9 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ {716, 662} - - - {{0, 0}, {1440, 877}} + {{0, 0}, {1440, 900}} {10000000000000, 10000000000000} YES @@ -1291,7 +1329,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ _NS:21 - {{0, 0}, {1440, 877}} + {{0, 0}, {1440, 900}} {10000000000000, 10000000000000} updatingCappuccinoPanel YES @@ -1564,6 +1602,14 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ HyN-S0-KXD + + + save: + + + + A92-fj-Uci + openXcodeProject: @@ -2030,6 +2076,26 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ dP2-Fc-one + + + value: values.XCCPanelStyleUtility + + + + + + value: values.XCCPanelStyleUtility + value + values.XCCPanelStyleUtility + + NSValidatesImmediately + + + 2 + + + uUW-Ro-3aA + value: values.updateCappuccinoWithLastVersionOfMasterBranch @@ -2488,6 +2554,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + @@ -2854,6 +2921,19 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + + GDP-7Q-0W5 + + + + + + + + QpC-n8-rmF + + + @@ -2885,6 +2965,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + {182, 582.5} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2895,11 +2976,12 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ + {239, 248.5} com.apple.InterfaceBuilder.CocoaPlugin - - - {-243.5, 329.5} + + + {-183.5, 363} com.apple.InterfaceBuilder.CocoaPlugin @@ -3063,6 +3145,7 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -3084,6 +3167,18 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + If this is checked, when a Cappuccino project is opened, the project’s Xcode support project will be opened automatically + + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip @@ -3116,6 +3211,8 @@ bnRvaW5lIE1lcmNhZGFsCiAgICBhbnRvaW5lLm1lcmNhZGFsQGdtYWlsLmNvbQ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin From 1ce6a630d2ac186e8daaaffaa00d5b050b1fc15d Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 6 Nov 2014 13:29:16 -0800 Subject: [PATCH 34/70] Fixed: warnings from objj were displayed several times --- Tools/XcodeCapp/XcodeCapp/XcodeCapp.m | 39 ++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m index f326c2654..081f44db4 100644 --- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m +++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp.m @@ -1573,8 +1573,8 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, { id info = self.errorListController.selection; - NSString *path = [info valueForKey:@"path"]; - + NSString *path = [info valueForKey:@"realPath"] ? [info valueForKey:@"realPath"] : [info valueForKey:@"path"]; + if (path == NSNoSelectionMarker) return; @@ -1890,7 +1890,6 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, NSMutableArray *errors = [NSMutableArray arrayWithArray:[response componentsSeparatedByString:@"\n\n"]]; NSInteger numberOfErrors = [errors count]; - i = 0; NSMutableArray *dicts = [NSMutableArray array]; // When checking of the entire project, we have to be ready to find errors @@ -1901,6 +1900,8 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, if ([paths count] == 1) filePath = [paths firstObject]; + i = 0; + for (i = 0; i < numberOfErrors; i++) { NSMutableString *error = (NSMutableString*)[errors objectAtIndex:i]; @@ -1965,10 +1966,36 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, path , @"realPath", nil]; - // Compiler can show several times the same errors - if (![dicts containsObject:dict] && ![self.errorList containsObject:dict]) - [dicts addObject:dict]; + // Block to compare dicts + BOOL (^dictComparaison)(id obj, NSUInteger idx, BOOL *stop) = ^(id obj, NSUInteger idx, BOOL *stop){ + if ([obj valueForKey:@"line"] == [dict valueForKey:@"line"]) + { + // For an unknown reason, trim doesn't work + NSString *messsageObj = [obj valueForKey:@"message"]; + NSString *messsageDict = [dict valueForKey:@"message"]; + + messsageDict = [messsageDict stringByReplacingOccurrencesOfString:@" " withString:@""]; + messsageDict = [messsageDict stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + + messsageObj = [messsageObj stringByReplacingOccurrencesOfString:@" " withString:@""]; + messsageObj = [messsageObj stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + + if ([messsageDict isEqualToString:messsageObj]) + { + *stop = YES; + return YES; + } + } + + return NO; + }; + NSUInteger isInDict = [dicts indexOfObjectPassingTest:dictComparaison]; + NSUInteger isInList = [self.errorList indexOfObjectPassingTest:dictComparaison]; + + // Compiler can show several times the same errors + if (isInDict == NSNotFound && isInList == NSNotFound) + [dicts addObject:dict]; } [self performSelectorOnMainThread:@selector(objjCompilerDidGenerateError:) withObject:dicts waitUntilDone:YES]; From 57d435b6db378a1681f861b4f269838e4a5d5d5e Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Nov 2014 14:59:40 -0800 Subject: [PATCH 35/70] NEW: .gitignore ignores .tm_properties --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9d53e1758..11a5e1abf 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ xcuserdata/ Tests/Manual/**/*.xcodeproj *.sublime-project *.sublime-workspace +*.tm_properties From ab2657b795f22817dfd1a81240b8aee077e7d582 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 6 Nov 2014 15:11:58 -0800 Subject: [PATCH 36/70] Fixed compilation warning in nib2cib --- Tools/nib2cib/NSDatePicker.j | 2 +- Tools/nib2cib/NSImageView.j | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Tools/nib2cib/NSDatePicker.j b/Tools/nib2cib/NSDatePicker.j index d3af0690c..a90983ec5 100644 --- a/Tools/nib2cib/NSDatePicker.j +++ b/Tools/nib2cib/NSDatePicker.j @@ -180,7 +180,7 @@ var NSDatePickerDefaultSize = 22, CPDateFormatter _formatter @accessors(getter=formatter); CPInteger _datePickerMode @accessors(getter=datePickerMode); CPInteger _datePickerElements @accessors(getter=datePickerElements); - CPinteger _datePickerType @accessors(getter=datePickerType); + CPInteger _datePickerType @accessors(getter=datePickerType); double _timeInterval @accessors(getter=timeInterval); CPColor _textColor @accessors(getter=textColor); CPColor _backgroundColor @accessors(getter=backgroundColor); diff --git a/Tools/nib2cib/NSImageView.j b/Tools/nib2cib/NSImageView.j index 909089fdf..02fd50f52 100644 --- a/Tools/nib2cib/NSImageView.j +++ b/Tools/nib2cib/NSImageView.j @@ -67,7 +67,7 @@ @end // NSImageCell - +@typedef NSImageAlignment NSImageAlignCenter = 0; NSImageAlignTop = 1; NSImageAlignTopLeft = 2; @@ -78,12 +78,13 @@ NSImageAlignBottomLeft = 6; NSImageAlignBottomRight = 7; NSImageAlignRight = 8; - +@typedef NSImageScaling NSImageScaleProportionallyDown = 0; NSImageScaleAxesIndependently = 1; NSImageScaleNone = 2; NSImageScaleProportionallyUpOrDown = 3; +@typedef NSImageFrameStyle NSImageFrameNone = 0; NSImageFramePhoto = 1; NSImageFrameGrayBezel = 2; From 9a307269ca6d8f7a3c680b5e0fe5d31584857875 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Fri, 7 Nov 2014 14:25:35 -0800 Subject: [PATCH 37/70] FIXED: CPButtonBar was not removing old button set from the view This patch ensure that when we are using setButtons: old buttons are actually removed from the superview --- AppKit/CPButtonBar.j | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index c524a2fcb..024924830 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -133,7 +133,11 @@ - (void)setButtons:(CPArray)buttons { for (var i = [_buttons count] - 1; i >= 0; i--) + { + [_buttons[i] removeFromSuperview]; [_buttons[i] removeObserver:self forKeyPath:@"hidden"]; + } + _buttons = [CPArray arrayWithArray:buttons]; From 664d5777fd95d442aaf7325fb8b6d8369ad5a598 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 7 Nov 2014 15:43:18 -0800 Subject: [PATCH 38/70] Fixed: CPWindow doesn't take the event when moving from another platformWindow Previously, when moving from platformWindow to another platformWindow, the targeted window didn't get the new event because the keyWindow of the application was still set to the other platformWindow. This PR fixes another issue about opening panel in a platformWindow. When opening a panel in a platformWindow, cappuccino set the new key window to the wrong platformWindow. --- AppKit/CPWindow/CPWindow.j | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index f770fc642..969d9fad7 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -1846,6 +1846,12 @@ CPTexturedBackgroundWindowMask if (_leftMouseDownView !== _firstResponder && [_leftMouseDownView acceptsFirstResponder]) [self makeFirstResponder:_leftMouseDownView]; + var keyWindow = [CPApp keyWindow]; + + // This is only when we move from a platform to another one + if ([keyWindow platformWindow] != [self platformWindow]) + [self makeKeyAndOrderFront:self]; + [CPApp activateIgnoringOtherApps:YES]; var theWindow = [anEvent window], @@ -2477,7 +2483,7 @@ CPTexturedBackgroundWindowMask if (currentWindow === self || currentWindow === menuWindow) continue; - if ([currentWindow isVisible] && [currentWindow canBecomeKeyWindow]) + if ([currentWindow isVisible] && [currentWindow canBecomeKeyWindow] && [currentWindow platformWindow] == [keyWindow platformWindow]) { [currentWindow makeKeyWindow]; break; From 0cafb3fac53df9b338940322845db5142d622065 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 10 Nov 2014 17:03:34 -0800 Subject: [PATCH 39/70] FIXED: CPViewController coming from a XIB could call viewDidLoad two times This patch ensure that CPViewController is never calling viewDidLoad more than one time. --- AppKit/CPViewController.j | 1 + 1 file changed, 1 insertion(+) diff --git a/AppKit/CPViewController.j b/AppKit/CPViewController.j index 2ea3a05de..0c9bec99e 100644 --- a/AppKit/CPViewController.j +++ b/AppKit/CPViewController.j @@ -210,6 +210,7 @@ var CPViewControllerCachedCibs; [cibOwner viewControllerDidLoadCib:self]; _isLoading = NO; + _isLazy = NO; [self _viewDidLoad]; } else if (_isLazy) From 0c7b2ae7023ba18a59f75cbf868f28e0d53917f9 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 12 Nov 2014 23:59:46 -0800 Subject: [PATCH 40/70] NEW: Support for multiline mode in CPTextField This patch adds support for CPTextField with multiline content. It uses a DOM textarea when needed, instead of DOM input. It also disable the spellchecking, fixes a bug where the input element was not correctly resized when the frame changed, and refactor some code --- AppKit/CPTextField.j | 282 ++++++++++++--------- AppKit/Platform/DOM/CPPlatformWindow+DOM.j | 2 +- 2 files changed, 164 insertions(+), 120 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index fc3d833d9..63ea80fe2 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -47,9 +47,10 @@ CPTextFieldRoundedBezel = 1; /*! A textfield bezel with rounded corne CPTextFieldDidFocusNotification = @"CPTextFieldDidFocusNotification"; CPTextFieldDidBlurNotification = @"CPTextFieldDidBlurNotification"; -var CPTextFieldDOMInputElement = nil, - CPTextFieldDOMPasswordInputElement = nil, +var CPTextFieldDOMCurrentElement = nil, + CPTextFieldDOMTextAreaElement = nil, CPTextFieldDOMStandardInputElement = nil, + CPTextFieldDOMPasswordInputElement = nil, CPTextFieldInputOwner = nil, CPTextFieldTextDidChangeValue = nil, CPTextFieldInputResigning = NO, @@ -142,6 +143,9 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // NS-style Display Properties CPTextFieldBezelStyle _bezelStyle; BOOL _isBordered; + BOOL _usesSingleLineMode; + BOOL _wraps; + BOOL _scrolls; } + (Class)_binderClassForBinding:(CPString)aBinding @@ -246,95 +250,106 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); #if PLATFORM(DOM) - (DOMElement)_inputElement { - if (!CPTextFieldDOMInputElement) + if (!CPTextFieldDOMTextAreaElement) { - CPTextFieldDOMInputElement = document.createElement("input"); - CPTextFieldDOMInputElement.style.position = "absolute"; - CPTextFieldDOMInputElement.style.border = "0px"; - CPTextFieldDOMInputElement.style.padding = "0px"; - CPTextFieldDOMInputElement.style.margin = "0px"; - CPTextFieldDOMInputElement.style.whiteSpace = "pre"; - CPTextFieldDOMInputElement.style.background = "transparent"; - CPTextFieldDOMInputElement.style.outline = "none"; + CPTextFieldDOMTextAreaElement = document.createElement("textarea"); + CPTextFieldDOMTextAreaElement.style.position = "absolute"; + CPTextFieldDOMTextAreaElement.style.border = "0px"; + CPTextFieldDOMTextAreaElement.style.padding = "0px"; + CPTextFieldDOMTextAreaElement.style.margin = "0px"; + CPTextFieldDOMTextAreaElement.style.background = "transparent"; + CPTextFieldDOMTextAreaElement.style.outline = "none"; + CPTextFieldDOMTextAreaElement.style.resize = "none"; + CPTextFieldDOMTextAreaElement.style.overflow = "hidden"; + CPTextFieldDOMTextAreaElement.spellcheck = NO; + } + if (!CPTextFieldDOMStandardInputElement) + { + CPTextFieldDOMStandardInputElement = document.createElement("input"); + CPTextFieldDOMStandardInputElement.style.position = "absolute"; + CPTextFieldDOMStandardInputElement.style.border = "0px"; + CPTextFieldDOMStandardInputElement.style.padding = "0px"; + CPTextFieldDOMStandardInputElement.style.margin = "0px"; + CPTextFieldDOMStandardInputElement.style.whiteSpace = "pre"; + CPTextFieldDOMStandardInputElement.style.background = "transparent"; + CPTextFieldDOMStandardInputElement.style.outline = "none"; + CPTextFieldDOMStandardInputElement.spellcheck = NO; + } + + if (!CPTextFieldDOMPasswordInputElement) + { + CPTextFieldDOMPasswordInputElement = document.createElement("input"); + CPTextFieldDOMPasswordInputElement.style.position = "absolute"; + CPTextFieldDOMPasswordInputElement.style.border = "0px"; + CPTextFieldDOMPasswordInputElement.style.padding = "0px"; + CPTextFieldDOMPasswordInputElement.style.margin = "0px"; + CPTextFieldDOMPasswordInputElement.style.whiteSpace = "pre"; + CPTextFieldDOMPasswordInputElement.style.background = "transparent"; + CPTextFieldDOMPasswordInputElement.style.outline = "none"; + CPTextFieldDOMPasswordInputElement.type = "password"; + CPTextFieldDOMPasswordInputElement.spellcheck = NO; + } + + if (!CPTextFieldBlurHandler) + { CPTextFieldBlurHandler = function(anEvent) { return CPTextFieldBlurFunction( anEvent, CPTextFieldInputOwner, CPTextFieldInputOwner ? CPTextFieldInputOwner._DOMElement : nil, - CPTextFieldDOMInputElement, + CPTextFieldDOMCurrentElement, CPTextFieldInputResigning, @ref(CPTextFieldInputDidBlur)); }; + } - if (CPFeatureIsCompatible(CPInputOnInputEventFeature)) + if (!CPTextFieldInputFunction) + { + if (!CPFeatureIsCompatible(CPInputOnInputEventFeature)) + return; + + CPTextFieldInputFunction = function(anEvent) { - CPTextFieldInputFunction = function(anEvent) - { - if (!CPTextFieldInputOwner) - return; + if (!CPTextFieldInputOwner) + return; - var cappEvent = [CPEvent keyEventWithType:CPKeyUp - location:CGPointMakeZero() - modifierFlags:0 - timestamp:[CPEvent currentTimestamp] - windowNumber:[[CPApp keyWindow] windowNumber] - context:nil - characters:nil - charactersIgnoringModifiers:nil - isARepeat:NO - keyCode:nil]; + var cappEvent = [CPEvent keyEventWithType:CPKeyUp + location:CGPointMakeZero() + modifierFlags:0 + timestamp:[CPEvent currentTimestamp] + windowNumber:[[CPApp keyWindow] windowNumber] + context:nil + characters:nil + charactersIgnoringModifiers:nil + isARepeat:NO + keyCode:nil]; - [CPTextFieldInputOwner keyUp:cappEvent]; + [CPTextFieldInputOwner keyUp:cappEvent]; - [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; - } - - CPTextFieldDOMInputElement.oninput = CPTextFieldInputFunction; + [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode]; } - // FIXME make this not onblur - CPTextFieldDOMInputElement.onblur = CPTextFieldBlurHandler; + CPTextFieldDOMPasswordInputElement.oninput = CPTextFieldInputFunction; + CPTextFieldDOMPasswordInputElement.onblur = CPTextFieldBlurHandler; - CPTextFieldDOMStandardInputElement = CPTextFieldDOMInputElement; + CPTextFieldDOMStandardInputElement.oninput = CPTextFieldInputFunction; + CPTextFieldDOMPasswordInputElement.onblur = CPTextFieldBlurHandler; + + CPTextFieldDOMTextAreaElement.oninput = CPTextFieldInputFunction; + CPTextFieldDOMTextAreaElement.onblur = CPTextFieldBlurHandler; } - if (CPFeatureIsCompatible(CPInputTypeCanBeChangedFeature)) - { - if ([self isSecure]) - CPTextFieldDOMInputElement.type = "password"; - else - CPTextFieldDOMInputElement.type = "text"; - - return CPTextFieldDOMInputElement; - } if ([self isSecure]) - { - if (!CPTextFieldDOMPasswordInputElement) - { - CPTextFieldDOMPasswordInputElement = document.createElement("input"); - CPTextFieldDOMPasswordInputElement.style.position = "absolute"; - CPTextFieldDOMPasswordInputElement.style.border = "0px"; - CPTextFieldDOMPasswordInputElement.style.padding = "0px"; - CPTextFieldDOMPasswordInputElement.style.margin = "0px"; - CPTextFieldDOMPasswordInputElement.style.whiteSpace = "pre"; - CPTextFieldDOMPasswordInputElement.style.background = "transparent"; - CPTextFieldDOMPasswordInputElement.style.outline = "none"; - CPTextFieldDOMPasswordInputElement.type = "password"; - - CPTextFieldDOMPasswordInputElement.onblur = CPTextFieldBlurHandler; - } - - CPTextFieldDOMInputElement = CPTextFieldDOMPasswordInputElement; - } + CPTextFieldDOMCurrentElement = CPTextFieldDOMPasswordInputElement; + else if (_usesSingleLineMode) + CPTextFieldDOMCurrentElement = CPTextFieldDOMStandardInputElement; else - { - CPTextFieldDOMInputElement = CPTextFieldDOMStandardInputElement; - } + CPTextFieldDOMCurrentElement = CPTextFieldDOMTextAreaElement; - return CPTextFieldDOMInputElement; + return CPTextFieldDOMCurrentElement; } #endif @@ -553,6 +568,24 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); return _textFieldBackgroundColor; } +/*! @ignore */ +- (void)_setUsesSingleLineMode:(BOOL)aFlag +{ + _usesSingleLineMode = aFlag; +} + +/*! @ignore */ +- (void)_setWraps:(BOOL)aFlag +{ + _wraps = aFlag; +} + +/*! @ignore */ +- (void)_setScrolls:(BOOL)aFlag +{ + _scrolls = aFlag; +} + /*! @ignore */ - (BOOL)acceptsFirstResponder { @@ -608,28 +641,10 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _setCSSStyleForInputElement]; - var element = [self _inputElement], - font = [self currentValueForThemeAttribute:@"font"], - contentRect = [self contentRectForBounds:[self bounds]], - left = CGRectGetMinX(contentRect); - + var element = [self _inputElement]; element.value = _stringValue; - - // If the browser has a built in left padding, compensate for it. We need the input text to be exactly on top of the original text. - if (CPFeatureIsCompatible(CPInput1PxLeftPadding)) - left -= 1; - - element.style.left = left + "px"; - element.style.width = CGRectGetWidth(contentRect) + "px"; - element.style.verticalAlign = "top"; - element.style.cursor = "auto"; - _DOMElement.appendChild(element); - // The font change above doesn't work for some browsers if the element isn't already appendChild'ed. - if (!CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) - element.style.font = [font cssString]; - CPTextFieldInputIsActive = YES; if (document.attachEvent) @@ -673,37 +688,18 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); */ - (void)_setCSSStyleForInputElement { - #if PLATFORM(DOM) - var element = [self _inputElement], - font = [self currentValueForThemeAttribute:@"font"], - lineHeight = [font defaultLineHeightForFont], - contentRect = [self contentRectForBounds:[self bounds]], - verticalAlign = [self currentValueForThemeAttribute:"vertical-alignment"]; - if ([self hasThemeState:CPTextFieldStatePlaceholder]) - element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPTextFieldStatePlaceholder] cssString]; - else - element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPThemeStateEditing] cssString]; + var element = [self _inputElement], + font = [self currentValueForThemeAttribute:@"font"], + lineHeight = [font defaultLineHeightForFont], + contentRect = [self contentRectForBounds:[self bounds]], + verticalAlign = [self currentValueForThemeAttribute:"vertical-alignment"], + left = CGRectGetMinX(contentRect); - if (CPFeatureIsCompatible(CPInputSetFontOutsideOfDOM)) - element.style.font = [font cssString]; - - element.style.zIndex = 1000; - - switch ([self alignment]) - { - case CPCenterTextAlignment: - element.style.textAlign = "center"; - break; - - case CPRightTextAlignment: - element.style.textAlign = "right"; - break; - - default: - element.style.textAlign = "left"; - } + // If the browser has a built in left padding, compensate for it. We need the input text to be exactly on top of the original text. + if (CPFeatureIsCompatible(CPInput1PxLeftPadding)) + left -= 1; switch (verticalAlign) { @@ -724,12 +720,41 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); break; } - element.style.top = topPoint; - element.style.height = ROUND(lineHeight) + "px"; - element.style.lineHeight = ROUND(lineHeight) + "px"; + if ([self hasThemeState:CPTextFieldStatePlaceholder]) + element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPTextFieldStatePlaceholder] cssString]; + else + element.style.color = [[self valueForThemeAttribute:@"text-color" inState:CPThemeStateEditing] cssString]; + + switch ([self alignment]) + { + case CPCenterTextAlignment: + element.style.textAlign = "center"; + break; + + case CPRightTextAlignment: + element.style.textAlign = "right"; + break; + + default: + element.style.textAlign = "left"; + } + + var isTextArea = element.nodeName.toUpperCase() == "TEXTAREA"; + + element.style.zIndex = 1000; + element.style.top = topPoint; + element.style.lineHeight = ROUND(lineHeight) + "px"; + element.style.height = isTextArea ? CGRectGetHeight(contentRect) + "px" : ROUND(lineHeight) + "px";; + element.style.width = CGRectGetWidth(contentRect) + "px"; + element.style.left = left + "px"; + element.style.verticalAlign = "top"; + element.style.cursor = "auto"; + element.style.font = [font cssString]; + + if (isTextArea) + element.style.whiteSpace = _wraps ? "pre" : "nowrap"; #endif - } /*! @ignore */ @@ -1054,6 +1079,9 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _didEdit]; } + console.error("newValue : >" + newValue + "<") + console.error("_stringValue : >" + _stringValue + "<") + if ([self _valueIsValid:_stringValue]) { // If _isEditing == YES then the target action can also be called via @@ -1099,7 +1127,11 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); range = [self selectedRange], element = [self _inputElement]; - element.value = [element.value stringByReplacingCharactersInRange:[self selectedRange] withString:aCharacter]; + // we don't need to do this in case of textarea + // or we will end up with 2 carriage returns + if (aCharacter != CPNewlineCharacter || element.nodeName.toUpperCase() != "TEXTAREA") + element.value = [element.value stringByReplacingCharactersInRange:[self selectedRange] withString:aCharacter]; + [self _setStringValue:element.value]; // NOTE: _stringValue is now the current input element value @@ -1944,7 +1976,11 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", CPTextFieldLineBreakModeKey = "CPTextFieldLineBreakModeKey", CPTextFieldAlignmentKey = "CPTextFieldAlignmentKey", CPTextFieldBackgroundColorKey = "CPTextFieldBackgroundColorKey", - CPTextFieldPlaceholderStringKey = "CPTextFieldPlaceholderStringKey"; + CPTextFieldPlaceholderStringKey = "CPTextFieldPlaceholderStringKey", + CPTextFieldUsesSingleLineMode = "CPTextFieldUsesSingleLineMode", + CPTextFieldWraps = "CPTextFieldWraps", + CPTextFieldScrolls = "CPTextFieldScrolls"; + @implementation CPTextField (CPCoding) @@ -1970,6 +2006,10 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [self setAlignment:[aCoder decodeIntForKey:CPTextFieldAlignmentKey]]; [self setPlaceholderString:[aCoder decodeObjectForKey:CPTextFieldPlaceholderStringKey]]; + + [self _setUsesSingleLineMode:[aCoder decodeBoolForKey:CPTextFieldUsesSingleLineMode]]; + [self _setWraps:[aCoder decodeBoolForKey:CPTextFieldWraps]]; + [self _setScrolls:[aCoder decodeBoolForKey:CPTextFieldScrolls]]; } return self; @@ -1994,6 +2034,10 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [aCoder encodeInt:[self alignment] forKey:CPTextFieldAlignmentKey]; [aCoder encodeObject:_placeholderString forKey:CPTextFieldPlaceholderStringKey]; + + [aCoder encodeBool:_usesSingleLineMode forKey:CPTextFieldUsesSingleLineMode]; + [aCoder encodeBool:_wraps forKey:CPTextFieldWraps]; + [aCoder encodeBool:_scrolls forKey:CPTextFieldScrolls]; } @end diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j index 31b1810ef..eeba3a894 100644 --- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j +++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j @@ -1143,7 +1143,7 @@ var PreventScroll = true; _mouseDownIsRightClick = button == 2 || (CPBrowserIsOperatingSystem(CPMacOperatingSystem) && button == 0 && modifierFlags & CPControlKeyMask); - if (sourceElement.tagName === "INPUT" && sourceElement != _DOMFocusElement) + if ((sourceElement.tagName === "INPUT" || sourceElement.tagName === "TEXTAREA") && sourceElement != _DOMFocusElement) { if ([CPPlatform supportsDragAndDrop]) { From e7cde2ca5ff14b193243248ccace24307fb8e73d Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 13 Nov 2014 00:10:22 -0800 Subject: [PATCH 41/70] Add support for usesMultilineMode and fix wraps and scrolls in nib2cib --- Tools/nib2cib/NSCell.j | 34 ++++++++++++++++++---------------- Tools/nib2cib/NSTextField.j | 4 ++++ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Tools/nib2cib/NSCell.j b/Tools/nib2cib/NSCell.j index 01307538a..8be4737b8 100644 --- a/Tools/nib2cib/NSCell.j +++ b/Tools/nib2cib/NSCell.j @@ -51,6 +51,7 @@ int _lineBreakMode @accessors(readonly, getter=lineBreakMode); CPFormatter _formatter @accessors(readonly, getter=formatter); int _tag @accessors(readonly, getter=tag); + BOOL _usesSingleLineMode @accessors(readonly, getter=usesSingleLineMode); } - (id)initWithCoder:(CPCoder)aCoder @@ -62,22 +63,23 @@ var flags = [aCoder decodeIntForKey:@"NSCellFlags"], flags2 = [aCoder decodeIntForKey:@"NSCellFlags2"]; - _state = (flags & 0x80000000) ? CPOnState : CPOffState; - _isHighlighted = (flags & 0x40000000) ? YES : NO; - _isEnabled = (flags & 0x20000000) ? NO : YES; - _isEditable = (flags & 0x10000000) ? YES : NO; - _isBordered = (flags & 0x00800000) ? YES : NO; - _isBezeled = (flags & 0x00400000) ? YES : NO; - _isSelectable = (flags & 0x00200000) ? YES : NO; - _isScrollable = (flags & 0x00100000) ? YES : NO; - _isContinuous = (flags & 0x00080100) ? YES : NO; - _scrolls = (flags & 0x00100000) && (flags & 0x00000040); - _wraps = (flags & 0x00100000 === 0) && (flags & 0x00000040 === 0); - _truncates = !(flags & 0x00100000) && (flags & 0x00000040); - _alignment = (flags2 & 0x1c000000) >> 26; - _lineBreakMode = (flags2 & 0x0E00) >> 9; - _controlSize = (flags2 & 0xE0000) >> 17; - _sendsActionOnEndEditing = (flags2 & 0x00400000) ? YES : NO; + _state = (flags & 0x80000000) ? CPOnState : CPOffState; + _isHighlighted = (flags & 0x40000000) ? YES : NO; + _isEnabled = (flags & 0x20000000) ? NO : YES; + _isEditable = (flags & 0x10000000) ? YES : NO; + _isBordered = (flags & 0x00800000) ? YES : NO; + _isBezeled = (flags & 0x00400000) ? YES : NO; + _isSelectable = (flags & 0x00200000) ? YES : NO; + _isScrollable = (flags & 0x00100000) ? YES : NO; + _isContinuous = (flags & 0x00080100) ? YES : NO; + _scrolls = (flags & 0x00100000) && (flags & 0x00000040) ? YES : NO; + _wraps = !(flags & 0x00100000) && !(flags & 0x00000040) ? YES : NO; + _truncates = (flags & 0x00100000) && !(flags & 0x00000040) ? YES : NO; + _alignment = (flags2 & 0x1c000000) >> 26; + _lineBreakMode = (flags2 & 0x0E00) >> 9; + _controlSize = (flags2 & 0xE0000) >> 17; + _sendsActionOnEndEditing = (flags2 & 0x00400000) ? YES : NO; + _usesSingleLineMode = (flags2 & 0xF4240) ? YES : NO; _tag = [aCoder decodeIntForKey:@"NSTag"]; diff --git a/Tools/nib2cib/NSTextField.j b/Tools/nib2cib/NSTextField.j index 711fb8f7e..cb0fa306b 100644 --- a/Tools/nib2cib/NSTextField.j +++ b/Tools/nib2cib/NSTextField.j @@ -54,6 +54,10 @@ [self setPlaceholderString:[cell placeholderString]]; + [self _setUsesSingleLineMode:[cell usesSingleLineMode]]; + [self _setWraps:[cell wraps]]; + [self _setScrolls:[cell scrolls]]; + var textColor = [cell textColor], defaultColor = [self currentValueForThemeAttribute:@"text-color"]; From de3f6d3e829cfeb8e7dd4c372651759ec82695af Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 13 Nov 2014 00:10:32 -0800 Subject: [PATCH 42/70] Add manual test --- .../CPTextFieldMultiline/AppController.j | 46 + Tests/Manual/CPTextFieldMultiline/Info.plist | 14 + Tests/Manual/CPTextFieldMultiline/Jakefile | 184 + .../Resources/MainMenu.cib | 3 + .../Resources/MainMenu.xib | 3604 +++++++++++++++++ .../CPTextFieldMultiline/index-debug.html | 191 + Tests/Manual/CPTextFieldMultiline/index.html | 161 + Tests/Manual/CPTextFieldMultiline/main.j | 18 + 8 files changed, 4221 insertions(+) create mode 100644 Tests/Manual/CPTextFieldMultiline/AppController.j create mode 100644 Tests/Manual/CPTextFieldMultiline/Info.plist create mode 100644 Tests/Manual/CPTextFieldMultiline/Jakefile create mode 100644 Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib create mode 100644 Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPTextFieldMultiline/index-debug.html create mode 100644 Tests/Manual/CPTextFieldMultiline/index.html create mode 100644 Tests/Manual/CPTextFieldMultiline/main.j diff --git a/Tests/Manual/CPTextFieldMultiline/AppController.j b/Tests/Manual/CPTextFieldMultiline/AppController.j new file mode 100644 index 000000000..db6ef8162 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/AppController.j @@ -0,0 +1,46 @@ +/* + * AppController.j + * CPTextFielMultine + * + * Created by You on November 12, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + + +@implementation AppController : CPObject +{ + @outlet CPTextField field1; + @outlet CPTextField field2; + @outlet CPTextField field3; + @outlet CPWindow theWindow; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var s = [field1 frameSize]; + s.height = 83; + [field1 setFrameSize:s] + + var s = [field2 frameSize]; + s.height = 83; + [field2 setFrameSize:s] + + var s = [field3 frameSize]; + s.height = 83; + [field3 setFrameSize:s] +} + +- (void)awakeFromCib +{ + [theWindow setFullPlatformWindow:YES]; +} + +- (IBAction)actionSent:(id)aSender +{ + CPLog.debug("action sent from " + aSender); +} + +@end diff --git a/Tests/Manual/CPTextFieldMultiline/Info.plist b/Tests/Manual/CPTextFieldMultiline/Info.plist new file mode 100644 index 000000000..4e6a94074 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPTextFieldMultiline + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2014, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPTextFieldMultiline/Jakefile b/Tests/Manual/CPTextFieldMultiline/Jakefile new file mode 100644 index 000000000..6d39494ac --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPTextFielMultine + * + * Created by You on November 12, 2014. + * Copyright 2014, 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"), + projectName = "CPTextFielMultine"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CPTextFielMultine.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPTextFielMultine"); + task.setIdentifier("com.yourcompany.CPTextFielMultine"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPTextFielMultine"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + 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", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +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", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPTextFielMultine.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPTextFielMultine.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (ENV["CONFIGURATION"] === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", ENV["CONFIGURATION"], projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", ENV["CONFIGURATION"], projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib new file mode 100644 index 000000000..9affdf898 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.cib @@ -0,0 +1,3 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;205E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;206E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;159E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;207E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;194E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;209E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;188E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;211E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;166E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;213E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;214E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;158E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;193E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;168E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;182E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;174E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;152E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;158E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;193E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;202E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;203E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;163E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;19E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;204E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;168E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;137E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;143E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;182E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;174E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;185E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;198E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;204E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;203E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;202E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;201E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;200E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;205E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;267E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;268E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;269E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;87E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;270E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;273E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;278E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;279E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;280E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;281E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;282E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;93E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;93E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;282E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;283E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;285E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;286E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;287E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;288E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;289E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;290E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;100E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;100E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;290E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;292E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;293E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;294E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;103E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;294E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;296E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;297E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;298E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;299E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;300E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;302E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;303E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;304E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;306E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;308E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;310E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;114E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;310E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;312E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;313E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;315E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;316E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;317E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;318E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;319E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;320E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;323E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;324E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;325E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;326E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;326E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;327E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;328E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;329E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;330E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;332E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;333E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;334E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;127E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;334E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;336E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;337E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;338E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;131E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;338E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;339E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;340E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;324E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;325E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;321E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;342E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;313E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;314E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;343E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;136E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;136E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;343E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;345E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;346E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;347E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;348E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;349E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;350E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;351E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;352E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;353E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;142E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;142E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;353E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;354E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;355E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;356E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;142E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;358E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;275E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;276E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;277E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;359E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;360E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;148E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;271E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;148E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;360E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;361E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;362E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;148E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;363E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;364E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;148E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;272E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;151E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;366E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;367E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;368E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;369E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;370E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;318E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;270E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;154E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;153E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;372E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;372E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;373E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;374E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;376E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;384E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;387E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;388E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;391E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;393E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;394E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;395E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;398E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;399E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;402E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;404E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;405E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;406E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;10;$classnameS;17;CPSecureTextFieldK;8;$classesA;S;17;CPSecureTextFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;407E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;408E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;412E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;414E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;415E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;417E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;418E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;420E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;408E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;421E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;422E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;423E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;424E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;426E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;427E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;428E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;10;$classnameS;10;CPComboBoxK;8;$classesA;S;10;CPComboBoxS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;173E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;429E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;430E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;431E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;432E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;K;18;CPComboBoxItemsKeyD;K;6;CP$UIDd;3;433E;K;17;CPComboBoxListKeyD;K;6;CP$UIDd;1;0E;K;21;CPComboBoxDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPComboBoxDataSourceKeyD;K;6;CP$UIDd;1;0E;K;27;CPComboBoxUsesDataSourceKeyD;K;6;CP$UIDd;3;277E;K;22;CPComboBoxCompletesKeyD;K;6;CP$UIDd;3;277E;K;33;CPComboBoxNumberOfVisibleItemsKeyD;K;6;CP$UIDd;3;434E;K;32;CPComboBoxHasVerticalScrollerKeyD;K;6;CP$UIDd;3;275E;K;27;CPComboBoxButtonBorderedKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;435E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;436E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;425E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;437E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;427E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;438E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;439E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;440E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;10;$classnameS;13;CPSearchFieldK;8;$classesA;S;13;CPSearchFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;441E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;442E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;443E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;K;27;CPSendsWholeSearchStringKeyD;K;6;CP$UIDd;3;277E;K;33;CPSendsSearchStringImmediatelyKeyD;K;6;CP$UIDd;3;275E;K;19;CPMaximumRecentsKeyD;K;6;CP$UIDd;3;444E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;445E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;446E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;447E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;10;$classnameS;12;CPTokenFieldK;8;$classesA;S;12;CPTokenFieldS;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;181E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;448E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;408E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;449E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;450E;K;11;$aalignmentD;K;6;CP$UIDd;3;371E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;451E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;371E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;K;37;CPTokenFieldTokenizingCharacterSetKeyD;K;6;CP$UIDd;1;0E;K;27;CPTokenFieldCompletionDelayD;K;6;CP$UIDd;1;0E;K;25;CPTokenFieldButtonTypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;452E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;453E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;184E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;454E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;455E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;456E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;457E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;458E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;371E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;371E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;371E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;461E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;462E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;463E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;460E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;464E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;465E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;466E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;467E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;413E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;469E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;470E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;395E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;398E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;471E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;472E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;473E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;388E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;474E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;475E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;476E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;477E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;395E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;396E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;276E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;275E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;275E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;397E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;409E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;401E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;479E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;405E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;480E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;481E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;388E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;389E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;371E;K;12;$atext-colorD;K;6;CP$UIDd;3;482E;K;6;$afontD;K;6;CP$UIDd;3;392E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;483E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;324E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;371E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;275E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;275E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;155E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;371E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;484E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;154E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;378E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;379E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;380E;K;11;$aalignmentD;K;6;CP$UIDd;3;381E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;321E;K;6;$afontD;K;6;CP$UIDd;3;383E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;375E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;375E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;277E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;275E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;403E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;381E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;371E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;277E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;277E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;386E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;321E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;381E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;277E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;277E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;485E;E;D;K;10;$classnameS;18;CPObjectControllerK;8;$classesA;S;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;486E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;275E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;277E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;152E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;488E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;489E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;490E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;487E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;491E;E;E;S;8;delegateS;6;field1S;6;field2S;6;field3S;6;field5S;6;field6S;6;field7S;9;theWindowS;7;contentS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;11;actionSent:S;28;value: selection.stringValueS;5;valueS;21;selection.stringValueD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;99E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;126E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;116E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;125E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;128E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;146E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;143E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{335, -73}, {865, 560}}S;21;{{0, 0}, {1440, 877}}d;1;0S;20;{{0, 0}, {865, 560}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;E;E;S;6;normalS;6;{1, 1}S;21;{{20, 20}, {268, 17}}S;19;{{0, 0}, {268, 17}}d;2;36S;9;textfieldS;18;controlSizeRegulard;1;4D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;382E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;492E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;493E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;277E;E;S;19;Scrolls, multi lineD;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;494E;E;S;21;{{21, 45}, {268, 49}}S;19;{{0, 0}, {268, 49}}S;16;controlSizeSmallD;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;497E;E;D;K;6;$classD;K;6;CP$UIDd;3;382E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;492E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;498E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;277E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;277E;E;S;124;Add a new line with alt+enter, if the line is bigger than the width of the field, it should continue, scrolling to the rightS;21;{{16, 99}, {276, 83}}S;19;{{0, 0}, {276, 83}}S;47;bezeled+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;499E;E;S;20;line 1 +line 2 +line 3S;22;{{20, 215}, {268, 83}}S;19;{{0, 0}, {268, 83}}S;5;LabelS;22;{{21, 193}, {268, 17}}S;20;String value bindingS;22;{{20, 320}, {269, 17}}S;19;{{0, 0}, {269, 17}}S;17;Secure text fieldS;22;{{16, 363}, {276, 22}}S;19;{{0, 0}, {276, 22}}S;6;Line 1S;22;{{20, 344}, {268, 14}}S;19;{{0, 0}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;500E;E;S;40;You should not be able to alt+enter hereS;22;{{21, 396}, {268, 17}}S;22;{{20, 421}, {268, 22}}S;19;{{0, 0}, {268, 22}}S;23;{{298, 320}, {114, 17}}S;19;{{0, 0}, {114, 17}}S;19;Standard text fieldS;23;{{293, 363}, {276, 22}}S;23;{{298, 421}, {268, 22}}S;23;{{298, 396}, {268, 17}}S;23;{{298, 345}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;501E;E;S;36;You should be able to alt+enter hereS;22;{{572, 320}, {73, 17}}S;18;{{0, 0}, {73, 17}}S;9;Combo boxS;23;{{568, 364}, {276, 26}}S;19;{{0, 0}, {276, 26}}S;8;comboboxS;63;bezeled+button-bordered+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;502E;D;K;6;CP$UIDd;3;503E;D;K;6;CP$UIDd;3;504E;E;E;d;1;5S;23;{{572, 345}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;505E;E;S;21;{{21, 471}, {73, 17}}S;12;Search fieldS;22;{{21, 496}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;506E;E;S;22;{{20, 518}, {268, 22}}S;11;searchfieldS;55;bezeled+controlSizeRegular+editable+placeholder+roundedd;3;254S;22;{{296, 471}, {67, 17}}S;18;{{0, 0}, {67, 17}}S;11;Token fieldS;23;{{292, 514}, {276, 22}}S;10;tokenfieldS;35;bezeled+controlSizeRegular+editableD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{296, 496}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;507E;E;S;23;{{572, 514}, {267, 29}}S;19;{{0, 0}, {267, 29}}D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;508E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;459E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;371E;E;d;3;224D;K;6;$classD;K;6;CP$UIDd;3;459E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;509E;E;D;K;6;$classD;K;6;CP$UIDd;3;459E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;510E;E;S;22;{{572, 471}, {71, 17}}S;18;{{0, 0}, {71, 17}}S;11;Date pickerS;23;{{572, 496}, {268, 14}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;511E;E;S;23;{{298, 215}, {268, 83}}S;22;{{294, 99}, {276, 83}}S;22;{{298, 20}, {268, 17}}S;17;Wraps, multi lineS;22;{{299, 45}, {268, 49}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;512E;E;S;109;Can add a new line with alt+enter, if the line is bigger than the screen, it should automatically wrap aroundS;23;{{298, 193}, {268, 17}}S;22;{{572, 99}, {276, 83}}S;23;{{576, 215}, {268, 83}}S;22;{{576, 20}, {269, 17}}S;20;Scrolls, single lineS;22;{{577, 45}, {268, 49}}D;K;6;$classD;K;6;CP$UIDd;3;390E;K;4;nameD;K;6;CP$UIDd;3;495E;K;12;defaultValueD;K;6;CP$UIDd;3;496E;K;6;valuesD;K;6;CP$UIDd;3;513E;E;S;116;Cannot add a new line, if the line is bigger than the width of the field, it should continue, scrolling to the rightS;23;{{576, 193}, {268, 17}}S;13;AppControllerS;19;CPMutableDictionaryS;15;backgroundColorD;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;514E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;515E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;516E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;517E;E;S;29;.Helvetica Neue DeskInterfaced;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;518E;D;K;6;CP$UIDd;3;324E;E;E;S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;519E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;520E;E;E;d;2;11D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;521E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;522E;E;E;S;6;Item 1S;6;Item 2S;6;Item 3D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;523E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;524E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;525E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;D;K;6;CP$UIDd;3;324E;E;E;d;15;-62135510400000d;14;64092297600000D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;526E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;527E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;496E;K;6;normalD;K;6;CP$UIDd;3;528E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;529E;D;K;6;CP$UIDd;3;324E;E;E;f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;371E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;530E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;531E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;532E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;533E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;534E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;535E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;536E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;537E;E;D;K;6;$classD;K;6;CP$UIDd;3;385E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;538E;E;f;12;0.8509804606D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;539E;D;K;6;CP$UIDd;3;324E;E;E;f;12;0.2027027011E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib new file mode 100644 index 000000000..66031528e --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/Resources/MainMenu.xib @@ -0,0 +1,3604 @@ + + + + 1050 + 14B23 + 6250 + 1343.16 + 755.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 6250 + + + NSComboBox + NSComboBoxCell + NSCustomObject + NSDatePicker + NSDatePickerCell + NSMenu + NSMenuItem + NSObjectController + NSSearchField + NSSearchFieldCell + NSSecureTextField + NSSecureTextFieldCell + NSTextField + NSTextFieldCell + NSTokenField + NSTokenFieldCell + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + + NewApplication + + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + + Spelling and Grammar + + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + + Substitutions + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + + Help + + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + 7 + 2 + {{335, 390}, {865, 560}} + 1946157056 + Window + NSWindow + + + + + 256 + + + + 268 + {{20, 375}, {268, 83}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + YES + 13 + 1044 + + bGluZSAxCmxpbmUgMgpsaW5lIDM + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + NO + 1 + + + + 268 + {{18, 262}, {272, 83}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + labelColor + + + + NO + 1 + + + + 268 + {{296, 262}, {272, 83}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272629760 + Label + + _NS:526 + + + + + NO + YES + 1 + + + + 268 + {{18, 117}, {272, 22}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 117}, {272, 22}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + + + NO + 1 + + + + 268 + {{18, 523}, {272, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Scrolls, multi line + + _NS:526 + + + + + NO + 1 + + + + 268 + {{297, 172}, {268, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + Line 1 + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{20, 172}, {268, 22}} + + + + _NS:9 + YES + + 342884416 + 272630848 + + + Line 1 + _NS:9 + + YES + + + + NSAllRomanInputSourcesLocaleIdentifier + + + NO + 1 + + + + 268 + {{298, 375}, {268, 83}} + + + + _NS:9 + YES + + -1805647871 + 272629760 + + + bGluZSAxCmxpbmUgMgpsaW5lIDM + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{296, 523}, {272, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Wraps, multi line + + _NS:526 + + + + + NO + 1 + + + + 268 + {{18, 223}, {273, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Secure text field + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 223}, {118, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Standard text field + + _NS:526 + + + + + NO + 1 + + + + 268 + {{19, 72}, {77, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Search field + + _NS:526 + + + + + NO + 1 + + + + 268 + + NSStringPboardType + + {{296, 21}, {268, 22}} + + + + _NS:9 + YES + + 341835776 + 0 + + Line 1 + _NS:9 + + YES + + + 6 + System + controlTextColor + + + + 0.0 + 0 + + NO + 1 + 2 + + + + 268 + {{294, 72}, {71, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Token field + + _NS:526 + + + + + NO + 1 + + + + 268 + {{570, 223}, {77, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Combo box + + _NS:526 + + + + + NO + 1 + + + + 268 + {{572, 170}, {271, 26}} + + + + _NS:9 + YES + + 342884417 + 272630784 + + + _NS:9 + + YES + + + 5 + YES + + Item 1 + Item 2 + Item 3 + + + + + 274 + {13, 63} + + + _NS:29 + YES + NO + YES + tableViewAction: + + + + 0 + 10 + 10 + 3.4028234663852886e+38 + + 67108928 + 2048 + + + YES + 11 + 3100 + + + 6 + System + headerColor + + + + 6 + System + headerTextColor + + + + + 337641536 + 268437504 + Item 3 + + + + 6 + System + controlBackgroundColor + + + + + 3 + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 19 + tableViewAction: + -765427712 + + + + 1 + -1 + 0 + YES + 0 + 1 + + + NO + 1 + + + + 268 + {{20, 20}, {268, 22}} + + + + YES + _NS:9 + YES + + 342884416 + 268436544 + + + _NS:9 + + YES + 1 + + + + 0 + 0 + search + + _searchFieldSearch: + + 138690560 + 0 + + 400 + 75 + + + 0 + 0 + clear + + + cancel + + + + + _searchFieldCancel: + + 138690560 + 0 + + 400 + 75 + + 255 + BgAAAA + + NO + 1 + + + + 268 + {{572, 21}, {270, 27}} + + + _NS:9 + YES + + 71303168 + 0 + + -595929600 + + US/Pacific + + VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ +y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ +5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g +8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ +AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg +DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ +HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g +KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ +OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg +Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ +VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg +Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ +cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg +f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA + + + %Y-%m-%d %H:%M:%S %z + + + _NS:9 + + 0.0 + 224 + + + + NO + + + + 268 + {{570, 72}, {75, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Date picker + + _NS:526 + + + + + NO + 1 + + + + 268 + {{19, 466}, {272, 49}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + Add a new line with alt+enter, if the line is bigger than the width of the field, it should continue, scrolling to the right + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 1 + + + + 268 + {{297, 466}, {272, 49}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + Can add a new line with alt+enter, if the line is bigger than the screen, it should automatically wrap around + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{19, 350}, {272, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 350}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{18, 202}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{19, 147}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 147}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + + 268 + {{296, 201}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{570, 201}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{19, 50}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{294, 50}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{570, 50}, {272, 14}} + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + You should not be able to alt+enter here + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{576, 375}, {268, 83}} + + + + _NS:9 + YES + + -1804599231 + 272630848 + + + Line 1 + _NS:9 + + YES + + + + NO + 1 + + + + 268 + {{574, 262}, {272, 83}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Label + + _NS:526 + + + + + NO + 1 + + + + 268 + {{574, 523}, {273, 17}} + + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + Scrolls, single line + + _NS:526 + + + + + NO + 1 + + + + 268 + {{575, 466}, {272, 49}} + + + + _NS:526 + {251, 750} + YES + + 67108864 + 272760832 + Cannot add a new line, if the line is bigger than the width of the field, it should continue, scrolling to the right + + _NS:526 + + + + 1 + MC4yMDI3MDI3MDExIDAuMjAyNzAyNzAxMSAwLjIwMjcwMjcwMTEAA + + + NO + YES + 268 + 1 + + + + 268 + {{574, 350}, {272, 17}} + + + _NS:526 + {251, 750} + YES + + 68157504 + 272630784 + String value binding + + _NS:526 + + + + + NO + 1 + + + {865, 560} + + + + {{0, 0}, {1440, 877}} + {10000000000000, 10000000000000} + YES + + + AppController + + + YES + + + + YES + + + + YES + + + + YES + + + + YES + + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 451 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + theWindow + + + + 459 + + + + actionSent: + + + + 598 + + + + actionSent: + + + + 599 + + + + field5 + + + + 584 + + + + actionSent: + + + + 602 + + + + actionSent: + + + + 601 + + + + actionSent: + + + + 600 + + + + actionSent: + + + + 603 + + + + field6 + + + + 585 + + + + field7 + + + + 586 + + + + actionSent: + + + + 604 + + + + actionSent: + + + + 605 + + + + actionSent: + + + + 606 + + + + field1 + + + + 643 + + + + field2 + + + + 644 + + + + field3 + + + + 645 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 488 + + + + content + + + + 483 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 542 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 545 + + + + content + + + + 538 + + + + content + + + + 539 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 556 + + + + content + + + + 553 + + + + value: selection.stringValue + + + + + + value: selection.stringValue + value + selection.stringValue + 2 + + + 569 + + + + content + + + + 564 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + MainMenu + + + 19 + + + + + + + + 56 + + + + + + + + 103 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + 75 + + + + + 80 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + + + + + + 111 + + + + + 57 + + + + + + + + + + + + 58 + + + + + 136 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 450 + + + + + 480 + + + 1 + + + 533 + + + 2 + + + 535 + + + 3 + + + 551 + + + 4 + + + 562 + + + 5 + + + 460 + + + + + + + + 461 + + + + + 517 + + + + + + + + 518 + + + + + 474 + + + + + + + + 475 + + + + + 527 + + + + + + + + 528 + + + + + 530 + + + + + + + + 531 + + + + + 548 + + + + + + + + 549 + + + + + 559 + + + + + + + + 560 + + + + + 519 + + + + + + + + 520 + + + + + 521 + + + + + + + + 522 + + + + + 462 + + + + + + + + 463 + + + + + 472 + + + + + + + + 473 + + + + + 523 + + + + + + + + 526 + + + + + 524 + + + + + + + + 525 + + + + + 546 + + + + + + + + 547 + + + + + 557 + + + + + + + + 558 + + + + + 589 + + + + + + + + 590 + + + + + 570 + + + + + + + + 571 + + + + + 572 + + + + + + + + 573 + + + + + 575 + + + + + + + + 576 + + + + + 578 + + + + + + + + 579 + + + + + 587 + + + + + + + + 588 + + + + + 591 + + + + + + + + 592 + + + + + 593 + + + + + + + + 594 + + + + + 615 + + + + + + + + 616 + + + + + 617 + + + + + + + + 618 + + + + + 619 + + + + + + + + 620 + + + + + 621 + + + + + + + + 622 + + + + + 623 + + + + + + + + 624 + + + + + 625 + + + + + + + + 626 + + + + + 627 + + + + + + + + 628 + + + + + 629 + + + + + + + + 630 + + + + + 631 + + + + + + + + 632 + + + + + 633 + + + + + + + + 634 + + + + + 635 + + + + + + + + 636 + + + + + 637 + + + + + + + + 638 + + + + + 639 + + + + + + + + 640 + + + + + 641 + + + + + + + + 642 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {357.5, 439} + com.apple.InterfaceBuilder.CocoaPlugin + {{303, 221}, {480, 360}} + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + IBUserDefinedRuntimeAttributesPlaceholderName + + IBUserDefinedRuntimeAttributesPlaceholderName + + + + com.apple.InterfaceBuilder.userDefinedRuntimeAttributeType.color + backgroundColor + + 2 + MC44NTA5ODA0NjA2IDAuODUwOTgwNDYwNiAwLjg1MDk4MDQ2MDYAA + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 645 + + + 0 + IBCocoaFramework + NO + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + {12, 12} + {10, 2} + + + diff --git a/Tests/Manual/CPTextFieldMultiline/index-debug.html b/Tests/Manual/CPTextFieldMultiline/index-debug.html new file mode 100644 index 000000000..7a4693877 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPTextFielMultine + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextFieldMultiline/index.html b/Tests/Manual/CPTextFieldMultiline/index.html new file mode 100644 index 000000000..cb15b05a5 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPTextFielMultine + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPTextFieldMultiline/main.j b/Tests/Manual/CPTextFieldMultiline/main.j new file mode 100644 index 000000000..48db81b12 --- /dev/null +++ b/Tests/Manual/CPTextFieldMultiline/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPTextFielMultine + * + * Created by You on November 12, 2014. + * Copyright 2014, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From e2020fa7f2dfda58eba1118482a271ec82a596f5 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 13 Nov 2014 00:17:29 -0800 Subject: [PATCH 43/70] Add CPAltEnterTextAreaFeature checking. FF doesn't add a cariage return on textarea when doing alt+enter --- AppKit/CPCompatibility.j | 4 ++++ AppKit/CPTextField.j | 5 +---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/AppKit/CPCompatibility.j b/AppKit/CPCompatibility.j index c471c1408..623249cd2 100644 --- a/AppKit/CPCompatibility.j +++ b/AppKit/CPCompatibility.j @@ -78,6 +78,8 @@ CPInputOnInputEventFeature = 30; CPFileAPIFeature = 31; +CPAltEnterTextAreaFeature = 32; + /* @@ -100,6 +102,7 @@ var USER_AGENT = "", // default these features to true PLATFORM_FEATURES[CPInputTypeCanBeChangedFeature] = YES; PLATFORM_FEATURES[CPInputSetFontOutsideOfDOM] = YES; +PLATFORM_FEATURES[CPAltEnterTextAreaFeature] = YES; if (typeof window !== "undefined" && typeof window.navigator !== "undefined") USER_AGENT = window.navigator.userAgent; @@ -208,6 +211,7 @@ else if (USER_AGENT.indexOf("Gecko") !== -1) // Must follow KHTML check. // Some day this might be fixed and should be version prefixed. No known fixed version yet. PLATFORM_FEATURES[CPInput1PxLeftPadding] = YES; + PLATFORM_FEATURES[CPAltEnterTextAreaFeature] = NO; // This was supposed to be added in Firefox 22, but when testing with the latest beta as of 2013-06-14 // it does not seem to work. It seems to exhibit the CPJavaScriptPasteRequiresEditableTarget problem, // and in addition doesn't seem to work with our native copy code either. diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 63ea80fe2..4b5f1dff6 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1079,9 +1079,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _didEdit]; } - console.error("newValue : >" + newValue + "<") - console.error("_stringValue : >" + _stringValue + "<") - if ([self _valueIsValid:_stringValue]) { // If _isEditing == YES then the target action can also be called via @@ -1129,7 +1126,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // we don't need to do this in case of textarea // or we will end up with 2 carriage returns - if (aCharacter != CPNewlineCharacter || element.nodeName.toUpperCase() != "TEXTAREA") + if (aCharacter != CPNewlineCharacter || element.nodeName.toUpperCase() != "TEXTAREA" || !CPFeatureIsCompatible(CPAltEnterTextAreaFeature)) element.value = [element.value stringByReplacingCharactersInRange:[self selectedRange] withString:aCharacter]; [self _setStringValue:element.value]; From a5283a26abc850a591b2990845412e41db684ff3 Mon Sep 17 00:00:00 2001 From: Christophe Serafin Date: Fri, 14 Nov 2014 13:49:33 -0800 Subject: [PATCH 44/70] Fixed: Enable CPTextField to have a specific height When setting controlSize, CPTextfield height was forced to min-size height. Now we check that the frame size is between the min and the max size. It allows to constrain a CPControl to have a fixed height by specifying a min-size equivalent to the maxsize. In CPTextField case, we only have a min-size which enable us to have a specific size. Changes has been made in Aristo2 only. --- AppKit/CPControl.j | 12 +++++++++++- AppKit/CPTextField.j | 2 +- AppKit/Themes/Aristo2/ThemeDescriptors.j | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j index c2b1083ce..0c5836764 100644 --- a/AppKit/CPControl.j +++ b/AppKit/CPControl.j @@ -260,10 +260,20 @@ var CPControlBlackColor = [CPColor blackColor]; maxSize = [self currentValueForThemeAttribute:@"max-size"]; if (minSize.width > 0) + { frameSize.width = MAX(minSize.width, frameSize.width); + if (maxSize.width > 0) + frameSize.width = MIN(maxSize.width, frameSize.width); + } + if (minSize.height > 0) - frameSize.height = minSize.height; + { + frameSize.height = MAX(minSize.height, frameSize.height); + + if (maxSize.height > 0) + frameSize.height = MIN(maxSize.height, frameSize.height); + } [self setFrameSize:frameSize]; } diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index fc3d833d9..3bdb49c80 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -240,8 +240,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self _sizeToControlSize]; } -#pragma mark - +#pragma mark - #if PLATFORM(DOM) - (DOMElement)_inputElement diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index f5f11c7f5..bf72661f3 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -374,7 +374,7 @@ var themedButtonValues = nil, [@"font", [CPFont boldSystemFontOfSize:11.0]], [@"min-size", CGSizeMake(32.0, 20.0), CPThemeStateControlSizeSmall], - [@"max-size", CGSizeMake(1.0, 20.0), CPThemeStateControlSizeSmall], + [@"max-size", CGSizeMake(-1.0, 20.0), CPThemeStateControlSizeSmall], [@"nib2cib-adjustment-frame", CGRectMake(3.0, 4.0, -6.0, 0.0), CPThemeStateControlSizeSmall], // CPThemeStateControlSizeMini @@ -386,7 +386,7 @@ var themedButtonValues = nil, [@"min-size", CGSizeMake(32.0, 16.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 16.0), CPThemeStateControlSizeMini], - [@"nib2cib-adjustment-frame", CGRectMake(1.0, 10.0, -3.0, 0.0), CPThemeStateControlSizeMini] + [@"nib2cib-adjustment-frame", CGRectMake(1.0, 10.0, -3.0, 0.0), CPThemeStateControlSizeMini] ]; [self registerThemeValues:themeValues forView:button]; From d30659c37c9632f5039353eea0e913a8f8799d0e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 19 Nov 2014 14:27:19 -0800 Subject: [PATCH 45/70] Fixed: CPMenu crash when opening a menu with items and then opening the menu without items Previously, when opening a menu with items and then opening another menu without items, Cappuccino simply crashed. Now it works ! --- AppKit/CPMenu/_CPMenuWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPMenu/_CPMenuWindow.j b/AppKit/CPMenu/_CPMenuWindow.j index ddf53a7dd..571e3d670 100644 --- a/AppKit/CPMenu/_CPMenuWindow.j +++ b/AppKit/CPMenu/_CPMenuWindow.j @@ -410,7 +410,7 @@ _CPMenuWindowAttachedMenuBackgroundStyle = 2; { // Don't return indexes of items that aren't visible. if (!CGRectContainsPoint([_menuClipView bounds], [_menuClipView convertPoint:aPoint fromView:nil])) - return NO; + return CPNotFound; return [_menuView itemIndexAtPoint:[_menuView convertPoint:aPoint fromView:nil]]; } From 86d24319255258446652a73fc49e34cd3b0c63f9 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 14:34:52 -0800 Subject: [PATCH 46/70] CPWebScriptObject is a class, not a typedef --- AppKit/CPPasteboard.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPPasteboard.j b/AppKit/CPPasteboard.j index 8f5c4f754..b8e0139f0 100644 --- a/AppKit/CPPasteboard.j +++ b/AppKit/CPPasteboard.j @@ -26,7 +26,7 @@ @import @import -@typedef CPWebScriptObject +@class CPWebScriptObject CPGeneralPboard = @"CPGeneralPboard"; CPFontPboard = @"CPFontPboard"; From 9e66c699e1e85b0d8f9fadf26653d242be07132f Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 14:35:33 -0800 Subject: [PATCH 47/70] FIXED: prevent to declare a type that is already declared as a class and vice-versa --- Objective-J/ObjJAcornCompiler.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index fd6f020d3..e9bc334f5 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -1674,6 +1674,9 @@ ClassDeclarationStatement: function(node, st, c) { compiler.cmBuffer = new StringBuffer(); compiler.classBodyBuffer = new StringBuffer(); // TODO: Check if this is needed + if (compiler.getTypeDef(className)) + throw compiler.error_message(className + " is already declared as type", node.classname); + if (!generate) saveJSBuffer.concat(compiler.source.substring(compiler.lastPos, node.start)); // First we declare the class @@ -2444,6 +2447,9 @@ TypeDefStatement: function(node, st, c) { if (typeDef) throw compiler.error_message("Duplicate type definition " + typeDefName, node.typedefname); + if (compiler.getClassDef(typeDefName)) + throw compiler.error_message(typeDefName + " is already declared as class", node.typedefname); + compiler.imBuffer = new StringBuffer(); compiler.cmBuffer = new StringBuffer(); From 460a60440a54e50b548108368450faf9fe248882 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 14:53:38 -0800 Subject: [PATCH 48/70] Correctly set the type of datasource in CPComboBox --- AppKit/CPComboBox.j | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index 01d424664..6787948e3 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -61,19 +61,19 @@ var CPComboBoxTextSubview = @"text", @implementation CPComboBox : CPTextField { - CPArray _items; - _CPPopUpList _listDelegate; - id _dataSource; - BOOL _usesDataSource; - BOOL _completes; - BOOL _canComplete; - int _numberOfVisibleItems; - BOOL _forceSelection; - BOOL _hasVerticalScroller; - CPString _selectedStringValue; - CGSize _intercellSpacing; - float _itemHeight; - BOOL _popUpButtonCausedResign; + CPArray _items; + _CPPopUpList _listDelegate; + id _dataSource; + BOOL _usesDataSource; + BOOL _completes; + BOOL _canComplete; + int _numberOfVisibleItems; + BOOL _forceSelection; + BOOL _hasVerticalScroller; + CPString _selectedStringValue; + CGSize _intercellSpacing; + float _itemHeight; + BOOL _popUpButtonCausedResign; } + (CPString)defaultThemeClass From d106e6485bb0970131e4e7fd295d0a3a97de1972 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 16:23:56 -0800 Subject: [PATCH 49/70] Add some manual test cases for objj output --- Tests/Manual/CompilationTests/README.md | 6 ++ Tests/Manual/CompilationTests/TestCases/1.j | 13 ++++ Tests/Manual/CompilationTests/TestCases/2.j | 20 +++++ Tests/Manual/CompilationTests/TestCases/3.j | 15 ++++ Tests/Manual/CompilationTests/TestCases/4.j | 15 ++++ Tests/Manual/CompilationTests/TestCases/5.j | 22 ++++++ Tests/Manual/CompilationTests/TestCases/6.j | 16 ++++ Tests/Manual/CompilationTests/TestCases/7.j | 20 +++++ Tests/Manual/CompilationTests/TestCases/8.j | 20 +++++ Tests/Manual/CompilationTests/TestCases/9.j | 22 ++++++ Tests/Manual/CompilationTests/run.py | 82 +++++++++++++++++++++ 11 files changed, 251 insertions(+) create mode 100644 Tests/Manual/CompilationTests/README.md create mode 100644 Tests/Manual/CompilationTests/TestCases/1.j create mode 100644 Tests/Manual/CompilationTests/TestCases/2.j create mode 100644 Tests/Manual/CompilationTests/TestCases/3.j create mode 100644 Tests/Manual/CompilationTests/TestCases/4.j create mode 100644 Tests/Manual/CompilationTests/TestCases/5.j create mode 100644 Tests/Manual/CompilationTests/TestCases/6.j create mode 100644 Tests/Manual/CompilationTests/TestCases/7.j create mode 100644 Tests/Manual/CompilationTests/TestCases/8.j create mode 100644 Tests/Manual/CompilationTests/TestCases/9.j create mode 100755 Tests/Manual/CompilationTests/run.py diff --git a/Tests/Manual/CompilationTests/README.md b/Tests/Manual/CompilationTests/README.md new file mode 100644 index 000000000..04a7e90c0 --- /dev/null +++ b/Tests/Manual/CompilationTests/README.md @@ -0,0 +1,6 @@ +To run these tests: + + - open x.j + - check what is the expected output in the comments + - run objj x.j + - check you get the correct output diff --git a/Tests/Manual/CompilationTests/TestCases/1.j b/Tests/Manual/CompilationTests/TestCases/1.j new file mode 100644 index 000000000..b2585522e --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/1.j @@ -0,0 +1,13 @@ +// Expected output: 0 + +/* +*/ + + +@import + +@implementation MyCall : CPObject +{ + CPString property1; +} +@end diff --git a/Tests/Manual/CompilationTests/TestCases/2.j b/Tests/Manual/CompilationTests/TestCases/2.j new file mode 100644 index 000000000..af2c92cf1 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/2.j @@ -0,0 +1,20 @@ +// Expected output: 0 + +/* + +START_EXPECTED + MyType property1; + ^ +WARNING line 5 in file:[__PATH__]: Unknown type 'MyType' for ivar 'property1' +END_EXPECTED +*/ + + +@import + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/3.j b/Tests/Manual/CompilationTests/TestCases/3.j new file mode 100644 index 000000000..e00d77593 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/3.j @@ -0,0 +1,15 @@ +// Expected output: 0 + +/* +*/ + +@import + +@typedef MyType + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/4.j b/Tests/Manual/CompilationTests/TestCases/4.j new file mode 100644 index 000000000..889ab3036 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/4.j @@ -0,0 +1,15 @@ +// Expected output: 0 + +/* +*/ + +@import + +@class MyType + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/5.j b/Tests/Manual/CompilationTests/TestCases/5.j new file mode 100644 index 000000000..bcbf216ab --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/5.j @@ -0,0 +1,22 @@ +// Expected output: 0 + +/* + +START_EXPECTED + MyType property1; + ^ +WARNING line 7 in file:[__PATH__]: Unknown type 'MyType' for ivar 'property1' +END_EXPECTED + +*/ + +@import + +@global MyType + +@implementation MyCall : CPObject +{ + MyType property1; +} + +@end diff --git a/Tests/Manual/CompilationTests/TestCases/6.j b/Tests/Manual/CompilationTests/TestCases/6.j new file mode 100644 index 000000000..b41c518cb --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/6.j @@ -0,0 +1,16 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10771 of file [unknown] +SyntaxError: +@typedef MyType + ^ +ERROR line 2 in file:[__PATH__]: Duplicate type definition MyType +END_EXPECTED + +*/ + +@typedef MyType +@typedef MyType diff --git a/Tests/Manual/CompilationTests/TestCases/7.j b/Tests/Manual/CompilationTests/TestCases/7.j new file mode 100644 index 000000000..cdff5aeda --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/7.j @@ -0,0 +1,20 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10001 of file [unknown] +SyntaxError: +@implementation MyType : CPObject + ^ +ERROR line 5 in file:[__PATH__]: MyType is already declared as type +END_EXPECTED + +*/ + +@import + +@typedef MyType + +@implementation MyType : CPObject +@end diff --git a/Tests/Manual/CompilationTests/TestCases/8.j b/Tests/Manual/CompilationTests/TestCases/8.j new file mode 100644 index 000000000..07a2aa769 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/8.j @@ -0,0 +1,20 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10774 of file [unknown] +SyntaxError: +@typedef MyType + ^ +ERROR line 6 in file:[__PATH__]: MyType is already declared as class +END_EXPECTED + +*/ + +@import + +@implementation MyType : CPObject +@end + +@typedef MyType diff --git a/Tests/Manual/CompilationTests/TestCases/9.j b/Tests/Manual/CompilationTests/TestCases/9.j new file mode 100644 index 000000000..0fd6c0678 --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/9.j @@ -0,0 +1,22 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10014 of file [unknown] +SyntaxError: +@implementation MyType : CPObject + ^ +ERROR line 6 in file:[__PATH__]: Duplicate class MyType +END_EXPECTED + +*/ + +@import + +@implementation MyType : CPObject +@end + +@implementation MyType : CPObject +@end + diff --git a/Tests/Manual/CompilationTests/run.py b/Tests/Manual/CompilationTests/run.py new file mode 100755 index 000000000..e21eebaa3 --- /dev/null +++ b/Tests/Manual/CompilationTests/run.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +import os +import commands +import re + +PATH = os.path.abspath(os.path.join(os.path.dirname(__file__))) + + +def get_tests_cases(): + ret = [] + for filename in os.listdir("TestCases"): + ret.append("TestCases/%s" % filename) + return ret + # return ["TestCases/2.j"] + +def get_expected_output(test_case): + f = open(test_case) + content = f.readlines(); + f.close() + + status = int(content[0].replace("// Expected output: ", "")) + + recording = False + output = [] + + for line in content: + if "END_EXPECTED" in line: + recording = False + break; + + if "START_EXPECTED" in line: + recording = True + continue + + if recording: + output.append(line) + + output = "".join(output); + output = output.replace("[__PATH__]", "%s/%s" % (PATH, test_case)) + output = cleanup_output(output) + + return (status, output) + + +def get_actual_output(test_case): + status, output = commands.getstatusoutput("objj %s" % test_case) + output = cleanup_output(output) + return (status, output) + + +def cleanup_output(output): + if not output: + return "" + output = output.replace(" ", "") + output = output.replace("\n", "") + output = output.replace("[0m", "") + return re.sub('[^\s!-~]', '', output) + + +if __name__ == "__main__": + + for test in get_tests_cases(): + + expected_status, expected_output = get_expected_output(test) + actual_status, actual_output = get_actual_output(test) + + print "########################################" + print "Testing %s" % test + errored = False + if expected_status != actual_status: + errored = True + print " Error in %s: Status code is different: expected %d, actual %d" % (test, expected_status, actual_status) + + if expected_output != actual_output: + errored = True + print " Error in %s. Outputs are different" % test + print " EXPECTED: %s" % expected_output + print " ACTUAL: %s" % actual_output + + if not errored: + print " OK" From 653f706f1b02b867b4ccaf65b2e7667f39494382 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Nov 2014 16:29:05 -0800 Subject: [PATCH 50/70] Update README --- Tests/Manual/CompilationTests/README.md | 50 ++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/Tests/Manual/CompilationTests/README.md b/Tests/Manual/CompilationTests/README.md index 04a7e90c0..c852088b8 100644 --- a/Tests/Manual/CompilationTests/README.md +++ b/Tests/Manual/CompilationTests/README.md @@ -1,6 +1,46 @@ -To run these tests: +## Run tests - - open x.j - - check what is the expected output in the comments - - run objj x.j - - check you get the correct output +./run.py + + +## Create a test case + +create a `.j` file in `TestCases` folder: + +-First line MUST be: + + // Expected output: [OBJJ_STATUS_CODE] + + +Then after that add a block comment that contains: + + /* + START_EXPECTED + [CONSOLE_OUTPUT_OF_OBJJ] + END_EXPECTED + */ + + +Be sure to replace the file path by the token `[__PATH__]` After that, add the code you want to test. + +If your test doesn't expect any output, don't put any `START_EXPECTED` and `END_EXPECTED` + + +For instance: + + /* + START_EXPECTED + Error on line 10771 of file [unknown] + SyntaxError: + @typedef MyType + ^ + ERROR line 2 in file:[__PATH__]: Duplicate type definition MyType + END_EXPECTED + */ + @import + + @implementation MyCall : CPObject + { + CPString property1; + } + @end From 37b9895878319d11409ba660363eadc852048700 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 20 Nov 2014 11:44:32 -0800 Subject: [PATCH 51/70] Add check to ensure a @class declaration is not already defined as a type --- Objective-J/ObjJAcornCompiler.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index e9bc334f5..ce3009ef7 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -2412,6 +2412,10 @@ ClassStatement: function(node, st, c) { compiler.jsBuffer.concat("//"); } var className = node.id.name; + + if (compiler.getTypeDef(className)) + throw compiler.error_message(className + " is already declared as type", node.id); + if (!compiler.getClassDef(className)) { classDef = new ClassDef(false, className); compiler.classDefs[className] = classDef; From f3090e7827b655e7eea4832ea6c668025ccc2445 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 20 Nov 2014 11:44:51 -0800 Subject: [PATCH 52/70] Update test cases --- Tests/Manual/CompilationTests/TestCases/10.j | 18 ++++++++++++++++++ Tests/Manual/CompilationTests/TestCases/6.j | 2 +- Tests/Manual/CompilationTests/TestCases/8.j | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 Tests/Manual/CompilationTests/TestCases/10.j diff --git a/Tests/Manual/CompilationTests/TestCases/10.j b/Tests/Manual/CompilationTests/TestCases/10.j new file mode 100644 index 000000000..c614eeb4d --- /dev/null +++ b/Tests/Manual/CompilationTests/TestCases/10.j @@ -0,0 +1,18 @@ +// Expected output: 256 + +/* + +START_EXPECTED +Error on line 10778 of file [unknown] +SyntaxError: +@typedef mytype + ^ +ERROR line 4 in file:[__PATH__]: mytype is already declared as class +END_EXPECTED +*/ + +@import + +@class mytype +@typedef mytype + diff --git a/Tests/Manual/CompilationTests/TestCases/6.j b/Tests/Manual/CompilationTests/TestCases/6.j index b41c518cb..37a7f86bf 100644 --- a/Tests/Manual/CompilationTests/TestCases/6.j +++ b/Tests/Manual/CompilationTests/TestCases/6.j @@ -3,7 +3,7 @@ /* START_EXPECTED -Error on line 10771 of file [unknown] +Error on line 10775 of file [unknown] SyntaxError: @typedef MyType ^ diff --git a/Tests/Manual/CompilationTests/TestCases/8.j b/Tests/Manual/CompilationTests/TestCases/8.j index 07a2aa769..393371331 100644 --- a/Tests/Manual/CompilationTests/TestCases/8.j +++ b/Tests/Manual/CompilationTests/TestCases/8.j @@ -3,7 +3,7 @@ /* START_EXPECTED -Error on line 10774 of file [unknown] +Error on line 10778 of file [unknown] SyntaxError: @typedef MyType ^ From 0dcc645f229473a7221db6fd63b0928d315ff9af Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 20 Nov 2014 11:50:18 -0800 Subject: [PATCH 53/70] Fix a missing @class declaration --- AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j | 2 -- AppKit/CPWebView.j | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j index d11eceb64..30470d5c6 100644 --- a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j @@ -24,8 +24,6 @@ @import "CPDatePicker.j" @import "CPPopUpButton.j" -@class CPRuleEditorRowType - @global CPApp @global CPMiniControlSize @global CPSmallControlSize diff --git a/AppKit/CPWebView.j b/AppKit/CPWebView.j index 3f2ca713e..fe344027e 100644 --- a/AppKit/CPWebView.j +++ b/AppKit/CPWebView.j @@ -23,6 +23,7 @@ @import "CPView.j" @import "CPScrollView.j" +@class CPWebScriptObject // FIXME: implement these where possible: /* From fe25dbd87296402d921c7c2cbf8c2de2ed583e8a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 20 Nov 2014 15:21:07 -0800 Subject: [PATCH 54/70] New: added method addObserverForName:object::usingBlock: in CPNotificationCenter Previously, the method addObserverForName:object::usingBlock: didn't exist in Cappuccino. Now it does. To observe, you need to use the method - (id )addObserverForName:(CPString)aNotificationName object:(id)anObject usingBlock:(Function)block To unregister observations, you pass the object returned by this method to removeObserver:. You must invoke removeObserver: or removeObserver:name:object:. Test /Tests/Foundation/CPNotificationCenterTest.j Fixed #2259 --- Foundation/CPNotificationCenter.j | 68 ++++++++++++++++++--- Tests/Foundation/CPNotificationCenterTest.j | 45 ++++++++++++++ 2 files changed, 106 insertions(+), 7 deletions(-) diff --git a/Foundation/CPNotificationCenter.j b/Foundation/CPNotificationCenter.j index 99ab18183..0d880276e 100644 --- a/Foundation/CPNotificationCenter.j +++ b/Foundation/CPNotificationCenter.j @@ -68,7 +68,8 @@ var CPNotificationDefaultCenter = nil; _namedRegistries = @{}; _unnamedRegistry = [[_CPNotificationRegistry alloc] init]; } - return self; + + return self; } /*! @@ -81,9 +82,35 @@ var CPNotificationDefaultCenter = nil; */ - (void)addObserver:(id)anObserver selector:(SEL)aSelector name:(CPString)aNotificationName object:(id)anObject { - var registry, + var registry = [self _registryForNotificationName:aNotificationName], observer = [[_CPNotificationObserver alloc] initWithObserver:anObserver selector:aSelector]; + [registry addObserver:observer object:anObject]; +} + +/*! + Adds an entry to the receiver’s dispatch table with a block, and optional criteria: notification name and sender. + @param aNotificationName the name of the notification the observer wants to watch + @param anObject the object in the notification the observer wants to watch + @param block the block to be executed when the notification is received. +*/ +- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject usingBlock:(Function)block +{ + var registry = [self _registryForNotificationName:aNotificationName], + observer = [[_CPNotificationObserver alloc] initWithBlock:block]; + + [registry addObserver:observer object:anObject]; + + return observer; +} + +/*! + @ignore +*/ +- (_CPNotificationRegistry)_registryForNotificationName:(CPString)aNotificationName +{ + var registry; + if (aNotificationName == nil) registry = _unnamedRegistry; else if (!(registry = [_namedRegistries objectForKey:aNotificationName])) @@ -92,7 +119,7 @@ var CPNotificationDefaultCenter = nil; [_namedRegistries setObject:registry forKey:aNotificationName]; } - [registry addObserver:observer object:anObject]; + return registry; } /*! @@ -129,7 +156,10 @@ var CPNotificationDefaultCenter = nil; [_unnamedRegistry removeObserver:anObserver object:anObject]; } else + { [[_namedRegistries objectForKey:aNotificationName] removeObserver:anObserver object:anObject]; + } + } /*! @@ -233,7 +263,8 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ observersEnumerator = [observers objectEnumerator]; while ((observer = [observersEnumerator nextObject]) !== nil) - if ([observer observer] == anObserver) + if ([observer observer] == anObserver || + ([observer block] && [anObserver respondsToSelector:@selector(block)] && [observer block] == [anObserver block])) [observers removeObject:observer]; if (![observers count]) @@ -248,7 +279,8 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ observersEnumerator = [observers objectEnumerator]; while ((observer = [observersEnumerator nextObject]) !== nil) - if ([observer observer] == anObserver) + if ([observer observer] == anObserver || + ([observer block] && [anObserver respondsToSelector:@selector(block)] && [observer block] == [anObserver block])) [observers removeObject:observer]; if (![observers count]) @@ -312,8 +344,9 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ /* @ignore */ @implementation _CPNotificationObserver : CPObject { - id _observer; - SEL _selector; + id _observer; + Function _block; + SEL _selector; } - (id)initWithObserver:(id)anObserver selector:(SEL)aSelector @@ -327,13 +360,34 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */ return self; } +- (id)initWithBlock:(Function)aBlock +{ + if (self) + { + _block = aBlock; + } + + return self; +} + - (id)observer { return _observer; } +- (id)block +{ + return _block; +} + - (void)postNotification:(CPNotification)aNotification { + if (_block) + { + _block(aNotification); + return; + } + [_observer performSelector:_selector withObject:aNotification]; } diff --git a/Tests/Foundation/CPNotificationCenterTest.j b/Tests/Foundation/CPNotificationCenterTest.j index b1f3b8bf5..e630e4064 100644 --- a/Tests/Foundation/CPNotificationCenterTest.j +++ b/Tests/Foundation/CPNotificationCenterTest.j @@ -52,6 +52,51 @@ var TestNotification = @"TestNotification"; [self assert:8 equals:notificationCount message:@"observer should not be notified"]; } +- (void)testNotifyWithBlocks +{ + var center = [CPNotificationCenter defaultCenter]; + + notificationCount = 0; + + var notificationBlock = function(notification){ + notificationCount += 1; + }; + + var observer2 = [center addObserverForName:TestNotification object:2 usingBlock:notificationBlock], + observer25 = [center addObserverForName:TestNotification object:25 usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:self]; + [self assert:0 equals:notificationCount message:@"observer should only be notified for object '2'"]; + + [center postNotificationName:TestNotification object:2]; + [self assert:1 equals:notificationCount message:@"observer should be notified for object '2'"]; + + var observerNil = [center addObserverForName:TestNotification object:nil usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:2]; + [self assert:3 equals:notificationCount message:@"observer should be notified for object '2' and for any object"]; + + [center removeObserver:observer2 name:TestNotification object:2]; + [center postNotificationName:TestNotification object:2]; + [self assert:4 equals:notificationCount message:@"observer should be notified only for any object"]; + + // At this point we have TestNofication:nil observer and a TestNotification:25 observer. + observer2 = [center addObserverForName:nil object:2 usingBlock:notificationBlock]; + + [center postNotificationName:TestNotification object:2]; + [self assert:6 equals:notificationCount message:@"observer should be notified for TestNofication and for object '2' (TestNotification)"]; + [center postNotificationName:@"RandomNotification" object:2]; + [self assert:7 equals:notificationCount message:@"observer should be notified for object '2' (RandomNotification)"]; + + [center removeObserver:observer2]; + [center removeObserver:observer25]; + [center removeObserver:observerNil]; + [center postNotificationName:TestNotification object:nil]; + [center postNotificationName:TestNotification object:2]; + [center postNotificationName:TestNotification object:25]; + [self assert:7 equals:notificationCount message:@"observer should not be notified"]; +} + - (void)testAddObserversDuringNotification { var center = [CPNotificationCenter defaultCenter]; From d481d9cca5348df486203e1954822547157bd1bb Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Thu, 20 Nov 2014 23:38:53 -0800 Subject: [PATCH 55/70] Fixed: added queue to the method addObserverForName:(CPString)aNotificationName object:(id)anObject queue:(id)queue usingBlock:(Function)block --- Foundation/CPNotificationCenter.j | 6 ++---- Tests/Foundation/CPNotificationCenterTest.j | 8 ++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/Foundation/CPNotificationCenter.j b/Foundation/CPNotificationCenter.j index 0d880276e..78cd7d354 100644 --- a/Foundation/CPNotificationCenter.j +++ b/Foundation/CPNotificationCenter.j @@ -92,9 +92,10 @@ var CPNotificationDefaultCenter = nil; Adds an entry to the receiver’s dispatch table with a block, and optional criteria: notification name and sender. @param aNotificationName the name of the notification the observer wants to watch @param anObject the object in the notification the observer wants to watch + @param queue is ignored for the moment @param block the block to be executed when the notification is received. */ -- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject usingBlock:(Function)block +- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject queue:(id)queue usingBlock:(Function)block { var registry = [self _registryForNotificationName:aNotificationName], observer = [[_CPNotificationObserver alloc] initWithBlock:block]; @@ -156,10 +157,7 @@ var CPNotificationDefaultCenter = nil; [_unnamedRegistry removeObserver:anObserver object:anObject]; } else - { [[_namedRegistries objectForKey:aNotificationName] removeObserver:anObserver object:anObject]; - } - } /*! diff --git a/Tests/Foundation/CPNotificationCenterTest.j b/Tests/Foundation/CPNotificationCenterTest.j index e630e4064..47aab1e0f 100644 --- a/Tests/Foundation/CPNotificationCenterTest.j +++ b/Tests/Foundation/CPNotificationCenterTest.j @@ -62,8 +62,8 @@ var TestNotification = @"TestNotification"; notificationCount += 1; }; - var observer2 = [center addObserverForName:TestNotification object:2 usingBlock:notificationBlock], - observer25 = [center addObserverForName:TestNotification object:25 usingBlock:notificationBlock]; + var observer2 = [center addObserverForName:TestNotification object:2 queue:nil usingBlock:notificationBlock], + observer25 = [center addObserverForName:TestNotification object:25 queue:nil usingBlock:notificationBlock]; [center postNotificationName:TestNotification object:self]; [self assert:0 equals:notificationCount message:@"observer should only be notified for object '2'"]; @@ -71,7 +71,7 @@ var TestNotification = @"TestNotification"; [center postNotificationName:TestNotification object:2]; [self assert:1 equals:notificationCount message:@"observer should be notified for object '2'"]; - var observerNil = [center addObserverForName:TestNotification object:nil usingBlock:notificationBlock]; + var observerNil = [center addObserverForName:TestNotification object:nil queue:nil usingBlock:notificationBlock]; [center postNotificationName:TestNotification object:2]; [self assert:3 equals:notificationCount message:@"observer should be notified for object '2' and for any object"]; @@ -81,7 +81,7 @@ var TestNotification = @"TestNotification"; [self assert:4 equals:notificationCount message:@"observer should be notified only for any object"]; // At this point we have TestNofication:nil observer and a TestNotification:25 observer. - observer2 = [center addObserverForName:nil object:2 usingBlock:notificationBlock]; + observer2 = [center addObserverForName:nil object:2 queue:nil usingBlock:notificationBlock]; [center postNotificationName:TestNotification object:2]; [self assert:6 equals:notificationCount message:@"observer should be notified for TestNofication and for object '2' (TestNotification)"]; From e9f73cbb45cf01833764b53b2020471e32523d8a Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 26 Nov 2014 11:07:48 +0000 Subject: [PATCH 56/70] Minor formatting. --- Objective-J/OldBrowserCompatibility.js | 2 +- Objective-J/json2.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Objective-J/OldBrowserCompatibility.js b/Objective-J/OldBrowserCompatibility.js index 0086388ff..cd3d30517 100644 --- a/Objective-J/OldBrowserCompatibility.js +++ b/Objective-J/OldBrowserCompatibility.js @@ -37,7 +37,7 @@ if (!Object.create) // This is for IE8 support. It doesn't have the Object.keys function. if (!Object.keys) { - Object.keys = (function () + Object.keys = (function() { var hasOwnProperty = Object.prototype.hasOwnProperty, hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'), diff --git a/Objective-J/json2.js b/Objective-J/json2.js index 8ba599eed..0252d58bf 100644 --- a/Objective-J/json2.js +++ b/Objective-J/json2.js @@ -161,7 +161,7 @@ if (!this.JSON) { JSON = {}; } -(function () { +(function() { function f(n) { // Format integers to have at least two digits. From 31afae71d1ef73e5fbd9153c84d3f21e42f11fec Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 26 Nov 2014 11:52:25 -0800 Subject: [PATCH 57/70] Typos --- Objective-J/ObjJAcornCompiler.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index ce3009ef7..79646a0e6 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -1675,7 +1675,7 @@ ClassDeclarationStatement: function(node, st, c) { compiler.classBodyBuffer = new StringBuffer(); // TODO: Check if this is needed if (compiler.getTypeDef(className)) - throw compiler.error_message(className + " is already declared as type", node.classname); + throw compiler.error_message(className + " is already declared as a type", node.classname); if (!generate) saveJSBuffer.concat(compiler.source.substring(compiler.lastPos, node.start)); @@ -2414,7 +2414,7 @@ ClassStatement: function(node, st, c) { var className = node.id.name; if (compiler.getTypeDef(className)) - throw compiler.error_message(className + " is already declared as type", node.id); + throw compiler.error_message(className + " is already declared as a type", node.id); if (!compiler.getClassDef(className)) { classDef = new ClassDef(false, className); From 3269ba10ec4dac93d04dda64048f72175410bc9a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 12:01:40 -0800 Subject: [PATCH 58/70] Fixed: CPDatePicker doesn't have a focusRing when editing Previously, the CPDatePicker didn't have a focus ring when an user was editing it. Now it does. It works for Aristo1 and Aristo2. Test App in Tests/Manual/CPDatePickerTest --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 4 ++++ AppKit/Themes/Aristo/ThemeDescriptors.j | 20 ++++++++++++++++++++ AppKit/Themes/Aristo2/ThemeDescriptors.j | 16 ++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 39935b536..18ad45a4a 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -123,6 +123,8 @@ var CPZeroKeyCode = 48, // This is usefull when clicking on the stepper when the datePicker is not selected [_stepper setObjectValue:0]; + //[_datePicker unsetThemeState:CPThemeStateEditing]; + return YES; } @@ -1771,6 +1773,7 @@ var CPMonthDateType = 0, - (void)makeSelectable { [self setThemeState:CPThemeStateSelected]; + [_datePicker setThemeState:CPThemeStateEditing]; } /*! Unsert the theme CPThemeStateSelected @@ -1779,6 +1782,7 @@ var CPMonthDateType = 0, { _firstEvent = YES; [self unsetThemeState:CPThemeStateSelected]; + [_datePicker unsetThemeState:CPThemeStateEditing]; } diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index efbbb1c23..4bac4681a 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1258,6 +1258,19 @@ var themedButtonValues = nil, ["textfield-bezel-square-disabled-8.png", 6.0, 6.0] ]), + bezelFocusedColor = PatternColor( + [ + ["textfield-bezel-square-focused-0.png", 6.0, 6.0], + ["textfield-bezel-square-focused-1.png", 1.0, 6.0], + ["textfield-bezel-square-focused-2.png", 6.0, 6.0], + ["textfield-bezel-square-focused-3.png", 6.0, 1.0], + ["textfield-bezel-square-focused-4.png", 1.0, 1.0], + ["textfield-bezel-square-focused-5.png", 6.0, 1.0], + ["textfield-bezel-square-focused-6.png", 6.0, 6.0], + ["textfield-bezel-square-focused-7.png", 1.0, 6.0], + ["textfield-bezel-square-focused-8.png", 6.0, 6.0] + ]), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -1268,6 +1281,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont boldSystemFontOfSize:13.0]], @@ -1275,8 +1289,10 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -1301,10 +1317,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 3.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -1313,10 +1331,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", 2.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index bf72661f3..86a43e46f 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -824,6 +824,14 @@ var themedButtonValues = nil, height: 4.0 }), + bezelFocusedColor = PatternColor( + "textfield-bezel-square-focused{position}.png", + { + positions: "#", + width: 9.0, + height: 9.0 + }), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -835,14 +843,17 @@ var themedButtonValues = nil, [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.5], CPThemeStateDisabled], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 6.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(3.0, 0.0, 3.0, 0.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, 0, 0.0, -3.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -859,6 +870,7 @@ var themedButtonValues = nil, [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], [@"date-hour-margin", 7.0], [@"stepper-margin", 5.0], + [@"stepper-margin", 2.0, CPThemeStateEditing], [@"min-size", CGSizeMake(0, 29.0)], [@"max-size", CGSizeMake(-1.0, 29.0)], @@ -867,10 +879,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(2.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 0.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -879,10 +893,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(1.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", -1.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], From ad364b618438506746387bf51bd78cd33b0feef1 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 26 Nov 2014 12:01:40 -0800 Subject: [PATCH 59/70] Fixed: CPDatePicker doesn't have a focusRing when editing Previously, the CPDatePicker didn't have a focus ring when an user was editing it. Now it does. It works for Aristo1 and Aristo2. Test App in Tests/Manual/CPDatePickerTest Fixed #2263 --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 4 ++++ AppKit/Themes/Aristo/ThemeDescriptors.j | 20 ++++++++++++++++++++ AppKit/Themes/Aristo2/ThemeDescriptors.j | 16 ++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 39935b536..18ad45a4a 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -123,6 +123,8 @@ var CPZeroKeyCode = 48, // This is usefull when clicking on the stepper when the datePicker is not selected [_stepper setObjectValue:0]; + //[_datePicker unsetThemeState:CPThemeStateEditing]; + return YES; } @@ -1771,6 +1773,7 @@ var CPMonthDateType = 0, - (void)makeSelectable { [self setThemeState:CPThemeStateSelected]; + [_datePicker setThemeState:CPThemeStateEditing]; } /*! Unsert the theme CPThemeStateSelected @@ -1779,6 +1782,7 @@ var CPMonthDateType = 0, { _firstEvent = YES; [self unsetThemeState:CPThemeStateSelected]; + [_datePicker unsetThemeState:CPThemeStateEditing]; } diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index efbbb1c23..4bac4681a 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -1258,6 +1258,19 @@ var themedButtonValues = nil, ["textfield-bezel-square-disabled-8.png", 6.0, 6.0] ]), + bezelFocusedColor = PatternColor( + [ + ["textfield-bezel-square-focused-0.png", 6.0, 6.0], + ["textfield-bezel-square-focused-1.png", 1.0, 6.0], + ["textfield-bezel-square-focused-2.png", 6.0, 6.0], + ["textfield-bezel-square-focused-3.png", 6.0, 1.0], + ["textfield-bezel-square-focused-4.png", 1.0, 1.0], + ["textfield-bezel-square-focused-5.png", 6.0, 1.0], + ["textfield-bezel-square-focused-6.png", 6.0, 6.0], + ["textfield-bezel-square-focused-7.png", 1.0, 6.0], + ["textfield-bezel-square-focused-8.png", 6.0, 6.0] + ]), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -1268,6 +1281,7 @@ var themedButtonValues = nil, themeValues = [ [@"bezel-color", bezelColor, CPThemeStateBezeled], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-color", bezelDisabledColor, [CPThemeStateBezeled, CPThemeStateDisabled]], [@"font", [CPFont boldSystemFontOfSize:13.0]], @@ -1275,8 +1289,10 @@ var themedButtonValues = nil, [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 5.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, -3.0, 0.0, -3.0), [CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -1301,10 +1317,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 5.0), [CPThemeStateControlSizeSmall, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 3.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -1313,10 +1331,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 4.0), [CPThemeStateControlSizeMini, CPThemeStateEditing, CPThemeStateBezeled]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", 2.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j index bf72661f3..86a43e46f 100644 --- a/AppKit/Themes/Aristo2/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j @@ -824,6 +824,14 @@ var themedButtonValues = nil, height: 4.0 }), + bezelFocusedColor = PatternColor( + "textfield-bezel-square-focused{position}.png", + { + positions: "#", + width: 9.0, + height: 9.0 + }), + bezelColorDatePickerTextField = PatternColor( [ [@"datepicker-date-segment-0.png", 4.0, 18.0], @@ -835,14 +843,17 @@ var themedButtonValues = nil, [ [@"bezel-color", bezelColor["@"], CPThemeStateBezeled], [@"bezel-color", bezelColor["disabled"], [CPThemeStateBezeled, CPThemeStateDisabled]], + [@"bezel-color", bezelFocusedColor, [CPThemeStateBezeled, CPThemeStateEditing]], [@"font", [CPFont systemFontOfSize:CPFontCurrentSystemSize]], [@"text-color", [CPColor colorWithWhite:0.2 alpha:0.5], CPThemeStateDisabled], [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 3.0), CPThemeStateNormal], [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), CPThemeStateBezeled], + [@"content-inset", CGInsetMake(6.0, 0.0, 0.0, 6.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"bezel-inset", CGInsetMake(3.0, 0.0, 3.0, 0.0), CPThemeStateBezeled], + [@"bezel-inset", CGInsetMake(0.0, 0, 0.0, -3.0), [CPThemeStateNormal, CPThemeStateBezeled, CPThemeStateEditing]], [@"datepicker-textfield-bezel-color", [CPColor clearColor], CPThemeStateNormal], [@"datepicker-textfield-bezel-color", bezelColorDatePickerTextField, CPThemeStateSelected], @@ -859,6 +870,7 @@ var themedButtonValues = nil, [@"min-size-datepicker-textfield", CGSizeMake(6.0, 18.0)], [@"date-hour-margin", 7.0], [@"stepper-margin", 5.0], + [@"stepper-margin", 2.0, CPThemeStateEditing], [@"min-size", CGSizeMake(0, 29.0)], [@"max-size", CGSizeMake(-1.0, 29.0)], @@ -867,10 +879,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeSmall [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateNormal]], [@"content-inset", CGInsetMake(2.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(5.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeSmall, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 16.0), CPThemeStateControlSizeSmall], [@"date-hour-margin", 5.0, CPThemeStateControlSizeSmall], [@"stepper-margin", 3.0, CPThemeStateControlSizeSmall], + [@"stepper-margin", 0.0, [CPThemeStateControlSizeSmall, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 26.0), CPThemeStateControlSizeSmall], [@"max-size", CGSizeMake(-1.0, 26.0), CPThemeStateControlSizeSmall], @@ -879,10 +893,12 @@ var themedButtonValues = nil, // CPThemeStateControlSizeMini [@"content-inset", CGInsetMake(3.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateNormal]], [@"content-inset", CGInsetMake(1.0, 0.0, 0.0, 3.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled]], + [@"content-inset", CGInsetMake(4.0, 0.0, 0.0, 6.0), [CPThemeStateControlSizeMini, CPThemeStateBezeled, CPThemeStateEditing]], [@"min-size-datepicker-textfield", CGSizeMake(6.0, 12.0), CPThemeStateControlSizeMini], [@"date-hour-margin", 2.0, CPThemeStateControlSizeMini], [@"stepper-margin", 2.0, CPThemeStateControlSizeMini], + [@"stepper-margin", -1.0, [CPThemeStateControlSizeMini, CPThemeStateEditing]], [@"min-size", CGSizeMake(0, 22.0), CPThemeStateControlSizeMini], [@"max-size", CGSizeMake(-1.0, 22.0), CPThemeStateControlSizeMini], From 243024e2322b3208b298e7e3f276af275034a4fe Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 26 Nov 2014 13:12:39 -0800 Subject: [PATCH 60/70] Fix broken tests due to new objj type checks --- Tests/AppKit/CPArrayControllerTest.j | 3 +++ Tests/AppKit/CPBrowserTest.j | 3 +++ Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j | 2 ++ Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j | 4 +++- Tests/AppKit/CPOutlineViewTest.j | 3 +++ Tests/AppKit/CPTokenFieldTest.j | 2 ++ Tests/Foundation/CPKVCArrayTest.j | 3 +++ Tests/Foundation/CPKVOTest.j | 3 +++ Tests/Foundation/CPKeyValueCodingTest.j | 3 +++ .../Preprocessor/OutputTests/Class/accessors.j | 4 ++-- .../Preprocessor/OutputTests/Class/accessors.js | 13 +++++++------ .../OutputTests/Class/root-class-multiple-ivars.j | 2 +- .../OutputTests/Class/root-class-multiple-ivars.js | 3 +-- .../OutputTests/Class/root-class-one-ivar.j | 3 +-- .../OutputTests/Class/root-class-one-ivar.js | 2 +- .../Preprocessor/OutputTests/Class/root-class.j | 2 +- .../Preprocessor/OutputTests/Class/root-class.js | 2 +- 17 files changed, 40 insertions(+), 17 deletions(-) diff --git a/Tests/AppKit/CPArrayControllerTest.j b/Tests/AppKit/CPArrayControllerTest.j index 3365cfdcf..35b8e3388 100644 --- a/Tests/AppKit/CPArrayControllerTest.j +++ b/Tests/AppKit/CPArrayControllerTest.j @@ -3,6 +3,9 @@ @import @import +@class Department +@class Employee + @implementation CPArrayControllerTest : OJTestCase { CPArrayController _arrayController @accessors(property=arrayController); diff --git a/Tests/AppKit/CPBrowserTest.j b/Tests/AppKit/CPBrowserTest.j index 420dfb279..bc29049bb 100644 --- a/Tests/AppKit/CPBrowserTest.j +++ b/Tests/AppKit/CPBrowserTest.j @@ -1,5 +1,8 @@ @import +@class CPBrowserDelegate + + @implementation CPBrowserTest : OJTestCase { CPBrowser browser; diff --git a/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j b/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j index d9c0e06d1..d1bb9af84 100644 --- a/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j +++ b/Tests/AppKit/CPKeyValueBindingSimpleBindingsTest.j @@ -1,6 +1,8 @@ @import +@class Track + /*! Bindings tests exercising the functionality seen in the Cocoa example "SimpleBindingsAdoption". */ diff --git a/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j b/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j index e60c456db..5757c368d 100644 --- a/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j +++ b/Tests/AppKit/CPMenuValidatedUserInterfaceItemTest.j @@ -1,5 +1,7 @@ var CPMenuValidatedUserInterfaceItemTestValidatedItems = []; +@class MenuTarget + @implementation CPMenuValidatedUserInterfaceItemTest : OJTestCase { CPMenu _menu @accessors(property=menu); @@ -83,4 +85,4 @@ var CPMenuValidatedUserInterfaceItemTestValidatedItems = []; } -@end \ No newline at end of file +@end diff --git a/Tests/AppKit/CPOutlineViewTest.j b/Tests/AppKit/CPOutlineViewTest.j index 65219ea41..129c6965b 100644 --- a/Tests/AppKit/CPOutlineViewTest.j +++ b/Tests/AppKit/CPOutlineViewTest.j @@ -1,5 +1,8 @@ @import +@class TestOutlineDataSource + + @implementation CPOutlineViewTest : OJTestCase { CPOutlineView outlineView; diff --git a/Tests/AppKit/CPTokenFieldTest.j b/Tests/AppKit/CPTokenFieldTest.j index 6c8320eeb..cd65113ad 100644 --- a/Tests/AppKit/CPTokenFieldTest.j +++ b/Tests/AppKit/CPTokenFieldTest.j @@ -1,5 +1,7 @@ @import +@class TestDelegateTokenField + [CPApplication sharedApplication]; @implementation CPTokenFieldTest : OJTestCase diff --git a/Tests/Foundation/CPKVCArrayTest.j b/Tests/Foundation/CPKVCArrayTest.j index 12e5edd52..6948d4177 100644 --- a/Tests/Foundation/CPKVCArrayTest.j +++ b/Tests/Foundation/CPKVCArrayTest.j @@ -1,5 +1,8 @@ var COUNTER; +@class TestObject +@class ImplementedTestObject + @implementation CPKVCArrayTest : OJTestCase { TestObject _object @accessors(property=object); diff --git a/Tests/Foundation/CPKVOTest.j b/Tests/Foundation/CPKVOTest.j index 1fa905abd..631e2ac80 100644 --- a/Tests/Foundation/CPKVOTest.j +++ b/Tests/Foundation/CPKVOTest.j @@ -1,6 +1,9 @@ @import @import +@class CarTester +@class ToManyTester + @implementation CPKVOTest : OJTestCase { BOOL _sawInitialObservation; diff --git a/Tests/Foundation/CPKeyValueCodingTest.j b/Tests/Foundation/CPKeyValueCodingTest.j index ac57d9f02..ccf560401 100644 --- a/Tests/Foundation/CPKeyValueCodingTest.j +++ b/Tests/Foundation/CPKeyValueCodingTest.j @@ -22,6 +22,9 @@ @import +@class Department2 +@class Employee2 + var accessIVARS = YES; @implementation KVCTestClass : CPObject diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j index fe7fcc5de..820cad2f6 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.j @@ -1,10 +1,10 @@ -@implementation Class +@implementation TestClass { } @end -@implementation Class (Accessors) +@implementation TestClass (Accessors) { Type ivar @accessors; } diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js index 9db2e1754..ae78cbb53 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js @@ -1,13 +1,14 @@ -var the_class=objj_allocateClassPair(Nil,"Class"),meta_class=the_class.isa; +var the_class=objj_allocateClassPair(Nil,"TestClass"),meta_class=the_class.isa; objj_registerClassPair(the_class); -var the_class=objj_getClass("Class"); +var the_class=objj_getClass("TestClass"); if(!the_class){ -throw new SyntaxError("*** Could not find definition for class \"Class\""); +throw new SyntaxError("*** Could not find definition for class \"TestClass\""); } var meta_class=the_class.isa; class_addIvars(the_class,[new objj_ivar("ivar")]); -class_addMethods(the_class,[new objj_method(sel_getUid("ivar"),function $Class__ivar(_1,_2){ +class_addMethods(the_class,[new objj_method(sel_getUid("ivar"),function $TestClass__ivar(_1,_2){ return _1.ivar; -},["Type"]),new objj_method(sel_getUid("setIvar:"),function $Class__setIvar_(_3,_4,_5){ +},["Type"]),new objj_method(sel_getUid("setIvar:"),function $TestClass__setIvar_(_3,_4,_5){ _3.ivar=_5; -},["void","Type"])]); \ No newline at end of file +},["void","Type"])]); + diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j index 50d1fa504..603bc25e5 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.j @@ -1,5 +1,5 @@ -@implementation Class +@implementation TestClass { Type ivar; CPArray array; diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js index 7eba069a9..8cf16dc3b 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js @@ -1,5 +1,4 @@ - -var the_class = objj_allocateClassPair(Nil, "Class"), +var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; class_addIvars(the_class,[new objj_ivar("ivar"), new objj_ivar("array"), new objj_ivar("string"), new objj_ivar("integer")]); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j index 14fc4dd73..3aebab79d 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.j @@ -1,5 +1,4 @@ - -@implementation Class +@implementation TestClass { Type ivar; } diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js index 4c6f93642..165c23dc8 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js @@ -1,5 +1,5 @@ -var the_class = objj_allocateClassPair(Nil, "Class"), +var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; class_addIvars(the_class,[new objj_ivar("ivar")]); diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j index f0e079126..6f4f77d3d 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.j @@ -1,5 +1,5 @@ -@implementation Class +@implementation TestClass { } @end diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js index c266954fc..75528fb97 100644 --- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js +++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class.js @@ -1,5 +1,5 @@ -var the_class = objj_allocateClassPair(Nil, "Class"), +var the_class = objj_allocateClassPair(Nil, "TestClass"), meta_class = the_class.isa; objj_registerClassPair(the_class); From 02a47dc7b93b866c91d46b3e7313bcb013729780 Mon Sep 17 00:00:00 2001 From: Mathieu Monney Date: Thu, 27 Nov 2014 13:25:29 +0100 Subject: [PATCH 61/70] FIXED bootstrap URL due to github URL change. --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index b5a13beaa..ed10bd9e7 100644 --- a/README.markdown +++ b/README.markdown @@ -33,7 +33,7 @@ Getting Started --------------- To get started, download and install the current release version of Cappuccino: - $ curl https://raw.github.com/cappuccino/cappuccino/v0.9.7/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh + $ curl https://raw.githubusercontent.com/cappuccino/cappuccino/0.9.7/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh If you'd just like to get started using Cappuccino for your web apps, you are done. From c3fc6a087a1d4df406599c677a03c36e4eb0adbd Mon Sep 17 00:00:00 2001 From: Mathieu Monney Date: Thu, 27 Nov 2014 13:30:31 +0100 Subject: [PATCH 62/70] Fixed URL, wasn't the tagged released one. --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index ed10bd9e7..ed87b834d 100644 --- a/README.markdown +++ b/README.markdown @@ -33,7 +33,7 @@ Getting Started --------------- To get started, download and install the current release version of Cappuccino: - $ curl https://raw.githubusercontent.com/cappuccino/cappuccino/0.9.7/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh + $ curl https://raw.githubusercontent.com/cappuccino/cappuccino/v0.9.7-1/bootstrap.sh >/tmp/cappuccino_bootstrap.sh && bash /tmp/cappuccino_bootstrap.sh If you'd just like to get started using Cappuccino for your web apps, you are done. From 77f962eed4c1546c88e4bd88a1b04a35e182dc2e Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Fri, 28 Nov 2014 09:58:44 -0800 Subject: [PATCH 63/70] Style: removed comment in CPDatePicker --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 2 -- 1 file changed, 2 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 18ad45a4a..d1a987c7f 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -123,8 +123,6 @@ var CPZeroKeyCode = 48, // This is usefull when clicking on the stepper when the datePicker is not selected [_stepper setObjectValue:0]; - //[_datePicker unsetThemeState:CPThemeStateEditing]; - return YES; } From 4ebb2baf06c250d8b442b484bc2d9b42ec2f6c6f Mon Sep 17 00:00:00 2001 From: kevin-xu Date: Mon, 8 Dec 2014 22:00:02 +0800 Subject: [PATCH 64/70] New: Highlighted "@typedef" in VIM. "@typedef" should be highlighted since #2254. --- Tools/Editors/Vim/objj.vim | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/Editors/Vim/objj.vim b/Tools/Editors/Vim/objj.vim index e42d14c8a..a6d9d5028 100644 --- a/Tools/Editors/Vim/objj.vim +++ b/Tools/Editors/Vim/objj.vim @@ -68,6 +68,7 @@ syn match objjImported display contained "<[-_0-9a-zA-Z.\/]*>" syn match objjImport display "^\s*\(%:\|#\|@\)\s*import\>\s*["<]" contains=objjImported " Match the important ObjJ directives +syn match objjDirective "@typedef" syn match objjDirective "@interface\|@implementation\|@protocol\|@end" syn match objjScopeDecl "@public\|@protected\|@private\|@package" syn match objjScopeDecl "@required\|@optional" From cb5fe06e58c86655131a0b516295338a8af6900f Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 8 Dec 2014 15:29:28 -0800 Subject: [PATCH 65/70] Fixed: button are always removed from the superview in layoutSubviews Previously, the button of a CPButtonBar were always removed and readded in the method layoutSubviews. Now we only remove the hidden button. --- AppKit/CPButtonBar.j | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j index 024924830..47f869597 100644 --- a/AppKit/CPButtonBar.j +++ b/AppKit/CPButtonBar.j @@ -234,10 +234,11 @@ { var button = buttonsNotHidden[count]; - [button removeFromSuperview]; - if ([button isHidden]) + { + [button removeFromSuperview]; [buttonsNotHidden removeObject:button]; + } } var currentButtonOffset = _resizeControlIsLeftAligned ? CGRectGetMaxX([self bounds]) + 1 : -1, From 8b29369b7edd1ff2a113f59ded59c3ff3cf206a4 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 8 Dec 2014 15:36:31 -0800 Subject: [PATCH 66/70] Fixed: wrong option for the observer in _CPPopoverWindow Previously the option of the observer in _CPPopoverWindow were set to 0, now it's set to CPKeyValueObservingOptionNew. This PR fix also another issue, the popoverWindow registered the observer in the wrong order. It firstly observed the frame of the sender and then removed it directly. Now it register when ordering front the popover and remove it when closing the popover --- AppKit/_CPPopoverWindow.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 818ae6d60..bcadedcee 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -180,7 +180,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, return; _isObservingFrame = YES; - [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; + [_targetView addObserver:self forKeyPath:@"frame" options:CPKeyValueObservingOptionNew context:nil]; } /*! @@ -207,7 +207,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, return; var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; - [self setFrameOrigin:point]; } } @@ -362,7 +361,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [self setFrameOrigin:point]; [_windowView showCursor]; [_windowView setNeedsDisplay:YES]; - [self makeKeyAndOrderFront:nil]; if (positioningView !== _targetView) { @@ -371,6 +369,8 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _targetView = positioningView; } + [self makeKeyAndOrderFront:nil]; + /* If _targetView's window is not a full platform window, add us as a child, because when we close we are detached from From b74d49b0bf66875ece3fef694af2c3da2e8815f1 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Mon, 8 Dec 2014 15:54:25 -0800 Subject: [PATCH 67/70] Fixed: changed option for observer in _CPPopoverWindow.j --- AppKit/_CPPopoverWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index bcadedcee..ce2a7898b 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -180,7 +180,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, return; _isObservingFrame = YES; - [_targetView addObserver:self forKeyPath:@"frame" options:CPKeyValueObservingOptionNew context:nil]; + [_targetView addObserver:self forKeyPath:@"frame" options:0 context:nil]; } /*! From 1016c3e22f431f5972a23e2acb43a2b54a879263 Mon Sep 17 00:00:00 2001 From: Christophe Serafin Date: Mon, 8 Dec 2014 18:54:35 -0800 Subject: [PATCH 68/70] Fix controls' heights that are displayed in CPPredicateEditor Lastly, we removed the usage of max-size to enable some controls like CPTextField to have a specific height. This may caused a CPTextField to have a wrong height. As all controls in a CPPredicateEditor have a CPControlSize to small, we now force their height to the minimum size. --- AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j index 30470d5c6..80509dd16 100644 --- a/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j +++ b/AppKit/CPRuleEditor/_CPRuleEditorViewSliceRow.j @@ -122,8 +122,8 @@ { var title = [[itemsArray objectAtIndex:index] title], font = [_ruleEditor font], - width = [title sizeWithFont:font].width + 20, - rect = CGRectMake(0, 0, (width - width % 40) + 80, [_ruleEditor rowHeight]), + width = [title sizeWithFont:font].width + 35, // 35 for right arrows + margins + rect = CGRectMake(0, 0, width, [_ruleEditor rowHeight]), popup = [[CPPopUpButton alloc] initWithFrame:rect]; [popup setValue:font forThemeAttribute:@"font"]; @@ -315,8 +315,14 @@ { [ruleView setControlSize:CPSmallControlSize]; + var minSize = [ruleView currentValueForThemeAttribute:@"min-size"], + frame = [ruleView frame]; + + // Force controls to their minimum size + frame.size.height = minSize.height; + [ruleView setFrame:frame]; + [_ruleOptionViews addObject:ruleView]; - var frame = [ruleView frame]; [_ruleOptionInitialViewFrames addObject:frame]; [_ruleOptionFrames addObject:frame]; From 9174338140a29ac6b79b0fde71ee9567411cccf9 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 9 Dec 2014 17:26:02 -0800 Subject: [PATCH 69/70] Fixed: CPDatePicker takes key code CPReturnKeyCode all the time Previously, the CPDatePicker took the key code CPReturnKeyCode all the time. It means, the key event wasn't redistributed to the other component, for example a defaultButton in a window. Now instead of returning YES, it returns [super performKeyEquivalent:anEvent] --- AppKit/CPDatePicker/_CPDatePickerTextField.j | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/AppKit/CPDatePicker/_CPDatePickerTextField.j b/AppKit/CPDatePicker/_CPDatePickerTextField.j index 8fa09afce..07889ca4e 100644 --- a/AppKit/CPDatePicker/_CPDatePickerTextField.j +++ b/AppKit/CPDatePicker/_CPDatePickerTextField.j @@ -338,10 +338,11 @@ var CPZeroKeyCode = 48, if ([anEvent keyCode] == CPReturnKeyCode) { [_currentTextField _endEditing]; - return YES; + + return [super performKeyEquivalent:anEvent]; } - return NO; + return [super performKeyEquivalent:anEvent]; } /*! KeyDown event From 92b997fb78b25f77f228edbb84f8db5c766b0f1b Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 9 Dec 2014 19:04:12 -0800 Subject: [PATCH 70/70] Fixed: crash when dragging the first line of a RuleEditor above the field Any Previously, cappuccino crashed when dragging the first line of a CPRuleEditor above the field any. Now we make sure, we can not drag over this limit. --- AppKit/CPRuleEditor/CPRuleEditor.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPRuleEditor/CPRuleEditor.j b/AppKit/CPRuleEditor/CPRuleEditor.j index a02b8efe7..404c5546e 100644 --- a/AppKit/CPRuleEditor/CPRuleEditor.j +++ b/AppKit/CPRuleEditor/CPRuleEditor.j @@ -2207,7 +2207,7 @@ TODO: implement indexOfDropLine = FLOOR(y / _sliceHeight), numberOfRows = [self numberOfRows]; - if (indexOfDropLine < 0 || indexOfDropLine > numberOfRows || (indexOfDropLine >= [_draggingRows firstIndex] && indexOfDropLine <= [_draggingRows lastIndex] + 1)) + if (indexOfDropLine <= 0 || indexOfDropLine > numberOfRows || (indexOfDropLine >= [_draggingRows firstIndex] && indexOfDropLine <= [_draggingRows lastIndex] + 1)) { if (_subviewIndexOfDropLine !== CPNotFound && indexOfDropLine !== _subviewIndexOfDropLine) [self _clearDropLine];