Skip to content

Instantly share code, notes, and snippets.

@nickjs
Created January 12, 2009 23:20
Show Gist options
  • Save nickjs/46232 to your computer and use it in GitHub Desktop.
Save nickjs/46232 to your computer and use it in GitHub Desktop.
/*
* 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