43
43
#pragma mark -
44
44
#pragma mark attribute definition
45
45
46
- # define kSPAutoCompletePlaceholderName @" Placeholder"
47
- # define kSPAutoCompletePlaceholderVal @" placholder"
46
+ static NSString * const SPAutoCompletePlaceholderName = @" Placeholder" ;
47
+ static NSString * const SPAutoCompletePlaceholderVal = @" placholder" ;
48
48
49
49
@interface NSTableView (MovingSelectedRow)
50
50
@@ -226,12 +226,9 @@ - (id) initWithItems:(NSArray *)someSuggestions
226
226
parseRange : (NSRange )parseRange
227
227
inView : (id )aView
228
228
dictMode : (BOOL )mode
229
- dbMode : (BOOL )theDbMode
230
229
tabTriggerMode : (BOOL )tabTriggerMode
231
230
fuzzySearch : (BOOL )fuzzySearch
232
231
backtickMode : (NSInteger )theBackTickMode
233
- withDbName : (NSString *)dbName
234
- withTableName : (NSString *)tableName
235
232
selectedDb : (NSString *)selectedDb
236
233
caretMovedLeft : (BOOL )caretMovedLeft
237
234
autoComplete : (BOOL )autoComplete
@@ -257,7 +254,6 @@ - (id) initWithItems:(NSArray *)someSuggestions
257
254
if (fuzzyMode) [theTableView setBackgroundColor: [NSColor colorWithCalibratedRed: 0 .9f green: 0 .9f blue: 0 .9f alpha: 1 .0f ]];
258
255
else [theTableView setBackgroundColor: [NSColor whiteColor ]];
259
256
260
- dbStructureMode = theDbMode;
261
257
cursorMovedLeft = caretMovedLeft;
262
258
backtickMode = theBackTickMode;
263
259
commaInsertionMode = NO ;
@@ -268,7 +264,6 @@ - (id) initWithItems:(NSArray *)someSuggestions
268
264
caseSensitive = isCaseSensitive;
269
265
270
266
theCharRange = initRange;
271
- noFilterString = ([aUserString length ]) ? NO : YES ;
272
267
273
268
theParseRange = parseRange;
274
269
@@ -300,8 +295,6 @@ - (id) initWithItems:(NSArray *)someSuggestions
300
295
301
296
currentDb = selectedDb;
302
297
303
- theDbName = dbName;
304
-
305
298
if (someAdditionalWordCharacters) [textualInputCharacters addCharactersInString: someAdditionalWordCharacters];
306
299
307
300
databaseStructureRetrieval = [theDatabaseStructure retain ];
@@ -361,32 +354,43 @@ - (void)setupInterface
361
354
[theTableView setAllowsEmptySelection: YES ];
362
355
[theTableView setHeaderView: nil ];
363
356
364
- NSTableColumn *column0 = [[[NSTableColumn alloc ] initWithIdentifier: @" image" ] autorelease ];
365
- [column0 setDataCell: [[NSImageCell new ] autorelease ]];
366
- [theTableView addTableColumn: column0];
367
- [column0 setMinWidth: 0 ];
368
- [column0 setWidth: 20 ];
369
-
370
- NSTableColumn *column1 = [[[NSTableColumn alloc ] initWithIdentifier: @" name" ] autorelease ];
371
- [column1 setEditable: NO ];
372
- [theTableView addTableColumn: column1];
373
- [column1 setWidth: 170 ];
374
-
375
- NSTableColumn *column3 = [[[NSTableColumn alloc ] initWithIdentifier: @" type" ] autorelease ];
376
- [column3 setEditable: NO ];
377
- [theTableView addTableColumn: column3];
378
- [column3 setWidth: 139 ];
379
-
380
- NSTableColumn *column2 = [[[NSTableColumn alloc ] initWithIdentifier: @" list" ] autorelease ];
381
- [column2 setEditable: NO ];
382
- [theTableView addTableColumn: column2];
383
- [column0 setMinWidth: 0 ];
384
- [column2 setWidth: 6 ];
385
-
386
- NSTableColumn *column4 = [[[NSTableColumn alloc ] initWithIdentifier: @" path" ] autorelease ];
387
- [column4 setEditable: NO ];
388
- [theTableView addTableColumn: column4];
389
- [column4 setWidth: 95 ];
357
+ {
358
+ NSTableColumn *column = [[[NSTableColumn alloc ] initWithIdentifier: @" image" ] autorelease ];
359
+ [column setDataCell: [[NSImageCell new ] autorelease ]];
360
+ [theTableView addTableColumn: column];
361
+ [column setMinWidth: 0 ];
362
+ [column setWidth: 20 ];
363
+ }
364
+
365
+ {
366
+ NSTableColumn *column = [[[NSTableColumn alloc ] initWithIdentifier: @" name" ] autorelease ];
367
+ [column setEditable: NO ];
368
+ [[column dataCell ] setFont: [NSFont systemFontOfSize: 12 ]];
369
+ [theTableView addTableColumn: column];
370
+ [column setWidth: 170 ];
371
+ }
372
+
373
+ {
374
+ NSTableColumn *column = [[[NSTableColumn alloc ] initWithIdentifier: @" type" ] autorelease ];
375
+ [column setEditable: NO ];
376
+ [theTableView addTableColumn: column];
377
+ [column setWidth: 139 ];
378
+ }
379
+
380
+ {
381
+ NSTableColumn *column = [[[NSTableColumn alloc ] initWithIdentifier: @" list" ] autorelease ];
382
+ [column setEditable: NO ];
383
+ [theTableView addTableColumn: column];
384
+ [column setMinWidth: 0 ];
385
+ [column setWidth: 6 ];
386
+ }
387
+
388
+ {
389
+ NSTableColumn *column = [[[NSTableColumn alloc ] initWithIdentifier: @" path" ] autorelease ];
390
+ [column setEditable: NO ];
391
+ [theTableView addTableColumn: column];
392
+ [column setWidth: 95 ];
393
+ }
390
394
391
395
[theTableView setDataSource: self ];
392
396
[theTableView setDelegate: self ];
@@ -405,7 +409,8 @@ - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
405
409
406
410
- (NSString *)tableView : (NSTableView *)aTableView toolTipForCell : (id )aCell rect : (NSRectPointer )rect tableColumn : (NSTableColumn *)aTableColumn row : (NSInteger )rowIndex mouseLocation : (NSPoint )mouseLocation
407
411
{
408
- if ([[aTableColumn identifier ] isEqualToString: @" image" ]) {
412
+ NSString *identifier = [aTableColumn identifier ];
413
+ if ([identifier isEqualToString: @" image" ]) {
409
414
if (isQueryingDatabaseStructure && rowIndex == 0 ) {
410
415
return NSLocalizedString(@" fetching database structure in progress" , @" fetching database structure in progress" );
411
416
}
@@ -422,14 +427,14 @@ - (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(id)aCell rect:
422
427
}
423
428
return @" " ;
424
429
}
425
- else if ([[aTableColumn identifier ] isEqualToString: @" name" ]) {
430
+ else if ([identifier isEqualToString: @" name" ]) {
426
431
if (isQueryingDatabaseStructure && rowIndex == 0 ) {
427
432
return NSLocalizedString(@" fetching database structure in progress" , @" fetching database structure in progress" );
428
433
}
429
434
430
435
return [[filtered objectAtIndex: rowIndex] objectForKey: @" display" ];
431
436
}
432
- else if ([[aTableColumn identifier ] isEqualToString: @" list" ] || [[aTableColumn identifier ] isEqualToString: @" type" ]) {
437
+ else if ([identifier isEqualToString: @" list" ] || [identifier isEqualToString: @" type" ]) {
433
438
if (isQueryingDatabaseStructure && rowIndex == 0 ) {
434
439
return NSLocalizedString(@" fetching database structure data in progress" , @" fetching database structure data in progress" );
435
440
}
@@ -452,7 +457,7 @@ - (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(id)aCell rect:
452
457
}
453
458
}
454
459
}
455
- else if ([[aTableColumn identifier ] isEqualToString: @" path" ]) {
460
+ else if ([identifier isEqualToString: @" path" ]) {
456
461
if (isQueryingDatabaseStructure && rowIndex == 0 ) {
457
462
return NSLocalizedString(@" fetching database structure in progress" , @" fetching database structure in progress" );
458
463
}
@@ -488,32 +493,30 @@ - (NSIndexSet *)tableView:(NSTableView *)tableView selectionIndexesForProposedSe
488
493
489
494
- (id )tableView : (NSTableView *)aTableView objectValueForTableColumn : (NSTableColumn *)aTableColumn row : (NSInteger )rowIndex
490
495
{
491
- NSImage * image = nil ;
492
- NSString * imageName = nil ;
493
-
494
- if ([[aTableColumn identifier ] isEqualToString: @" image" ]) {
496
+ NSString *identifier = [aTableColumn identifier ];
497
+ if ([identifier isEqualToString: @" image" ]) {
495
498
if (!dictMode) {
496
499
if (isQueryingDatabaseStructure && rowIndex == 0 ) {
497
500
return [syncArrowImages objectAtIndex: currentSyncImage];
498
501
}
499
502
else {
500
- imageName = [[filtered objectAtIndex: rowIndex] objectForKey: @" image" ];
503
+ NSImage * image = nil ;
504
+ NSString *imageName = [[filtered objectAtIndex: rowIndex] objectForKey: @" image" ];
501
505
if (imageName) image = [NSImage imageNamed: imageName];
502
506
return image;
503
507
}
504
508
}
509
+
505
510
return @" " ;
506
511
}
507
- else if ([[aTableColumn identifier ] isEqualToString: @" name" ]) {
508
- [[aTableColumn dataCell ] setFont: [NSFont systemFontOfSize: 12 ]];
509
-
512
+ else if ([identifier isEqualToString: @" name" ]) {
510
513
if (isQueryingDatabaseStructure && rowIndex == 0 ) {
511
514
return NSLocalizedString(@" fetching database structure in progress" , @" fetching database structure in progress" );
512
515
}
513
516
514
517
return [[filtered objectAtIndex: rowIndex] objectForKey: @" display" ];
515
518
}
516
- else if ([[aTableColumn identifier ] isEqualToString: @" list" ]) {
519
+ else if ([identifier isEqualToString: @" list" ]) {
517
520
if (isQueryingDatabaseStructure && rowIndex == 0 ) {
518
521
NSPopUpButtonCell *b = [[NSPopUpButtonCell new ] autorelease ];
519
522
[b setPullsDown: NO ];
@@ -528,48 +531,47 @@ - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColu
528
531
if (dictMode) {
529
532
return @" " ;
530
533
}
534
+
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];
552
+ }
531
553
else {
532
- if ([[filtered objectAtIndex: rowIndex] objectForKey: @" list" ]) {
533
- NSPopUpButtonCell *b = [[NSPopUpButtonCell new ] autorelease ];
534
- [b setPullsDown: NO ];
535
- [b setAltersStateOfSelectedItem: NO ];
536
- [b setControlSize: NSMiniControlSize ];
537
- NSMenu *m = [[NSMenu alloc ] init ];
538
- NSMenuItem *aMenuItem = [[[NSMenuItem alloc ] initWithTitle: NSLocalizedString(@" Type Declaration:" , @" type declaration header" ) action: NULL keyEquivalent: @" " ] autorelease ];
539
- [aMenuItem setEnabled: NO ];
540
- [m addItem: aMenuItem];
541
- [m addItemWithTitle: [[filtered objectAtIndex: rowIndex] objectForKey: @" list" ] action: NULL keyEquivalent: @" " ];
542
- [b setMenu: m];
543
- [m release ];
544
- [b setPreferredEdge: NSMinXEdge];
545
- [b setArrowPosition: NSPopUpArrowAtCenter];
546
- [b setFont: [NSFont systemFontOfSize: 11 ]];
547
- [b setBordered: NO ];
548
- [aTableColumn setDataCell: b];
549
- }
550
- else {
551
- [aTableColumn setDataCell: [[NSTextFieldCell new ] autorelease ]];
552
- }
553
- return @" " ;
554
+ [aTableColumn setDataCell: [[NSTextFieldCell new ] autorelease ]];
554
555
}
556
+
557
+ return @" " ;
555
558
}
556
- else if ([[aTableColumn identifier ] isEqualToString: @" type" ]) {
559
+ else if ([identifier isEqualToString: @" type" ]) {
557
560
if (isQueryingDatabaseStructure && rowIndex == 0 ) {
558
561
return @" " ;
559
562
}
560
563
561
564
if (dictMode) {
562
565
return @" " ;
563
566
}
564
- else {
565
- NSTokenFieldCell *b = [[[NSTokenFieldCell alloc ] initTextCell: ([[filtered objectAtIndex: rowIndex] objectForKey: @" type" ]) ? [[filtered objectAtIndex: rowIndex] objectForKey: @" type" ] : @" " ] autorelease ];
566
- [b setEditable: NO ];
567
- [b setAlignment: NSRightTextAlignment ];
568
- [b setFont: [NSFont systemFontOfSize: 11 ]];
569
- return b;
570
- }
567
+
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;
571
573
}
572
- else if ([[aTableColumn identifier ] isEqualToString: @" path" ]) {
574
+ else if ([identifier isEqualToString: @" path" ]) {
573
575
if (isQueryingDatabaseStructure && rowIndex == 0 ) {
574
576
NSPopUpButtonCell *b = [[NSPopUpButtonCell new ] autorelease ];
575
577
[b setPullsDown: NO ];
@@ -584,35 +586,36 @@ - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColu
584
586
if (dictMode) {
585
587
return @" " ;
586
588
}
587
- else {
588
- if ([[filtered objectAtIndex: rowIndex] objectForKey: @" path" ]) {
589
- NSPopUpButtonCell *b = [[NSPopUpButtonCell new ] autorelease ];
590
- [b setPullsDown: NO ];
591
- [b setAltersStateOfSelectedItem: NO ];
592
- [b setControlSize: NSMiniControlSize ];
593
- NSMenu *m = [[NSMenu alloc ] init ];
594
- for (id p in [[[[[filtered objectAtIndex: rowIndex] objectForKey: @" path" ] componentsSeparatedByString: SPUniqueSchemaDelimiter] reverseObjectEnumerator ] allObjects ]) {
595
- [m addItemWithTitle: p action: NULL keyEquivalent: @" " ];
596
- }
597
- if ([m numberOfItems ]>2 ) {
598
- [m removeItemAtIndex: [m numberOfItems ]-1 ];
599
- [m removeItemAtIndex: 0 ];
600
- }
601
- [b setMenu: m];
602
- [m release ];
603
- [b setPreferredEdge: NSMinXEdge];
604
- [b setArrowPosition: ([m numberOfItems ]>1 ) ? NSPopUpArrowAtCenter : NSPopUpNoArrow];
605
- [b setFont: [NSFont systemFontOfSize: 11 ]];
606
- [b setBordered: NO ];
607
- [aTableColumn setDataCell: b];
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: @" " ];
608
598
}
609
- else {
610
- [aTableColumn setDataCell: [[NSTextFieldCell new ] autorelease ]];
599
+ if ([m numberOfItems ]>2 ) {
600
+ [m removeItemAtIndex: [m numberOfItems ]-1 ];
601
+ [m removeItemAtIndex: 0 ];
611
602
}
612
- return @" " ;
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
613
}
614
+
615
+ return @" " ;
614
616
}
615
- return [filtered objectAtIndex: rowIndex];
617
+
618
+ [NSException raise :NSInternalInconsistencyException format: @" Requesting data for invalid table column with identifier=%@ " , identifier];
616
619
}
617
620
618
621
// ======================================================================================
@@ -983,7 +986,7 @@ - (void)insertAutocompletePlaceholder
983
986
// Restore the text selection location, and clearly mark the autosuggested text
984
987
[theView setSelectedRange: NSMakeRange (currentSelectionPosition, 0 )];
985
988
NSMutableAttributedStringAddAttributeValueRange ([theView textStorage ], NSForegroundColorAttributeName , [[theView otherTextColor ] colorWithAlphaComponent: 0 .3f ], NSMakeRange (currentSelectionPosition, [toInsert length ]));
986
- NSMutableAttributedStringAddAttributeValueRange ([theView textStorage ], kSPAutoCompletePlaceholderName , kSPAutoCompletePlaceholderVal , NSMakeRange (currentSelectionPosition, [toInsert length ]));
989
+ NSMutableAttributedStringAddAttributeValueRange ([theView textStorage ], SPAutoCompletePlaceholderName, SPAutoCompletePlaceholderVal , NSMakeRange (currentSelectionPosition, [toInsert length ]));
987
990
988
991
[self checkSpaceForAllowedCharacter ];
989
992
}
@@ -1015,7 +1018,7 @@ - (void)removeAutocompletionPlaceholderUsingFastMethod:(BOOL)useFastMethod
1015
1018
if (scanPosition == currentLength) break ;
1016
1019
1017
1020
// Perform a search for the attribute, capturing the range of the [non]match
1018
- if ([[theView textStorage ] attribute: kSPAutoCompletePlaceholderName atIndex: scanPosition longestEffectiveRange: &attributeResultRange inRange: NSMakeRange (scanPosition, currentLength-scanPosition)]) {
1021
+ if ([[theView textStorage ] attribute: SPAutoCompletePlaceholderName atIndex: scanPosition longestEffectiveRange: &attributeResultRange inRange: NSMakeRange (scanPosition, currentLength-scanPosition)]) {
1019
1022
// A match was found - attributeResultRange contains the range of the attributed string
1020
1023
[theView shouldChangeTextInRange: attributeResultRange replacementString: @" " ];
1021
1024
[[theView textStorage ] deleteCharactersInRange: attributeResultRange];
@@ -1027,7 +1030,7 @@ - (void)removeAutocompletionPlaceholderUsingFastMethod:(BOOL)useFastMethod
1027
1030
1028
1031
// A match was found - retrieve the location
1029
1032
NSUInteger matchStart = NSMaxRange (attributeResultRange);
1030
- if ([[theView textStorage ] attribute: kSPAutoCompletePlaceholderName atIndex: matchStart longestEffectiveRange: &attributeResultRange inRange: NSMakeRange (matchStart, currentLength - matchStart)]) {
1033
+ if ([[theView textStorage ] attribute: SPAutoCompletePlaceholderName atIndex: matchStart longestEffectiveRange: &attributeResultRange inRange: NSMakeRange (matchStart, currentLength - matchStart)]) {
1031
1034
[theView shouldChangeTextInRange: attributeResultRange replacementString: @" " ];
1032
1035
[[theView textStorage ] deleteCharactersInRange: attributeResultRange];
1033
1036
}
0 commit comments