mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-10-23 08:38:53 +00:00
Work on appropriately sizing table view.
Reviewed by me.
This commit is contained in:
1 parent
201fda96a5
commit
8beb71aa76
2 files changed
+165
-18
No files matched your search
+162
-17
@@ -43,6 +43,8 @@ CPTableViewSelectionHighlightStyleRegular = 0;
|
||||
CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
*/
|
||||
|
||||
#define NUMBER_OF_COLUMNS() (_tableColumns.length)
|
||||
|
||||
@implementation NEWCPTableView : CPControl
|
||||
{
|
||||
id _dataSource;
|
||||
@@ -54,6 +56,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
CPArray _tableColumns;
|
||||
CPArray _tableColumnRanges;
|
||||
CPInteger _dirtyTableColumnRangeIndex;
|
||||
CPInteger _numberOfHiddenColumns;
|
||||
|
||||
Object _objectValues;
|
||||
|
||||
@@ -86,12 +89,15 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
_allowsEmptySelection = YES;
|
||||
_allowsColumnSelection = NO;
|
||||
|
||||
_tableViewFlags = 0;
|
||||
|
||||
//Setting Display Attributes
|
||||
// _selectionHighlightMask = CPTableViewSelectionHighlightStyleRegular;
|
||||
|
||||
_tableColumns = [];
|
||||
_tableColumnRanges = [];
|
||||
_dirtyTableColumnRangeIndex = CPNotFound;
|
||||
_numberOfHiddenColumns = 0;
|
||||
|
||||
_objectValues = { };
|
||||
_numberOfRows = 0;
|
||||
@@ -152,9 +158,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
if (!_dataSource)
|
||||
return;
|
||||
|
||||
_numberOfRows = [_dataSource numberOfRowsInTableView:self];
|
||||
_objectValues = { };
|
||||
|
||||
[self noteNumberOfRowsChanged];
|
||||
[self _sizeToParent];
|
||||
[self layoutSubviews];
|
||||
}
|
||||
|
||||
@@ -305,9 +311,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
[_tableColumns addObject:aTableColumn];
|
||||
|
||||
if (_dirtyTableColumnRangeIndex < 0)
|
||||
_dirtyTableColumnRangeIndex = _tableColumns.length - 1;
|
||||
_dirtyTableColumnRangeIndex = NUMBER_OF_COLUMNS() - 1;
|
||||
else
|
||||
_dirtyTableColumnRangeIndex = MIN(_tableColumns.length - 1, _dirtyTableColumnRangeIndex);
|
||||
_dirtyTableColumnRangeIndex = MIN(NUMBER_OF_COLUMNS() - 1, _dirtyTableColumnRangeIndex);
|
||||
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
@@ -363,7 +369,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
- (CPInteger)columnWithIdentifier:(CPString)anIdentifier
|
||||
{
|
||||
var index = 0,
|
||||
count = _tableColumns.length;
|
||||
count = NUMBER_OF_COLUMNS();
|
||||
|
||||
for (; index < count; ++index)
|
||||
if ([_tableColumns identifier] === anIdentifier)
|
||||
@@ -405,7 +411,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
|
||||
- (int)numberOfColumns
|
||||
{
|
||||
return _tableColumns.length;
|
||||
return NUMBER_OF_COLUMNS();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -438,13 +444,15 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
*/
|
||||
//Layout Support
|
||||
|
||||
// Complexity:
|
||||
// O(Columns)
|
||||
- (void)_recalculateTableColumnRanges
|
||||
{
|
||||
if (_dirtyTableColumnRangeIndex < 0)
|
||||
return;
|
||||
|
||||
var index = _dirtyTableColumnRangeIndex,
|
||||
count = _tableColumns.length,
|
||||
count = NUMBER_OF_COLUMNS(),
|
||||
x = index === 0 ? 0.0 : CPMaxRange(_tableColumnRanges[index - 1]);
|
||||
|
||||
for (; index < count; ++index)
|
||||
@@ -468,11 +476,13 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
_dirtyTableColumnRangeIndex = CPNotFound;
|
||||
}
|
||||
|
||||
// Complexity:
|
||||
// O(1)
|
||||
- (CGRect)rectOfColumn:(CPInteger)aColumnIndex
|
||||
{
|
||||
aColumnIndex = +aColumnIndex;
|
||||
|
||||
if (aColumnIndex < 0 || aColumnIndex >= _tableColumns.length)
|
||||
if (aColumnIndex < 0 || aColumnIndex >= NUMBER_OF_COLUMNS())
|
||||
return _CGRectMakeZero();
|
||||
|
||||
if (_dirtyTableColumnRangeIndex !== CPNotFound)
|
||||
@@ -488,23 +498,59 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
if (NO)
|
||||
return NULL;
|
||||
|
||||
// FIXME: WRONG: ASK TABLE COLUMN RANGE
|
||||
return _CGRectMake(0.0, (aRowIndex * (_rowHeight + _intercellSpacing.height)), _CGRectGetWidth([self bounds]), _rowHeight);
|
||||
}
|
||||
|
||||
// Complexity:
|
||||
// O(1)
|
||||
- (CPRange)rowsInRect:(CGRect)aRect
|
||||
{
|
||||
return CPMakeRange( MAX(0, [self rowAtPoint:aRect.origin]),
|
||||
MIN(_numberOfRows, [self rowAtPoint:_CGPointMake(_CGRectGetMaxX(aRect), _CGRectGetMaxY(aRect))]));
|
||||
var bounds = nil,
|
||||
firstRow = [self rowAtPoint:aRect.origin],
|
||||
lastRow = [self rowAtPoint:_CGPointMake(0.0, _CGRectGetMaxY(aRect))];
|
||||
|
||||
if (firstRow < 0)
|
||||
{
|
||||
bounds = [self bounds];
|
||||
|
||||
if (_CGRectGetMinY(aRect) < _CGRectGetMinY(bounds))
|
||||
firstRow = 0;
|
||||
else
|
||||
firstRow = _numberOfRows - 1;
|
||||
}
|
||||
|
||||
if (lastRow < 0)
|
||||
{
|
||||
if (!bounds)
|
||||
bounds = [self bounds];
|
||||
|
||||
if (_CGRectGetMaxY(aRect) < _CGRectGetMinY(bounds))
|
||||
lastRow = 0;
|
||||
else
|
||||
lastRow = _numberOfRows - 1;
|
||||
}
|
||||
|
||||
return CPMakeRange(firstRow, lastRow - firstRow + 1);
|
||||
}
|
||||
|
||||
// Complexity:
|
||||
// O(lg Columns) if table view contains no hidden columns
|
||||
// O(Columns) if table view contains hidden columns
|
||||
- (CPIndexSet)columnIndexesInRect:(CGRect)aRect
|
||||
{
|
||||
var indexSet = [CPIndexSet indexSet],
|
||||
column = MAX(0, [self columnAtPoint:_CGPointMake(aRect.origin.x, 0.0)]),
|
||||
var column = MAX(0, [self columnAtPoint:_CGPointMake(aRect.origin.x, 0.0)]),
|
||||
lastColumn = [self columnAtPoint:_CGPointMake(_CGRectGetMaxX(aRect), 0.0)];
|
||||
|
||||
if (lastColumn === CPNotFound)
|
||||
lastColumn = [self numberOfColumns] - 1;
|
||||
lastColumn = NUMBER_OF_COLUMNS() - 1;
|
||||
|
||||
// Don't bother doing the expensive removal of hidden indexes if we have no hidden columns.
|
||||
if (_numberOfHiddenColumns < 0)
|
||||
return [CPIndexSet indexSetWithIndexesInRange:CPMakeRange(column, lastColumn - column)];
|
||||
|
||||
//
|
||||
var indexSet = [CPIndexSet indexSet];
|
||||
|
||||
for (; column <= lastColumn; ++column)
|
||||
{
|
||||
@@ -517,6 +563,9 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
return indexSet;
|
||||
}
|
||||
|
||||
// Complexity:
|
||||
// O(lg Columns) if table view contains now hidden columns
|
||||
// O(Columns) if table view contains hidden columns
|
||||
- (CPInteger)columnAtPoint:(CGPoint)aPoint
|
||||
{
|
||||
if (!CGRectContainsPoint([self bounds], aPoint))
|
||||
@@ -572,8 +621,41 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
* Ð frameOfCellAtColumn:row:
|
||||
* Ð columnAutoresizingStyle
|
||||
* Ð setColumnAutoresizingStyle:
|
||||
* Ð sizeLastColumnToFit
|
||||
* Ð noteNumberOfRowsChanged
|
||||
*/
|
||||
- (void)sizeLastColumnToFit
|
||||
{
|
||||
var superview = [self superview];
|
||||
|
||||
if (!superview)
|
||||
return;
|
||||
|
||||
var superviewSize = [superview bounds].size;
|
||||
|
||||
if (_dirtyTableColumnRangeIndex !== CPNotFound)
|
||||
[self _recalculateTableColumnRanges];
|
||||
|
||||
var count = NUMBER_OF_COLUMNS();
|
||||
|
||||
while (count-- && [_tableColumns[count] isHidden]) ;
|
||||
|
||||
if (count >= 0)
|
||||
{
|
||||
var difference = superviewSize.width - CPMaxRange(_tableColumnRanges[count]),
|
||||
tableColumn = _tableColumns[count];
|
||||
|
||||
[tableColumn setWidth:MAX(0.0, [tableColumn width] + difference)];
|
||||
}
|
||||
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (void)noteNumberOfRowsChanged
|
||||
{
|
||||
_numberOfRows = [_dataSource numberOfRowsInTableView:self];
|
||||
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
/*
|
||||
* Ð tile
|
||||
* Ð sizeToFit
|
||||
* Ð noteHeightOfRowsWithIndexesChanged:
|
||||
@@ -591,6 +673,23 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
* Ð setAutosaveTableColumns:
|
||||
*/
|
||||
|
||||
- (void)_sizeToParent
|
||||
{
|
||||
var superviewSize = [[self superview] bounds].size;
|
||||
|
||||
if (_dirtyTableColumnRangeIndex !== CPNotFound)
|
||||
[self _recalculateTableColumnRanges];
|
||||
|
||||
if (_tableColumnRanges.length > 0)
|
||||
var naturalWidth = CPMaxRange([_tableColumnRanges lastObject]);
|
||||
|
||||
else
|
||||
var naturalWidth = 0.0;
|
||||
|
||||
[self setFrameSize:_CGSizeMake( MAX(superviewSize.width, naturalWidth),
|
||||
MAX(superviewSize.height, (_rowHeight + _intercellSpacing.height) * _numberOfRows))];
|
||||
}
|
||||
|
||||
//Setting the Delegate:(id)aDelegate
|
||||
|
||||
- (void)setDelegate:(id)aDelegate
|
||||
@@ -777,14 +876,14 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
{
|
||||
var superview = [self superview];
|
||||
|
||||
if (!superview)
|
||||
if (![superview isKindOfClass:[CPClipView class]])
|
||||
return [self bounds];
|
||||
|
||||
return [self convertRect:CGRectIntersection([superview bounds], [self frame]) fromView:superview];
|
||||
}
|
||||
|
||||
- (void)load
|
||||
{console.log("logging.");
|
||||
{//console.log("logging.");
|
||||
if (!_dataSource)
|
||||
{
|
||||
// remove?
|
||||
@@ -832,4 +931,50 @@ CPTableViewSelectionHighlightStyleSourceList = 1;
|
||||
[self load];
|
||||
}
|
||||
|
||||
- (void)viewWillMoveToSuperview:(CPView)aView
|
||||
{
|
||||
var superview = [self superview],
|
||||
defaultCenter = [CPNotificationCenter defaultCenter];
|
||||
|
||||
if (superview)
|
||||
{
|
||||
[defaultCenter
|
||||
removeObserver:self
|
||||
name:CPViewFrameDidChangeNotification
|
||||
object:superview];
|
||||
|
||||
[defaultCenter
|
||||
removeObserver:self
|
||||
name:CPViewBoundsDidChangeNotification
|
||||
object:superview];
|
||||
}
|
||||
|
||||
if (aView)
|
||||
{
|
||||
[aView setPostsFrameChangedNotifications:YES];
|
||||
[aView setPostsBoundsChangedNotifications:YES];
|
||||
|
||||
[defaultCenter
|
||||
addObserver:self
|
||||
selector:@selector(superviewFrameChanged:)
|
||||
name:CPViewFrameDidChangeNotification
|
||||
object:aView];
|
||||
|
||||
[defaultCenter
|
||||
addObserver:self
|
||||
selector:@selector(superviewBoundsChanged:)
|
||||
name:CPViewBoundsDidChangeNotification
|
||||
object:aView];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)superviewBoundsChanged:(CPNotification)aNotification
|
||||
{
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (void)superviewFrameChanged:(CPNotification)aNotification
|
||||
{
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,5 +1,7 @@
|
||||
|
||||
@import <Foundation/CPObject.j>
|
||||
|
||||
@import <Foundation/CPIndexSet.j>
|
||||
@import <AppKit/NEWCPTableColumn.j>
|
||||
@import <AppKit/NEWCPTableView.j>
|
||||
|
||||
@@ -62,7 +64,7 @@ CPLogRegister(CPLogConsole);
|
||||
|
||||
- (int)numberOfRowsInTableView:(CPTableView)tableView
|
||||
{
|
||||
return 7000000;
|
||||
return 700000;
|
||||
}
|
||||
|
||||
- (id)tableView:(CPTableView)tableView objectValueForTableColumn:(CPTableColumn)tableColumn row:(int)row
|
||||
|
||||
Reference in new issue
Block a user