1#include "Controller.h"
2#include "Player.h"
3#include "Preferences.h"
4#include "TrackList.h"
5
6@implementation Controller
7
8
9void createMenu()
10{
11        NSMenu*         menu;
12        NSMenu*         info;
13        NSMenu*         services;
14        SEL             action = @selector(method:);
15
16
17        ///// Create the app menu /////
18        menu = [[NSMenu alloc] initWithTitle: @"CDPlayer"];
19
20        [menu addItemWithTitle: _(@"Info")
21                        action: action
22                 keyEquivalent: @""];
23
24        [menu addItemWithTitle: _(@"Show Track List")
25                        action: @selector(showTrackList:)
26                 keyEquivalent: @"l"];
27
28	[menu addItemWithTitle: _(@"Query CDDB")
29			action: @selector(queryCddb:)
30		 keyEquivalent: @"Q"];
31
32	[menu addItemWithTitle:_(@"Services")
33                        action: action
34                 keyEquivalent:@""];
35
36	services = AUTORELEASE([NSMenu new]);
37	[menu setSubmenu: services
38                 forItem: [menu itemWithTitle: _(@"Services")]];
39
40        [menu addItemWithTitle: _(@"Hide")
41                        action: @selector(hide:)
42                 keyEquivalent: @"h"];
43
44        [menu addItemWithTitle: _(@"Quit")
45                        action: @selector(terminate:)
46                 keyEquivalent: @"q"];
47
48
49        ///// Create the info submenu /////
50        info = [NSMenu new];
51        [menu setSubmenu: info
52                 forItem: [menu itemWithTitle: _(@"Info")]];
53
54        [info addItemWithTitle: _(@"Info Panel...")
55                        action: @selector(orderFrontStandardInfoPanel:)
56                 keyEquivalent: @""];
57
58        [info addItemWithTitle: _(@"Preferences...")
59                        action: @selector(showPrefPanel:)
60                 keyEquivalent: @""];
61
62        [info addItemWithTitle: _(@"Help")
63                        action: @selector(showMyHelp:)
64                 keyEquivalent: @"?"];
65
66
67	[NSApp setServicesMenu: services];
68        [[NSApplication sharedApplication] setMainMenu: menu];
69
70        [menu update];
71        [menu display];
72}
73
74- (void) dealloc
75{
76	RELEASE(player);
77	[super dealloc];
78}
79
80- (void)applicationWillFinishLaunching:(NSNotification *)not
81{
82	createMenu();
83}
84
85- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
86{
87	NSUserDefaults	*defaults = [NSUserDefaults standardUserDefaults];
88
89	player = [Player sharedPlayer];
90	[NSApp setServicesProvider: player];
91	[player buildInterface];
92	[TrackList sharedTrackList];
93	if ([defaults integerForKey: @"ShowTrackListOnStartup"])
94		[self showTrackList: self];
95}
96
97- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication
98{
99	return NO;
100}
101
102- (BOOL)applicationShouldTerminate:(NSApplication *)sender
103{
104	NSUserDefaults	*defaults = [NSUserDefaults standardUserDefaults];
105
106	switch ([defaults integerForKey: @"OnExit"])
107	{
108	// auto stop
109	case 1:
110		[player stop: self];
111		break;
112	// auto eject
113	case 2:
114		[player eject: self];
115		break;
116	// none
117	case 0:
118	default:
119		break;
120	}
121
122	return YES;
123}
124
125- (void) showPrefPanel: (id)sender
126{
127	[[Preferences singleInstance] showPanel: self];
128}
129
130- (void) showTrackList: (id)sender
131{
132	[[TrackList sharedTrackList] activate];
133}
134
135- (void) queryCddb: (id)sender
136{
137	[[TrackList sharedTrackList] queryCddb: sender];
138}
139
140- (void) showMyHelp: (id)sender
141{
142	NSBundle *mb = [NSBundle mainBundle];
143	NSString *file = [mb pathForResource: @"CDPlayer" ofType: @"help"];
144
145	if (file) {
146		[[NSWorkspace sharedWorkspace] openFile: file];
147		return;
148   	}
149	NSBeep();
150}
151
152- (BOOL) validateMenuItem: (NSMenuItem*)item
153{
154	BOOL ret = [[TrackList sharedTrackList] validateMenuItem: item];
155	if (!ret)
156		return ret;
157
158	return YES;
159}
160
161
162@end
163