Created
June 28, 2010 15:52
-
-
Save nickjs/455996 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/AppKit/CPArrayController.j b/AppKit/CPArrayController.j | |
index 5fefb58..729b937 100644 | |
--- a/AppKit/CPArrayController.j | |
+++ b/AppKit/CPArrayController.j | |
@@ -334,8 +334,12 @@ | |
- (CPArray)selectedObjects | |
{ | |
var objects = [[self arrangedObjects] objectsAtIndexes:[self selectionIndexes]]; | |
+ if (objects) | |
+ objects = [_CPObservableArray arrayWithArray:objects]; | |
+ else | |
+ objects = [_CPObservableArray array]; | |
- return objects || [_CPObservableArray array]; | |
+ return objects; | |
} | |
- (BOOL)setSelectedObjects:(CPArray)objects | |
diff --git a/AppKit/CPKeyValueBinding.j b/AppKit/CPKeyValueBinding.j | |
index 3aabc98..a926cdd 100644 | |
--- a/AppKit/CPKeyValueBinding.j | |
+++ b/AppKit/CPKeyValueBinding.j | |
@@ -263,7 +263,7 @@ var CPBindingOperationAnd = 0, | |
// CPLog.warn("No binding exposed on "+self+" for "+aBinding); | |
[self unbind:aBinding]; | |
- [[CPKeyValueBinding alloc] initWithBinding:[anObject _replacementKeyPathForBinding:aBinding] name:aBinding to:anObject keyPath:aKeyPath options:options from:self]; | |
+ [[CPKeyValueBinding alloc] initWithBinding:[self _replacementKeyPathForBinding:aBinding] name:aBinding to:anObject keyPath:aKeyPath options:options from:self]; | |
} | |
- (CPDictionary)infoForBinding:(CPString)aBinding | |
diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j | |
index 480c013..d40747d 100644 | |
--- a/AppKit/CPTableView.j | |
+++ b/AppKit/CPTableView.j | |
@@ -882,6 +882,22 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
[self _noteSelectionDidChange]; | |
} | |
+- (void)_setSelectedRowIndexes:(CPIndexSet)rows | |
+{ | |
+ var previousSelectedIndexes = [_selectedRowIndexes copy]; | |
+ | |
+ _lastSelectedRow = ([rows count] > 0) ? [rows lastIndex] : -1; | |
+ _selectedRowIndexes = [rows copy]; | |
+ | |
+ [self _updateHighlightWithOldRows:previousSelectedIndexes newRows:_selectedRowIndexes]; | |
+ [_tableDrawView display]; // FIXME: should be setNeedsDisplayInRect:enclosing rect of new (de)selected rows | |
+ // but currently -drawRect: is not implemented here | |
+ | |
+ [[CPKeyValueBinding getBinding:@"selectionIndexes" forObject:self] reverseSetValueFor:@"selectedRowIndexes"]; | |
+ | |
+ [self _noteSelectionDidChange]; | |
+} | |
+ | |
/*! | |
Sets the row selection using indexes. | |
@param rows a CPIndexSet of rows to select | |
@@ -902,20 +918,16 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
[_headerView setNeedsDisplay:YES]; | |
} | |
- var previousSelectedIndexes = [_selectedRowIndexes copy]; | |
- | |
+ var newSelectedIndexes; | |
if (shouldExtendSelection) | |
- [_selectedRowIndexes addIndexes:rows]; | |
+ { | |
+ newSelectedIndexes = [_selectedRowIndexes copy]; | |
+ [newSelectedIndexes addIndexes:rows]; | |
+ } | |
else | |
- _selectedRowIndexes = [rows copy]; | |
- | |
- // update last selected row | |
- _lastSelectedRow = ([rows count] > 0) ? [rows lastIndex] : -1; | |
+ newSelectedIndexes = [rows copy]; | |
- [self _updateHighlightWithOldRows:previousSelectedIndexes newRows:_selectedRowIndexes]; | |
- [_tableDrawView display]; // FIXME: should be setNeedsDisplayInRect:enclosing rect of new (de)selected rows | |
- // but currently -drawRect: is not implemented here | |
- [self _noteSelectionDidChange]; | |
+ [self _setSelectedRowIndexes:newSelectedIndexes]; | |
} | |
- (void)_updateHighlightWithOldRows:(CPIndexSet)oldRows newRows:(CPIndexSet)newRows | |
@@ -3427,14 +3439,23 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; | |
@implementation CPTableView (Bindings) | |
+- (CPString)_replacementKeyPathForBinding:(CPString)aBinding | |
+{ | |
+ if (aBinding === @"selectionIndexes") | |
+ return @"selectedRowIndexes"; | |
+ | |
+ return [super _replacementKeyPathForBinding:aBinding]; | |
+} | |
+ | |
- (void)_establishBindingsIfUnbound:(id)destination | |
{ | |
if ([[self infoForBinding:@"content"] objectForKey:CPObservedObjectKey] !== destination) | |
- { | |
[self bind:@"content" toObject:destination withKeyPath:@"arrangedObjects" options:nil]; | |
- //[self bind:@"sortDescriptors" toObject:destination withKeyPath:@"sortDescriptors" options:nil]; | |
- //[self bind:@"selectionIndexes" toObject:destination withKeyPath:@"selectionIndexes" options:nil]; | |
- } | |
+ | |
+ if ([[self infoForBinding:@"selectionIndexes"] objectForKey:CPObservedObjectKey] !== destination) | |
+ [self bind:@"selectionIndexes" toObject:destination withKeyPath:@"selectionIndexes" options:nil]; | |
+ | |
+ //[self bind:@"sortDescriptors" toObject:destination withKeyPath:@"sortDescriptors" options:nil]; | |
} | |
- (void)setContent:(CPArray)content |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment