Release date: 2011-11-16
The final release of Cappuccino 0.9.5 is identical to RC5.
Release date: 2011-11-16
- Fixed version number in documentation.
Release date: 2011-11-16
- Fixed with
CPTokenField
: quickly entered tokens would be ignored. - Fixed with
CPTokenField
: crash if added to a window in a unit test. - Fixed #1398: in a
CPTokenField
, deleting tokens in front of selected tokens would shift the selection to the right. - Fixed #1397: make sure
CPTokenField
selection is initialised when loading from cib.
Release date: 2011-11-11
- Local param shadowing now emits a warning instead of an error. This is temporary awaiting a proper fix of param shadowing in the preprocessor.
CPScanner
fixes.- Don't log backtraces repeatedly when using
objj_backtrace_decorator
. CPString -substringWithRange:
and-rangeOfString:options:range
now throwsCPRangeException
for out of bounds ranges.- Add
-forwardingTargetForSelector:
support. - Crude but functional infinite recursion checker, optional at compile time.
- New:
CPNumberFormatter
withCPNumberFormatterDecimalStyle
support. - New: support null values in
CPDictionary's +dictionaryWithJSObject:recursively:
(issue #1299). - New: objjc --help.
- New: objjc option to compile to stdout, with or without
@STATIC
tags, suitable for JavaScript linters. - Improved performance of
[CPString copy]
.
Bug Fixes:
- Fixed:
CPURL -isEqual:
for URLs with redundant slashes. - Fixed:
CPDate
timezone calculation ininitWithString:
. - Fixed #1065:
CPString -rangeOfString:
backwards search did not work. - Fixed:
CPString -rangeOfString:
anchored backwards search did not work. - Fixed: searching a string for @"" with
CPString -rangeOfString:
returned results other thanCPNotFound
. - Fixed:
CPString -rangeOfString:options:range
returned locations relative to the passed-in range instead of the full string. - Fixed:
CPMutableSet -addObject:
should raise with nil or undefined. - Fixed: very large numbers written to 280north1 plist files would be read back as very small numbers. This would among other things break nib2cib where certain controls would take on infinitesimal sizes.
- Fixed #1289: infinite recursion when coercing an object without a
-description
method into a string. - Fixed #469: infinite recursion when an unimplemented message was sent to an object with no superclass.
- Fixed with
CPDecimal
: decimal numbers below 1.0 would compare incorrectly with 0.0. - Fixed #1380, #1383: avoid "popen error (pipe): Too many open files" error when building Cappuccino.
- Fixed #1384: avoid user defaults QUOTA_EXCEEDED_ERR crash.
- New:
CPButton
continuous mode. - Improved:
CPSound
error handling and better Cocoa compliance. - Improved: table view keyboard row selection.
- New:
CPProgressIndicator
is now coding compliant. - New: keyboard navigation in menus.
- New: mouse wheel support in menus.
- New: automatic or explicit scroll mode selection for web views.
- New: support for pattern fills in
CGContext
(CGContextSetFillColor
with a pattern color). - Clean up JavaScript (missing semicolons, don't use commas as statement separators.)
CPWebView -isLoading
method.- Support for web views with transparent or coloured backgrounds.
CPObjectController automaticallyPreparesContent
support.- Added support for the
CPNullPlaceholderBindingOption
for bound text fields. - New: text field support for
CPContinuouslyUpdatesValueBindingOption
. - New: bindings support for inline table view cell editing.
- Support for
CPOutlineView outlineViewDeleteKeyPressed:
delegate method. CPEvents
sent duringmouseDragged:
now havedeltaX
anddeltaY
appropriately set (issues #1210, #1211).- New: coding support for
CPIndexPath
. CPMenu
item validation.- New:
collectionView:menuForItemAtIndex:
delegate method support. - New:
CPDictionary -keysSortedByValueUsingSelector:
which, just as it sounds, returns the keys of the dictionary sorted using a given selector. - Key equivalent display in menus for special characters such as escape, tab, arrow keys and many others.
- New: tooltip support for any view with the standard yellow box look (issue #1264).
- Remove table view corner view if there is no header view.
- Added
CPMenu -removeAll
method (issue #1260). - New:
CPPredicateEditor
allows a search or filter predicate to be constructed visually by the user. - Optimise array controller
addObject:
by eliminating entirely pointless rearrange when added objects did not pass the filter. Also avoid double rearrange ifclearsFilterPredicateOnInsertion
. - Draw table view gridlines precisely inside the right side of cells so that grid line positioning and spacing matches Cocoa.
- New:
CPUserDefaultsController
which can be used to easily bind controls to user default keys, in Interface Builder or elsewhere. - Optimise
CPArrayController insertObject:atArrangedObjectIndex:
. - Minor array controller optimisation: don't send a
filterPredicate
change notification ifclearsFilterPredicateOnInsertion
is YES butfilterPredicate
is already nil wheninsertObject:atArrangedObjectIndex:
is called. CPArrayController handlesContentAsCompoundValue
support forcontentArray
binding.- Left and right arrow keys can now be used to expand and collapse items in
CPOutlineView
. - New:
CPLevelIndicator
shows a meter with discrete levels from empty to full. CPFormatter
support forCPControl
.- New scroll view
scrollViewWillScroll:
andscrollViewDidScroll:
delegate methods, inspired byUIScrollViewDelegate
(issue #1177). - Multiple improvements to
CPMenu
opening, closing and handling of submenus. - Coding support for
CPCharacterSet
when the set is of thecharacterSetWithCharactersInString
kind. CPCharacterSet -isEqual:
support when the set is of thecharacterSetWithCharactersInString
kind.- Inverted
CPCharacterSet +characterSetWithCharactersInString
now archive properly. - New: coding support for
CPTokenField
. CPArray
range checking (issue #1334).CPBoxes
created with+boxEnclosingView:
now take on the autoresizing mask of the passed view (issue #1335).- Improved table view redrawing performance when
usesAlternatingBackgroundColors
is YES (issue #1341). - Allow
CPAlert
subclasses to use+alertWithMessageText:...
et al (issue #1333). - Improved performance of
valueForKeyPath:
(issue #1344). [CPSound play]
now plays the sound once it has been loaded if it hasn't yet (issue #1345).- Raise
CPRangeException
ifCPString substringToIndex:
is out of bounds. - New: support nested
willChange<Key>
anddidChange<Key>
calls. When multiple calls are nested, only the firstwillChange...
and the lastdidChange...
will notify observers, avoiding duplicate notifications for the same change. This can massively improve performance since observations sometimes lead to cascading updates (issue #1343). - Send
didChange
in reverse order ofwillChange
inCPObjectController setContent:
. - Implemented support for the
CPTokenField tokenField:shouldAddObjects:atIndex:
delegate method (issue #1360). CPStepper
button sizes can now be themed.- New:
CPColorWithImages()
convenience function to quickly create aCPColor
from single, 3-part or 9-part images (issue #1274). - Enhanced
-description
method ofCPImage
andCPColor
to show the exact content, especially for pattern colors (issue #1274). - New: allow binding a table column value to an array controller reached through a key path.
- Improved split view performance: eliminate excessive
splitViewDidResizeSubviews:
messages. - New: support for collapsing views towards the right in split views.
- New: split view auto save support.
- New: 'overlay' style scrollbars which fade out when not in use. Old style scrollbars are also supported and automatically enabled if the browser does not use overlay style scrollbars (e.g. OS X Lion with a touch enabled input device uses overlay style scrollbars, but a Windows XP machine with a mousewheel would not.)
- New:
CPWindow setMovable:
support which specifies whether a window can be dragged (issue #1358). - New:
CPPopover
control to create small "pop up" widgets attached to other controls, similar to the Downloads pop-over in Safari 5 (issue #1316). - Allow almost anything as a key equivalent unless a text field is the first responder. E.g. pressing "a" with no modifiers can now trigger a button.
Bug Fixes:
- Fixed with
CPViewAnimation:
all animation curves behaved like a linear curve (issue #1313). - Fixed: issue with
CPSound
in Firefox. - Fixed #1033:
CPFlashView
setParameters: bugs. - Fixed: uniform table view column resizing.
- Fixed:
CPSearchField
layout glitch. - Fixed #1122:
CPSplitView setIsPaneSplitter:
had the opposite effect of what it should have been. - Fixed with
CPTextField
: cut and paste using the mouse did not set stringValue properly. - Fixed with
CPTextField
:CPControlTextDidBeginEditingNotification
andCPControlTextDidChangeNotification
were not sent after cut and paste. - Fixed: bugs with
CPTableView
column resizing. - Fixed:
CPOutLineView outlineView:sortDescriptorsDidChange:
delegate message was not sent. - Fixed with KVO: method replacement happened for every call to
addObserver:
when one replacement would do. - Fixed: spacing in
CPBrowser
. - Fixed: color panel layout issues.
- Fixed: scroll view corner and headerview decoding.
- Fixed: unarchiving table views with no header view.
- Fixed #1136: for the most part, web views'
setScrollMode:
message did nothing. - Fixed: web view AppKit scrollbars often did not reflect the true content size of the view.
- Fixed: several Internet Explorer compatibility bugs.
- Fixed:
[CPArrayController arrangedObjects]
could be nil. - Fixed #1160:
CPSearchField
delegate methodcontrolTextDidChange:
didn't always get fired. - Fixed: memory leak in
CPSearchField
. - Fixed: scroller error when horizontal scroller was too small.
- Fixed: split view did not reposition subviews or remove divider when a subview was removed.
- Fixed: root layer transform inadvertantly changed when redisplayed.
- Fixed: if
unarchiver:didDecodeObject:
returned nil, the original object was still replaced (with nil) instead of being kept. - Fixed #864: corner view did not always draw the line above the left edge of the scroll view.
- Fixed: loading an empty string into a web view would make it entirely white regardless of the background colour specified.
- Fixed: in Firefox, certain web views would not send the first
webView:didFinishLoadForFrame:
delegate message. - Fixed:
CPSlider isContinuous
disagreed withsetContinuous:
. - Fixed:
CPSliders
always became continuous when archived/unarchived. - Fixed: more graceful handling when
nextKeyView
is self. - Fixed: when a column was selected the column selection colour would not cover the whole column.
- Fixed: table views'
rectOfColumn:
method returned a rect reduced by the intercell spacing. It should return the rect of the entire column. - Fixed: when table view grid lines were active they did not draw on top of selection highlights like in Cocoa.
- Fixed: an array controller with a bound
contentArray
would sometimes fail whenadd:
,remove:
and similar methods were called. - Fixed #687:
CPColor colorWithCSSString:
did not properly handle the alpha component of the CSS rbga() syntax. - Fixed:
CPInvalidArgumentException: Unsupported method on CPArray
when attempting to bind to aCPArrayController's arrangedObjects
before callingsetContent:
. - Fixed #1174:
CPArrayController _arrangedObjects
initialisation error. - Fixed:
CPOutlineView
provided dragged items in reverse order. - Fixed: once a table view drag and drop was retargeted, the new target would 'stick' as the drag continued.
- Fixed: the content view of a decoded
CPBox
would have the wrong autoresizing mask. - Fixed: unhandled keyboard events of a window did not travel past the window.
- Fixed: JS objects 'randomly' failed to unarchive due to a caching problem. One visible symptom was that
CPTextField's
custom inset would decode fine, but a subclass of aCPTextField
would fail to decode the inset. - Fixed: table headers didn't scroll with the rest of the table during drag and drop.
- Fixed:
CGGradientCreateWithColorComponents
assumed there'd only be two colors in each gradient. - Fixed #1242: color space was missing for colors created by
CGColorCreateGenericGray
,CGColorCreateGenericRGB
andCGColorCreateGenericCMYK
. - Fixed #1242:
CGColorCreateCopyWithAlpha
could create colors with an alpha value incorrectly linked to other cached colors. - Fixed: crash when the same observer was removed twice. Warn instead.
- Fixed: out of bounds error in
CPPopUpButton itemWithTitle:
. - Fixed: setting a new platform window on a visisble window caused a DOM exception.
- Fixed:
[CPIndexSet indexPathByRemovingLastIndex]
didn't remove the last index. - Fixed:
[CPIndexSet indexes]
did not return a copy of the indexes. - Fixed #1249: multiple
_CPImageAndTextViews
sharing the sameCPImage
failed to properly observe its loading. - Fixed #684: sizing problem when revealing hidden
CPWebView
. - Fixed #664: web view sizing bug when loading contents prior to adding the view to the display tree.
- Fixed #682:
CPColor isEqual:
sometimes failed to recognise equal instances specified withcolorWithCSSString:
. - Fixed:
CPColor isEqual:
for pattern images. - Fixed: on WebKit for the Mac, the right command key was not recognised as a modifier.
- Fixed: duplicate observer notification for array controller
addObject:
(on arrangedObjects). - Fixed:
CPTableColumn width
,minWidth
andmaxWidth
encoding. - Fixed: don't return nil from
CPController initWithCoder:
. - Fixed: during
CPUserDefault
change notifications,objectForKey:
could return the value from prior to the change. - Fixed: array controller
remove:
would not only remove selected rows, but also any other rowsisEqual:
to the selected rows. - Fixed with table view: don't start dragging if there are no rows.
- Fixed: under some circumstances a
CPMenu
could return a separator as the highligted item. - Fixed: pressing the up arrow key in a table view would cause a crash if the previous selection was non continuous.
- Fixed #1320: if a
CPTextField's
target action changed the first responder then the target action was called twice if the textfield edit was completed by hitting the enter/return key. - Fixed #1285:
CPPredicate
would crash if a beginsWith or endsWith comparison was made where the right hand string was longer than the left hand string. - Fixed #1305: max toolbar item width was constrained to the width of the label.
- Fixed with menus: don't disallow
setEnabled:
for auto enabled items. - Fixed with token fields:
tokenField:tokenField completionsForSubstring:indexOfToken:indexOfSelectedItem:
ignored itsindexOfToken:
parameter. - Fixed: in recent versions of WebKit window.open("") does not work, which broke new platform windows (issue #1352).
- Fixed:
CPArrayController setSelectionIndexes:
sometimes modified its input. - Fixed: several
CPArrayController
methods returnedundefined
instead of booleans. - Fixed:
CPWindow
did not return NO toacceptsFirstResponder
messages. - Fixed: multiple errors with key view loops (window's content view not included at the start of the loop,
selectNextKeyView:
,selectPreviousKeyView:
,selectKeyViewFollowingView:
andselectKeyViewPrecedingView:
not acting like in Cocoa). - Fixed:
mutableArrayValueForKey:
KVO proxy objects did not use plural selectors (e.g.remove<Key>AtIndexes:
,replace<Key>AtIndexes:
) when implemented by the proxied object. - Fixed: platform window titles could not be changed once the window had been opened.
- Fixed with
CPStepper setFrame:
method modified its input. - Fixed:
CPRadio
sent its action after a programmaticsetState:
change. - Fixed: disappearing or fuzzy table header dividing lines at certain table sizes.
- Fixed #1376: zombie table group rows.
- Fixed with
CPTextField
: if a field lost focus while a key was depressed the string value would not update with the last pressed key. - Fixed:
CPMenu -removeAllItems
was not KVO compliant. - Fixed #1319:
CPPopupButton -selectedIndex
could become wrong when menu items were removed. - Fixed #1019: in Internet Explorer, many key equivalents such as left arrow, page up and delete did not work.
- New:
CPProgressIndicator
support. - New: Support for image views in table views.
- New: Support 'enabled' state for controls.
- Much improved font support (issue #1197 among others.)
- Support for
sendsActionOnEndEditing
flag. - Improved support for radio buttons (issue #1197).
- nib2cib support for bold and italic (issue #1266).
- Much improved button positioning for various button styles (issue #1268).
- nib2cib support for
NSButtonCell
(e.g. checkboxes) in table columns. - Partial button image support in nib2cib covering
NSAddTemplate
andNSRemoveTemplate
(standard plus and minus buttons). - nib2cib support for formatters such as the new number formatter.
- nib2cib support for token fields.
- New: XcodeCapp, a graphical utility which automates the nib2cib process and makes it easy to use Xcode 4's Interface Builder to visually create and edit the user interface of a Cappuccino application. XcodeCapp replaces the older command line based xcodecapp utility.
Bug Fixes:
- Fixed: sometimes nib2cibbed check boxes would appear out of place.
- Fixed #1190: potential
Result of expression '_subviews[index]' [null] is not an object
error for nib2cibbed radio groups. - Fixed: could not load theme errors.
- Fixed #1265: enabled state for
NSColorWell
was not read properly.
- Fixed Objective-J Preprocessor tests: scoping bug that caused only the last file in FILENAMES to be tested.
- Improved: Xcode 4.0 support for building NativeHost.
- Documentation updates: new front page, tweaked design and many more documented classes and methods.
- More complete
capp --help
. - man page for
capp
. - Fixed #1259: issues finding Mac OS X 10.5 SDK on certain machines when building NativeHost.
- New: "framework" template for capp which generates a skeleton Cappuccino Framework (issue #1321).
- Cappuccino moved to a new GitHub location:
https://github.com/cappuccino/cappuccino
. - Simplified bootstrap which better hides complexity.
- When bootstrapping, don't suggest changing
NARWHAL_ENGINE
tojsc
if it's alreadyjsc
.