-- (void)restoreWindowAndShowMappings:(id)sender {
- [self restoreToForeground:sender];
- [self.mappingsController mappingPressed:sender];
-}
-
-- (void)addMappingsToMenu:(NSMenu *)menu withKeys:(BOOL)withKeys atIndex:(NSInteger)index {
- static const NSUInteger MAXIMUM_ITEMS = 15;
- int added = 0;
- for (NJMapping *mapping in self.mappingsController) {
- NSString *keyEquiv = (++added < 10 && withKeys) ? @(added).stringValue : @"";
- NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:mapping.name
- action:@selector(chooseMapping:)
- keyEquivalent:keyEquiv];
- item.representedObject = mapping;
- item.state = mapping == self.mappingsController.currentMapping;
- [menu insertItem:item atIndex:index++];
- if (added == MAXIMUM_ITEMS && self.mappingsController.mappings.count > MAXIMUM_ITEMS + 1) {
- NSString *msg = [NSString stringWithFormat:@"(and %lu moreā¦)",
- self.mappingsController.mappings.count - MAXIMUM_ITEMS];
- NSMenuItem *end = [[NSMenuItem alloc] initWithTitle:msg
- action:@selector(restoreWindowAndShowMappings:)
- keyEquivalent:@""];
- // There must be a represented object here so the item gets
- // removed correctly when the menus are regenerated.
- end.representedObject = self.mappingsController.mappings;
- end.target = self;
- [menu insertItem:end atIndex:index++];
- break;
- }
- }
-}
-
-- (void)mappingListDidChange:(NSNotification *)note {
- while (mappingsMenu.lastItem.representedObject)
- [mappingsMenu removeLastItem];
- [self addMappingsToMenu:mappingsMenu withKeys:YES atIndex:mappingsMenu.numberOfItems];
- while ([statusItemMenu itemAtIndex:2].representedObject)
- [statusItemMenu removeItemAtIndex:2];
- [self addMappingsToMenu:statusItemMenu withKeys:NO atIndex:2];
-}
-