Skip to content

Commit bc3b8ab

Browse files
committed
Move code in SPNarrowDownCompletion to where it should be (part of #3062)
Still a bit strange…
1 parent 8c23f9b commit bc3b8ab

File tree

1 file changed

+82
-88
lines changed

1 file changed

+82
-88
lines changed

Source/SPNarrowDownCompletion.m

Lines changed: 82 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)