Created
January 12, 2009 23:20
-
-
Save nickjs/46232 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* LAMenu.j | |
* LayoutKit | |
* | |
* Created by Nicholas Small. | |
* Copyright 2008, Nicholas Small. | |
*/ | |
@import <Foundation/CPObject.j> | |
@import <AppKit/CPMenu.j> | |
SharedMenu = nil; | |
@implementation LAMenu : CPObject | |
{ | |
CPMenu _menu; | |
CPArray _loggedInItems; | |
CPMenuItem _sessionMenuItem; | |
CPMenu _sessionMenu; | |
} | |
+ (id)sharedMenu | |
{ | |
if(!SharedMenu) | |
SharedMenu = [[LAMenu alloc] _initDefaultMenu]; | |
return SharedMenu; | |
} | |
- (id)_initDefaultMenu | |
{ | |
self = [super init]; | |
if(self) | |
{ | |
if(![CPMenu menuBarVisible]) | |
{ | |
// Show Main Menu | |
[CPMenu setMenuBarVisible:YES]; | |
_menu = [CPApp mainMenu]; | |
// Remove Default Items | |
for(var i=[_menu numberOfItems]-1;i > 0; i--) | |
[_menu removeItemAtIndex:0]; | |
_loggedInItems = [CPArray array]; | |
// Add Menus | |
[self addTitleMenu]; | |
//[self addPeopleMenu]; | |
//[self addProfilesMenu]; | |
[self addSessionMenu]; | |
[self updateMenuItemsForSession]; | |
} | |
} | |
return self; | |
} | |
- (void)addTitleMenu | |
{ | |
var bundle = [CPBundle bundleForClass:[self class]], | |
_parent = [[CPMenu alloc] initWithTitle:@"TitleMenu"], | |
_item = [[CPMenuItem alloc] init]; | |
[_item setTitle:Strings.title]; | |
[_item setEnabled:YES]; | |
[_item setImage:[CPImage imageWithContentsOfFile:[bundle pathForResource:@"MenuBar/Earth.png"] size:CGSizeMake(24.0, 24.0)]]; | |
[_item setSubmenu:_parent]; | |
var aboutMenuItem = [[CPMenuItem alloc] initWithTitle:Strings.aboutMenuItem action:@selector(openBlog:) keyEquivalent:nil], | |
tourMenuItem = [[CPMenuItem alloc] initWithTitle:Strings.tourMenuItem action:@selector(openTour:) keyEquivalent:nil], | |
feedbackMenuItem = [[CPMenuItem alloc] initWithTitle:Strings.feedbackMenuItem action:@selector(openFeedback:) keyEquivalent:nil], | |
siteMenuItem = [[CPMenuItem alloc] initWithTitle:Strings.preferencesMenuItem action:@selector(openPreferences:) keyEquivalent:nil], | |
languageMenuItem = [[CPMenuItem alloc] initWithTitle:Strings.languageMenuItem action:@selector(openLanguage:) keyEquivalent:nil], | |
legalMenuItem = [[CPMenuItem alloc] initWithTitle:Strings.legalMenuItem action:@selector(openLegal:) keyEquivalent:nil], | |
adsMenuItem = [[CPMenuItem alloc] initWithTitle:Strings.advertisersMenuItem action:@selector(openAdvertisers:) keyEquivalent:nil], | |
devsMenuItem = [[CPMenuItem alloc] initWithTitle:Strings.developersMenuItem action:@selector(openDevelopers:) keyEquivalent:nil]; | |
[_parent addItem:aboutMenuItem]; | |
[_parent addItem:tourMenuItem]; | |
[_parent addItem:feedbackMenuItem]; | |
[_parent addItem:[CPMenuItem separatorItem]]; | |
[_parent addItem:devsMenuItem]; | |
[_parent addItem:adsMenuItem]; | |
[_parent addItem:legalMenuItem]; | |
[_parent addItem:[CPMenuItem separatorItem]]; | |
[_parent addItem:siteMenuItem]; | |
[_parent addItem:languageMenuItem]; | |
[_menu insertItem:_item atIndex:0]; | |
} | |
- (void)addSessionMenu | |
{ | |
var bundle = [CPBundle bundleForClass:[self class]]; | |
_sessionMenuItem = [[CPMenuItem alloc] initWithTitle:Strings.loginMenuItem action:@selector(showLoginPanel:) keyEquivalent:nil]; | |
[_sessionMenuItem setEnabled:YES]; | |
[_sessionMenuItem setImage:[CPImage imageWithContentsOfFile:[bundle pathForResource:@"MenuBar/User.png"] size:CGSizeMake(22,22)]]; | |
[_sessionMenuItem setAlternateImage:[CPImage imageWithContentsOfFile:[bundle pathForResource:@"MenuBar/UserHighlighted.png"] size:CGSizeMake(22,22)]]; | |
[_sessionMenuItem setTarget:[LASessionPanel sharedSessionPanel]]; | |
_sessionMenu = [[CPMenu alloc] initWithTitle:@"SessionMenu"]; | |
var logoutItem = [_sessionMenu addItemWithTitle:Strings.logoutMenuItem action:@selector(logout:) keyEquivalent:nil]; | |
var defaultCenter = [CPNotificationCenter defaultCenter]; | |
[defaultCenter addObserver:self selector:@selector(updateMenuItemsForSession) name:CPUserSessionManagerStatusDidChangeNotification object:[CPUserSessionManager defaultManager]]; | |
[defaultCenter addObserver:self selector:@selector(updateMenuItemsForSession) name:CPUserSessionManagerUserIdentifierDidChangeNotification object:[CPUserSessionManager defaultManager]]; | |
[_menu addItem:_sessionMenuItem]; | |
} | |
- (void)updateMenuItemsForSession | |
{ | |
var manager = [CPUserSessionManager defaultManager], | |
status = [manager status]; | |
if (status == CPUserSessionLoggedInStatus) | |
{ | |
var userIdentifier = [manager userIdentifier]; | |
[_sessionMenuItem setAction:nil]; | |
[_sessionMenuItem setSubmenu:_sessionMenu]; | |
[_sessionMenuItem setTitle:@""+userIdentifier]; | |
for(var i = 0; i < _loggedInItems.length; i++) | |
[_loggedInItems[i] setHidden:NO]; | |
} | |
else | |
{ | |
[_sessionMenuItem setAction:@selector(showLoginPanel:)]; | |
[_sessionMenuItem setTitle:Strings.loginMenuItem]; | |
[_sessionMenuItem setSubmenu:nil]; | |
for(var i = 0; i < _loggedInItems.length; i++) | |
[_loggedInItems[i] setHidden:YES]; | |
} | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment