21 - (id)initWithFrame:(NSRect)frame {
22 self = [
super initWithFrame:frame];
26 dataArray = [[NSMutableArray alloc] init];
27 [
self setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle];
28 [
self setUsesAlternatingRowBackgroundColors:YES];
29 [
self setDataSource:self];
30 [
self setDelegate:self];
32 [
self setTarget:self];
33 [
self setAction:@selector(performAction:)];
35 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(performAction:) name:NSTableViewSelectionDidChangeNotification object:self];
41 [[NSNotificationCenter defaultCenter] removeObserver:self];
46 #pragma mark Special Methods
53 -(void) performAction:(
id) sender {
59 -(void) setTitelsAndCreateColumns:(NSString*)titleString {
60 if (!titleString)
return;
63 NSArray *oldColumns = [
self tableColumns];
64 for (NSTableColumn *oldColumn in oldColumns) {
65 [
self removeTableColumn:oldColumn];
70 NSArray *titles = [titleString componentsSeparatedByString:@"\t"];
72 NSUInteger numOfColumns = [titles count];
74 for (i=0; i<numOfColumns; i++) {
75 NSString *indexString = [NSString stringWithFormat:@"%u",i];
76 NSTableColumn *newColumn = [[NSTableColumn alloc] initWithIdentifier:indexString];
77 [newColumn setEditable:NO];
78 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:indexString ascending:YES];
79 [newColumn setSortDescriptorPrototype:sortDescriptor];
80 [sortDescriptor release];
81 NSString *newTitle = [titles objectAtIndex:i];
82 if (newTitle) [[newColumn headerCell] setStringValue:newTitle];
83 [
self addTableColumn:newColumn];
85 [
self sizeLastColumnToFit];
89 NSArray *columns = [
self tableColumns];
91 NSMutableString *ouputString = [[NSMutableString alloc] init];
94 NSUInteger count = [columns count];
95 for (i=0; i<count; i++) {
96 NSString *value = [[[columns objectAtIndex:i] headerCell] stringValue];
98 [ouputString appendString:value];
100 if (i<count-1) [ouputString appendString:@"\t"];
102 return [ouputString autorelease];
107 -(void) addDataRowString:(NSString*)dataRowString {
108 if (!dataRowString)
return;
110 NSArray *newDataStrings = [dataRowString componentsSeparatedByString:@"\t"];
112 NSMutableArray *columnArray = [[NSMutableArray alloc] initWithArray:newDataStrings];
114 [columnArray release];
117 -(NSString*) dataRowStringForRow:(NSUInteger)index {
119 NSMutableString *ouputString = [[NSMutableString alloc] init];
120 NSArray *rowArray = [
dataArray objectAtIndex:index];
123 NSUInteger count = [rowArray count];
124 for (i=0; i<count; i++) {
125 NSString *value = [rowArray objectAtIndex:i];
127 [ouputString appendString:value];
129 if (i<count-1) [ouputString appendString:@"\t"];
131 return [ouputString autorelease];
143 NSInteger positionSort(
id element1,
id element2,
void *context)
145 NSString *obj1 = nil;
146 NSString *obj2 = nil;
147 NSDictionary *contextDict = (NSDictionary*)context;
148 NSInteger indexOfColumn = [[contextDict objectForKey:@"indexOfColumn"] integerValue];
149 BOOL ascending = [[contextDict objectForKey:@"ascending"] boolValue];
150 if ([element1 count] > indexOfColumn) {
151 obj1 = [element1 objectAtIndex:indexOfColumn];
153 if ([element2 count] > indexOfColumn) {
154 obj2 = [element2 objectAtIndex:indexOfColumn];
157 NSComparisonResult result = [obj1 localizedCaseInsensitiveCompare:obj2];
158 if (ascending)
return result;
160 if (result == NSOrderedAscending)
return NSOrderedDescending;
161 else if (result == NSOrderedDescending)
return NSOrderedAscending;
165 return NSOrderedSame;
169 -(void) sortTableView:(NSTableView*)tableView {
170 NSArray *sortDescriptors = [tableView sortDescriptors];
171 if (!sortDescriptors || [sortDescriptors count] <=0)
return;
172 NSSortDescriptor *sortDesc = [sortDescriptors objectAtIndex:0];
175 NSNumber *indexOfColumn = [NSNumber numberWithInteger:[[sortDesc key] integerValue]];
176 NSNumber *sortOrder = [NSNumber numberWithBool:[sortDesc ascending]];
178 NSArray *keys = [NSArray arrayWithObjects:@"indexOfColumn", @"ascending", nil];
179 NSArray *objects = [NSArray arrayWithObjects:indexOfColumn, sortOrder, nil];
180 NSDictionary *contextDict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
182 [dataArray sortUsingFunction:positionSort context:contextDict];
188 -(BOOL) setColumnWidthTo:(NSInteger)widthInPixels forColumn:(NSInteger)index {
189 if (index < 0 || widthInPixels < 0)
return NO;
190 NSTableColumn *tableColumn = [
self tableColumnWithIdentifier:[NSString stringWithFormat:@"%i",index]];
192 [tableColumn setWidth:widthInPixels];
198 -(NSInteger) widthOfColumn:(NSInteger)index {
200 NSTableColumn *tableColumn = [
self tableColumnWithIdentifier:[NSString stringWithFormat:@"%i",index]];
202 return ceil([tableColumn width]);
208 -(BOOL) setSortOrderTo:(BOOL)ascending ForColumnWithIndex:(NSUInteger)index {
209 NSArray *tableColumns = [
self tableColumns];
210 if (index < [tableColumns count]) {
211 NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:[NSString stringWithFormat:@"%u",index] ascending:ascending];
212 [
self setSortDescriptors:[NSArray arrayWithObject:sortDesc]];
215 [
self sortTableView:self];
221 -(NSInteger) sortOrderForColumnAtIndex:(NSUInteger)index {
222 NSArray *tableColumns = [
self tableColumns];
223 if (index < [tableColumns count]) {
224 NSArray *sortDescriptors = [
self sortDescriptors];
225 if (!sortDescriptors || [sortDescriptors count] <=0)
return -1;
226 NSSortDescriptor *sortDesc = [sortDescriptors objectAtIndex:0];
228 if ((NSUInteger)[[sortDesc key] integerValue] == index) {
229 return [sortDesc ascending];
235 #pragma mark DataSource Methods
237 - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {
238 return [dataArray count];
241 - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
242 if (rowIndex >= 0 && rowIndex < [
dataArray count]) {
243 NSUInteger index = [(NSString*)[aTableColumn identifier] integerValue];
244 NSArray *rowArray = [dataArray objectAtIndex:rowIndex];
245 if (rowArray && index < [rowArray count]) {
246 return [rowArray objectAtIndex:index];
252 - (void)tableView:(NSTableView *)aTableView setObjectValue:(
id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
256 #pragma mark Delegate Methods
258 - (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors {
259 [
self sortTableView:aTableView];
262 #pragma mark Protocoll Methods
265 return NSMakeSize(300.0, 300.0);