IJItemPickerWindowController.m 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // IJItemPickerWindowController.m
  3. // InsideJob
  4. //
  5. // Created by Adam Preble on 10/7/10.
  6. // Copyright 2010 Adam Preble. All rights reserved.
  7. //
  8. #import "IJItemPickerWindowController.h"
  9. #import "IJInventoryItem.h"
  10. @implementation IJItemPickerWindowController
  11. @synthesize tableView, searchField;
  12. + (IJItemPickerWindowController *)sharedController
  13. {
  14. static IJItemPickerWindowController *globalSharedController = nil;
  15. if (!globalSharedController)
  16. {
  17. globalSharedController = [[IJItemPickerWindowController alloc] initWithWindowNibName:@"ItemPicker"];
  18. }
  19. return globalSharedController;
  20. }
  21. - (void)awakeFromNib
  22. {
  23. [tableView setTarget:self];
  24. [tableView setDoubleAction:@selector(itemActivated:)];
  25. NSArray *keys = [[IJInventoryItem itemIdLookup] allKeys];
  26. keys = [keys sortedArrayUsingSelector:@selector(compare:)];
  27. allItemIds = [[NSArray alloc] initWithArray:keys];
  28. filteredItemIds = [allItemIds retain];
  29. }
  30. - (void)showPickerWithInitialItemId:(uint16_t)initialItemId completionBlock:(void(^)(uint16_t itemId))theBlock
  31. {
  32. [self showWindow:nil];
  33. [searchField becomeFirstResponder];
  34. [completionBlock autorelease];
  35. completionBlock = [theBlock copy];
  36. NSUInteger row = [filteredItemIds indexOfObject:[NSNumber numberWithShort:initialItemId]];
  37. if (row != NSNotFound)
  38. {
  39. [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
  40. [tableView scrollRowToVisible:row];
  41. }
  42. }
  43. - (IBAction)updateFilter:(id)sender
  44. {
  45. NSString *filterString = [sender stringValue];
  46. if (filterString.length == 0)
  47. {
  48. [filteredItemIds autorelease];
  49. filteredItemIds = [allItemIds retain];
  50. [tableView reloadData];
  51. return;
  52. }
  53. NSMutableArray *results = [NSMutableArray array];
  54. for (NSNumber *itemId in allItemIds)
  55. {
  56. NSString *name = [[IJInventoryItem itemIdLookup] objectForKey:itemId];
  57. NSRange range = [name rangeOfString:filterString options:NSCaseInsensitiveSearch];
  58. if (range.location != NSNotFound)
  59. [results addObject:itemId];
  60. }
  61. [filteredItemIds autorelease];
  62. filteredItemIds = [results retain];
  63. [tableView reloadData];
  64. }
  65. - (IBAction)itemActivated:(id)sender
  66. {
  67. NSUInteger row = [tableView selectedRow];
  68. uint16_t itemId = [[filteredItemIds objectAtIndex:row] shortValue];
  69. [[self window] orderOut:nil];
  70. completionBlock(itemId);
  71. }
  72. #pragma mark -
  73. #pragma mark NSTableViewDataSource
  74. - (NSInteger)numberOfRowsInTableView:(NSTableView *)theTableView
  75. {
  76. return filteredItemIds.count;
  77. }
  78. - (id)tableView:(NSTableView *)theTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
  79. {
  80. // TODO: Change this, because the row will not correspond once we support sorting.
  81. NSNumber *itemId = [filteredItemIds objectAtIndex:row];
  82. if ([tableColumn.identifier isEqual:@"itemId"])
  83. return [itemId stringValue];
  84. NSString *name = [[IJInventoryItem itemIdLookup] objectForKey:itemId];
  85. return name;
  86. }
  87. - (void)windowDidResignKey:(NSNotification *)notification
  88. {
  89. [[self window] orderOut:nil];
  90. }
  91. @end