@@ -491,69 +491,107 @@ - (NSIndexSet *)tableView:(NSTableView *)tableView selectionIndexesForProposedSe
491491 return proposedSelectionIndexes;
492492}
493493
494- - (id )tableView : (NSTableView *)aTableView objectValueForTableColumn : (NSTableColumn *)aTableColumn row : (NSInteger )rowIndex
494+ - (NSCell * )tableView : (NSTableView *)tableView dataCellForTableColumn : (NSTableColumn *)tableColumn row : (NSInteger )rowIndex
495495{
496- NSString *identifier = [aTableColumn identifier ];
497- if ([identifier isEqualToString: @" image" ]) {
498- if (!dictMode) {
499- if (isQueryingDatabaseStructure && rowIndex == 0 ) {
500- return [syncArrowImages objectAtIndex: currentSyncImage];
501- }
502- else {
503- NSImage * image = nil ;
504- NSString *imageName = [[filtered objectAtIndex: rowIndex] objectForKey: @" image" ];
505- if (imageName) image = [NSImage imageNamed: imageName];
506- return image;
496+ // tableColumn == nil is called for a potential group row by the table view, which we don't have
497+ if (!tableColumn) return nil ;
498+
499+ NSString *identifier = [tableColumn identifier ];
500+ if ([identifier isEqualToString: @" list" ]) {
501+ if (
502+ !(isQueryingDatabaseStructure && rowIndex == 0 ) &&
503+ !dictMode &&
504+ [[filtered objectAtIndex: rowIndex] objectForKey: @" list" ]
505+ ) {
506+ NSPopUpButtonCell *b = [NSPopUpButtonCell new ];
507+ [b setPullsDown: NO ];
508+ [b setAltersStateOfSelectedItem: NO ];
509+ [b setControlSize: NSMiniControlSize ];
510+ {
511+ NSMenu *m = [[NSMenu alloc ] init ];
512+ NSMenuItem *aMenuItem = [[[NSMenuItem alloc ] initWithTitle: NSLocalizedString(@" Type Declaration:" , @" type declaration header" ) action: NULL keyEquivalent: @" " ] autorelease ];
513+ [aMenuItem setEnabled: NO ];
514+ [m addItem: aMenuItem];
515+ [m addItemWithTitle: [[filtered objectAtIndex: rowIndex] objectForKey: @" list" ] action: NULL keyEquivalent: @" " ];
516+ [b setMenu: m];
517+ [m release ];
507518 }
519+ [b setPreferredEdge: NSMinXEdge];
520+ [b setArrowPosition: NSPopUpArrowAtCenter];
521+ [b setFont: [NSFont systemFontOfSize: 11 ]];
522+ [b setBordered: NO ];
523+ return [b autorelease ];
508524 }
509-
510- return @" " ;
511525 }
512- else if ([identifier isEqualToString: @" name" ]) {
513- if (isQueryingDatabaseStructure && rowIndex == 0 ) {
514- return NSLocalizedString(@" fetching database structure in progress" , @" fetching database structure in progress" );
526+ else if ([identifier isEqualToString: @" type" ]) {
527+ if (!(isQueryingDatabaseStructure && rowIndex == 0 ) && !dictMode) {
528+ NSTokenFieldCell *b = [[NSTokenFieldCell alloc ] init ];
529+ [b setEditable: NO ];
530+ [b setAlignment: NSRightTextAlignment ];
531+ [b setFont: [NSFont systemFontOfSize: 11 ]];
532+ return [b autorelease ];
515533 }
516-
517- return [[filtered objectAtIndex: rowIndex] objectForKey: @" display" ];
518534 }
519- else if ([identifier isEqualToString: @" list" ]) {
520- if (isQueryingDatabaseStructure && rowIndex == 0 ) {
521- NSPopUpButtonCell *b = [[NSPopUpButtonCell new ] autorelease ];
535+ else if ([identifier isEqualToString: @" path" ]) {
536+ if (
537+ !(isQueryingDatabaseStructure && rowIndex == 0 ) &&
538+ !dictMode &&
539+ [[filtered objectAtIndex: rowIndex] objectForKey: @" path" ]
540+ ) {
541+ NSPopUpButtonCell *b = [NSPopUpButtonCell new ];
522542 [b setPullsDown: NO ];
523- [b setArrowPosition: NSPopUpNoArrow ];
543+ [b setAltersStateOfSelectedItem: NO ];
524544 [b setControlSize: NSMiniControlSize ];
545+ {
546+ NSMenu *m = [[NSMenu alloc ] init ];
547+ for (id p in [[[[[filtered objectAtIndex: rowIndex] objectForKey: @" path" ] componentsSeparatedByString: SPUniqueSchemaDelimiter] reverseObjectEnumerator ] allObjects ]) {
548+ [m addItemWithTitle: p action: NULL keyEquivalent: @" " ];
549+ }
550+ if ([m numberOfItems ] > 2 ) {
551+ [m removeItemAtIndex: [m numberOfItems ]-1 ];
552+ [m removeItemAtIndex: 0 ];
553+ }
554+ [b setMenu: m];
555+ [m release ];
556+ }
557+ [b setPreferredEdge: NSMinXEdge];
558+ [b setArrowPosition: ([b numberOfItems ] > 1 ? NSPopUpArrowAtCenter : NSPopUpNoArrow)];
525559 [b setFont: [NSFont systemFontOfSize: 11 ]];
526560 [b setBordered: NO ];
527- [aTableColumn setDataCell: b];
528- return @" " ;
561+ return [b autorelease ];
529562 }
563+ }
530564
565+ // ... otherwise use the default cell for the column (text field cell)
566+ return nil ;
567+ }
568+
569+ - (id )tableView : (NSTableView *)aTableView objectValueForTableColumn : (NSTableColumn *)aTableColumn row : (NSInteger )rowIndex
570+ {
571+ NSString *identifier = [aTableColumn identifier ];
572+ if ([identifier isEqualToString: @" image" ]) {
531573 if (dictMode) {
532574 return @" " ;
533575 }
534576
535- if ([[filtered objectAtIndex: rowIndex] objectForKey: @" list" ]) {
536- NSPopUpButtonCell *b = [[NSPopUpButtonCell new ] autorelease ];
537- [b setPullsDown: NO ];
538- [b setAltersStateOfSelectedItem: NO ];
539- [b setControlSize: NSMiniControlSize ];
540- NSMenu *m = [[NSMenu alloc ] init ];
541- NSMenuItem *aMenuItem = [[[NSMenuItem alloc ] initWithTitle: NSLocalizedString(@" Type Declaration:" , @" type declaration header" ) action: NULL keyEquivalent: @" " ] autorelease ];
542- [aMenuItem setEnabled: NO ];
543- [m addItem: aMenuItem];
544- [m addItemWithTitle: [[filtered objectAtIndex: rowIndex] objectForKey: @" list" ] action: NULL keyEquivalent: @" " ];
545- [b setMenu: m];
546- [m release ];
547- [b setPreferredEdge: NSMinXEdge];
548- [b setArrowPosition: NSPopUpArrowAtCenter];
549- [b setFont: [NSFont systemFontOfSize: 11 ]];
550- [b setBordered: NO ];
551- [aTableColumn setDataCell: b];
577+ if (isQueryingDatabaseStructure && rowIndex == 0 ) {
578+ return [syncArrowImages objectAtIndex: currentSyncImage];
552579 }
553580 else {
554- [aTableColumn setDataCell: [[NSTextFieldCell new ] autorelease ]];
581+ NSImage * image = nil ;
582+ NSString *imageName = [[filtered objectAtIndex: rowIndex] objectForKey: @" image" ];
583+ if (imageName) image = [NSImage imageNamed: imageName];
584+ return image;
585+ }
586+ }
587+ else if ([identifier isEqualToString: @" name" ]) {
588+ if (isQueryingDatabaseStructure && rowIndex == 0 ) {
589+ return NSLocalizedString(@" fetching database structure in progress" , @" fetching database structure in progress" );
555590 }
556591
592+ return [[filtered objectAtIndex: rowIndex] objectForKey: @" display" ];
593+ }
594+ else if ([identifier isEqualToString: @" list" ]) {
557595 return @" " ;
558596 }
559597 else if ([identifier isEqualToString: @" type" ]) {
@@ -565,53 +603,9 @@ - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColu
565603 return @" " ;
566604 }
567605
568- NSTokenFieldCell *b = [[[NSTokenFieldCell alloc ] initTextCell: ([[filtered objectAtIndex: rowIndex] objectForKey: @" type" ]) ? [[filtered objectAtIndex: rowIndex] objectForKey: @" type" ] : @" " ] autorelease ];
569- [b setEditable: NO ];
570- [b setAlignment: NSRightTextAlignment ];
571- [b setFont: [NSFont systemFontOfSize: 11 ]];
572- return b;
606+ return ([[filtered objectAtIndex: rowIndex] objectForKey: @" type" ] ? [[filtered objectAtIndex: rowIndex] objectForKey: @" type" ] : @" " );
573607 }
574608 else if ([identifier isEqualToString: @" path" ]) {
575- if (isQueryingDatabaseStructure && rowIndex == 0 ) {
576- NSPopUpButtonCell *b = [[NSPopUpButtonCell new ] autorelease ];
577- [b setPullsDown: NO ];
578- [b setArrowPosition: NSPopUpNoArrow];
579- [b setControlSize: NSMiniControlSize ];
580- [b setFont: [NSFont systemFontOfSize: 11 ]];
581- [b setBordered: NO ];
582- [aTableColumn setDataCell: b];
583- return @" " ;
584- }
585-
586- if (dictMode) {
587- return @" " ;
588- }
589-
590- if ([[filtered objectAtIndex: rowIndex] objectForKey: @" path" ]) {
591- NSPopUpButtonCell *b = [[NSPopUpButtonCell new ] autorelease ];
592- [b setPullsDown: NO ];
593- [b setAltersStateOfSelectedItem: NO ];
594- [b setControlSize: NSMiniControlSize ];
595- NSMenu *m = [[NSMenu alloc ] init ];
596- for (id p in [[[[[filtered objectAtIndex: rowIndex] objectForKey: @" path" ] componentsSeparatedByString: SPUniqueSchemaDelimiter] reverseObjectEnumerator ] allObjects ]) {
597- [m addItemWithTitle: p action: NULL keyEquivalent: @" " ];
598- }
599- if ([m numberOfItems ]>2 ) {
600- [m removeItemAtIndex: [m numberOfItems ]-1 ];
601- [m removeItemAtIndex: 0 ];
602- }
603- [b setMenu: m];
604- [m release ];
605- [b setPreferredEdge: NSMinXEdge];
606- [b setArrowPosition: ([m numberOfItems ]>1 ) ? NSPopUpArrowAtCenter : NSPopUpNoArrow];
607- [b setFont: [NSFont systemFontOfSize: 11 ]];
608- [b setBordered: NO ];
609- [aTableColumn setDataCell: b];
610- }
611- else {
612- [aTableColumn setDataCell: [[NSTextFieldCell new ] autorelease ]];
613- }
614-
615609 return @" " ;
616610 }
617611
0 commit comments