Adding API to ITStatusItem for callbacks to get dynamic menus.
authorJoseph Spiros <joseph.spiros@ithinksw.com>
Wed, 9 Nov 2005 21:20:26 +0000 (21:20 +0000)
committerJoseph Spiros <joseph.spiros@ithinksw.com>
Wed, 9 Nov 2005 21:20:26 +0000 (21:20 +0000)
ITStatusItem.h
ITStatusItem.m

index f2f6070..7085c78 100644 (file)
 
 #import <Cocoa/Cocoa.h>
 
-@interface ITStatusItem : NSStatusItem {
+@class ITStatusItem;
+
+@protocol ITStatusItemMenuProvider
+- (NSMenu *)menuForStatusItem:(ITStatusItem *)statusItem;
+@end
 
+@interface ITStatusItem : NSStatusItem {
+       id <ITStatusItemMenuProvider> _menuProvider;
 }
 
 - (id)initWithStatusBar:(NSStatusBar *)statusBar withLength:(float)length;
@@ -23,4 +29,7 @@
 - (NSImage *)alternateImage;
 - (void)setAlternateImage:(NSImage *)image;
 
+- (id <ITStatusItemMenuProvider>)menuProvider;
+- (void)setMenuProvider:(id <ITStatusItemMenuProvider>)provider;
+
 @end
\ No newline at end of file
index ea31d3a..561ecf2 100644 (file)
@@ -51,4 +51,21 @@ static BOOL _ITStatusItemShouldKillShadow = NO;
        [(NSButton *)[self _button] setAlternateImage:image];
 }
 
+- (id <ITStatusItemMenuProvider>)menuProvider {
+       return _menuProvider;
+}
+
+- (void)setMenuProvider:(id <ITStatusItemMenuProvider>)provider {
+       [_menuProvider autorelease];
+       _menuProvider = [provider retain];
+}
+
+- (NSMenu *)menu {
+       if (_menuProvider) {
+               return [_menuProvider menuForStatusItem:self];
+       } else {
+               return [super menu];
+       }
+}
+
 @end
\ No newline at end of file