Add some categories to better handle menus with represented objects, then use them...
[enjoyable.git] / NSMenu+RepresentedObjectAccessors.m
diff --git a/NSMenu+RepresentedObjectAccessors.m b/NSMenu+RepresentedObjectAccessors.m
new file mode 100644 (file)
index 0000000..a63f083
--- /dev/null
@@ -0,0 +1,48 @@
+//
+//  NSMenu+RepresentedObjectAccessors.m
+//  Enjoyable
+//
+//  Created by Joe Wreschnig on 3/4/13.
+//
+//
+
+#import "NSMenu+RepresentedObjectAccessors.h"
+
+@implementation NSMenu (RepresentedObjectAccessors)
+
+- (NSMenuItem *)itemWithRepresentedObject:(id)object {
+    for (NSMenuItem *item in self.itemArray)
+        if ([item.representedObject isEqual:object])
+            return item;
+    return nil;
+}
+
+- (void)removeItemWithRepresentedObject:(id)object {
+    NSInteger idx = [self indexOfItemWithRepresentedObject:object];
+    if (idx != -1)
+        [self removeItemAtIndex:idx];
+}
+
+- (NSMenuItem *)lastItem {
+    return self.itemArray.lastObject;
+}
+
+- (void)removeLastItem {
+    if (self.numberOfItems)
+        [self removeItemAtIndex:self.numberOfItems - 1];
+}
+
+@end
+
+@implementation NSPopUpButton (RepresentedObjectAccessors)
+
+- (NSMenuItem *)itemWithRepresentedObject:(id)object {
+    return [self.menu itemWithRepresentedObject:object];
+}
+
+- (void)selectItemWithRepresentedObject:(id)object {
+    [self selectItemAtIndex:[self indexOfItemWithRepresentedObject:object]];
+}
+
+
+@end