1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license that can
* be found in the License.html file in the root of the source tree.
*/
// Created by Maxim Pozdeev on 20.07.12.
#import "TreeOutlineDelegate.h"
@implementation TreeOutlineDelegate
/**
* word wrapping
* column cell's layout should be set to Wrap
*/
- (void)outlineViewColumnDidResize:(NSNotification *)notification {
NSOutlineView *o = [notification object];
// Tell the outline that we will have changed the row heights
[o noteHeightOfRowsWithIndexesChanged:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, o.numberOfRows)]];
}
//this method called for non-empty cells
- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item {
int row = [outlineView rowForItem:item];
//calc max height of cell in every column
CGFloat maxHeight = [outlineView rowHeight];
int max = [[outlineView tableColumns] count];
for(int i=0; i<max; i++) {
NSTableColumn *col = [[outlineView tableColumns] objectAtIndex:i];
if(col.isHidden) {
continue;
}
//offset is calculated for the 1st column of outlineview
CGFloat offset = i == 0 ? ([outlineView levelForRow:row]+1) * [outlineView indentationPerLevel] : 0; //+triangle?
NSCell *cell = [outlineView preparedCellAtColumn:i row:row];
NSRect constrainedBounds = NSMakeRect(0, 0, col.width-offset, CGFLOAT_MAX);
NSSize naturalSize = [cell cellSizeForBounds:constrainedBounds];
if(naturalSize.height > maxHeight) {
maxHeight = naturalSize.height;
}
}
return maxHeight;
}
@end
|