IJItemPickerWindowController.m 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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;
  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. [completionBlock autorelease];
  34. completionBlock = [theBlock copy];
  35. NSUInteger row = [filteredItemIds indexOfObject:[NSNumber numberWithShort:initialItemId]];
  36. if (row != NSNotFound)
  37. {
  38. [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
  39. [tableView scrollRowToVisible:row];
  40. }
  41. }
  42. - (IBAction)updateFilter:(id)sender
  43. {
  44. NSString *filterString = [sender stringValue];
  45. if (filterString.length == 0)
  46. {
  47. [filteredItemIds autorelease];
  48. filteredItemIds = [allItemIds retain];
  49. [tableView reloadData];
  50. return;
  51. }
  52. NSMutableArray *results = [NSMutableArray array];
  53. for (NSNumber *itemId in allItemIds)
  54. {
  55. NSString *name = [[IJInventoryItem itemIdLookup] objectForKey:itemId];
  56. NSRange range = [name rangeOfString:filterString options:NSCaseInsensitiveSearch];
  57. if (range.location != NSNotFound)
  58. [results addObject:itemId];
  59. }
  60. [filteredItemIds autorelease];
  61. filteredItemIds = [results retain];
  62. [tableView reloadData];
  63. }
  64. - (IBAction)itemActivated:(id)sender
  65. {
  66. NSUInteger row = [tableView selectedRow];
  67. uint16_t itemId = [[filteredItemIds objectAtIndex:row] shortValue];
  68. [[self window] orderOut:nil];
  69. completionBlock(itemId);
  70. }
  71. #pragma mark -
  72. #pragma mark NSTableViewDataSource
  73. - (NSInteger)numberOfRowsInTableView:(NSTableView *)theTableView
  74. {
  75. return filteredItemIds.count;
  76. }
  77. - (id)tableView:(NSTableView *)theTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
  78. {
  79. // TODO: Change this, because the row will not correspond once we support sorting.
  80. NSNumber *itemId = [filteredItemIds objectAtIndex:row];
  81. if ([tableColumn.identifier isEqual:@"itemId"])
  82. return [itemId stringValue];
  83. NSString *name = [[IJInventoryItem itemIdLookup] objectForKey:itemId];
  84. return name;
  85. }
  86. - (void)windowDidResignKey:(NSNotification *)notification
  87. {
  88. [[self window] orderOut:nil];
  89. }
  90. @end