Made MenuController communicate with MainController
[MenuTunes.git] / MenuController.m
1 //
2 //  MenuController.m
3 //  MenuTunes
4 //
5 //  Created by Joseph Spiros on Wed Apr 30 2003.
6 //  Copyright (c) 2003 iThink Software. All rights reserved.
7 //
8
9 #import "MenuController.h"
10 #import "MainController.h"
11
12 @implementation MenuController
13
14 - (id)init
15 {
16     if ( (self = [super init]) ) {
17         _menuLayout = [[NSMutableArray alloc] initWithCapacity:
18     }
19     return self;
20 }
21
22 - (NSMenu *)menu
23 {
24     // dynamically create menu from supplied data and layout information.
25     // ...
26     // right before returning the menu, set the created menu to instance variable _currentMenu.
27 }
28
29 - (void)performMainMenuAction:(id)sender
30 {
31     switch ( [sender tag] )
32     {
33         case MTMenuPlayPauseItem:
34             NSLog(@"MenuController: Play/Pause");
35             [[MainController sharedController] playPause];
36             //We're gonna have to change the Play menu item to Pause here too.
37             break;
38         case MTMenuFastForwardItem:
39             NSLog(@"MenuController: Fast Forward");
40             [[MainController sharedController] fastForward];
41             //make sure play/pause item says sane through this
42             break;
43         case MTMenuRewindItem:
44             NSLog(@"MenuController: Rewind");
45             [[MainController sharedController] rewind];
46             //make sure play/pause item says sane through this
47             break;
48         case MTMenuPreviousTrackItem:
49             NSLog(@"MenuController: Previous Track");
50             [[MainController sharedController] prevSong];
51             break;
52         case MTMenuNextTrackItem:
53             NSLog(@"MenuController: Next Track");
54             [[MainController sharedController] nextSong];
55             break;
56         case MTMenuPreferencesItem:
57             NSLog(@"MenuController: Preferences...");
58             [[MainController sharedController] showPreferences];
59             break;
60         case MTMenuQuitItem:
61             NSLog(@"MenuController: Quit");
62             [[MainController sharedController] quitMenuTunes];
63             break;
64         default:
65             NSLog(@"MenuController: Unimplemented Menu Item OR Child-bearing Menu Item");
66             break;
67     }
68 }
69
70 - (void)performRatingMenuAction:(id)sender
71 {
72     [[MainController sharedController] selectSongRating:[sender tag]];
73 }
74
75 - (void)performPlaylistMenuAction:(id)sender
76 {
77     [[MainController sharedController] selectPlaylistAtIndex:[sender tag]];
78 }
79
80 - (void)performEqualizerMenuAction:(id)sender
81 {
82     [[MainController sharedController] selectEQItemAtIndex:[sender tag]]
83 }
84
85 - (void)performUpcomingSongsMenuAction:(id)sender
86 {
87     [[MainController sharedController] selectSongAtIndex:[sender tag]]
88 }
89
90 - (void)updateMenu
91 {
92     
93     [_currentMenu update];
94 }
95
96 - (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem
97 {
98 }
99
100 - (NSString *)systemUIColor
101 {
102     NSDictionary *tmpDict;
103     NSNumber *tmpNumber;
104     if ( (tmpDict = [NSDictionary dictionaryWithContentsOfFile:[@"~/Library/Preferences/.GlobalPreferences.plist" stringByExpandingTildeInPath]]) ) {
105         if ( (tmpNumber = [tmpDict objectForKey:@"AppleAquaColorVariant"]) ) {
106             if ( ([tmpNumber intValue == 1) ) {
107                 return @"Aqua";
108             } else {
109                 return @"Graphite";
110             }
111         } else {
112             return @"Aqua";
113         }
114     } else {
115         return @"Aqua";
116     }
117 }
118
119 - (void)setKeyEquivalentForCode:(short)code andModifiers:(long)modifiers
120         onItem:(NSMenuItem *)item
121 {
122     unichar charcode = 'a';
123     int i;
124     long cocoaModifiers = 0;
125     static long carbonToCocoa[6][2] = 
126     {
127         { cmdKey, NSCommandKeyMask },
128         { optionKey, NSAlternateKeyMask },
129         { controlKey, NSControlKeyMask },
130         { shiftKey, NSShiftKeyMask },
131     };
132     
133     for (i = 0; i < 6; i++) {
134         if (modifiers & carbonToCocoa[i][0]) {
135             cocoaModifiers += carbonToCocoa[i][1];
136         }
137     }
138     [item setKeyEquivalentModifierMask:cocoaModifiers];
139     
140     //Missing key combos for some keys. Must find them later.
141     switch (code)
142     {
143         case 36:
144             charcode = '\r';
145         break;
146         
147         case 48:
148             charcode = '\t';
149         break;
150         
151         //Space -- ARGH!
152         case 49:
153         {
154             // Haven't tested this, though it should work.
155             unichar buffer;
156             [[NSString stringWithString:@"Space"] getCharacters:&buffer];
157             charcode = buffer;
158             /*MenuRef menuRef = _NSGetCarbonMenu([item menu]);
159             NSLog(@"%@", menuRef);
160             SetMenuItemCommandKey(menuRef, 0, NO, 49);
161             SetMenuItemModifiers(menuRef, 0, kMenuNoCommandModifier);
162             SetMenuItemKeyGlyph(menuRef, 0, kMenuBlankGlyph);
163             charcode = 'b';*/
164             
165         }
166         break;
167         
168         case 51:
169             charcode = NSDeleteFunctionKey;
170         break;
171         
172         case 53:
173             charcode = '\e';
174         break;
175         
176         case 71:
177             charcode = '\e';
178         break;
179         
180         case 76:
181             charcode = '\r';
182         break;
183         
184         case 96:
185             charcode = NSF5FunctionKey;
186         break;
187         
188         case 97:
189             charcode = NSF6FunctionKey;
190         break;
191         
192         case 98:
193             charcode = NSF7FunctionKey;
194         break;
195         
196         case 99:
197             charcode = NSF3FunctionKey;
198         break;
199         
200         case 100:
201             charcode = NSF8FunctionKey;
202         break;
203         
204         case 101:
205             charcode = NSF9FunctionKey;
206         break;
207         
208         case 103:
209             charcode = NSF11FunctionKey;
210         break;
211         
212         case 105:
213             charcode = NSF3FunctionKey;
214         break;
215         
216         case 107:
217             charcode = NSF14FunctionKey;
218         break;
219         
220         case 109:
221             charcode = NSF10FunctionKey;
222         break;
223         
224         case 111:
225             charcode = NSF12FunctionKey;
226         break;
227         
228         case 113:
229             charcode = NSF13FunctionKey;
230         break;
231         
232         case 114:
233             charcode = NSInsertFunctionKey;
234         break;
235         
236         case 115:
237             charcode = NSHomeFunctionKey;
238         break;
239         
240         case 116:
241             charcode = NSPageUpFunctionKey;
242         break;
243         
244         case 117:
245             charcode = NSDeleteFunctionKey;
246         break;
247         
248         case 118:
249             charcode = NSF4FunctionKey;
250         break;
251         
252         case 119:
253             charcode = NSEndFunctionKey;
254         break;
255         
256         case 120:
257             charcode = NSF2FunctionKey;
258         break;
259         
260         case 121:
261             charcode = NSPageDownFunctionKey;
262         break;
263         
264         case 122:
265             charcode = NSF1FunctionKey;
266         break;
267         
268         case 123:
269             charcode = NSLeftArrowFunctionKey;
270         break;
271         
272         case 124:
273             charcode = NSRightArrowFunctionKey;
274         break;
275         
276         case 125:
277             charcode = NSDownArrowFunctionKey;
278         break;
279         
280         case 126:
281             charcode = NSUpArrowFunctionKey;
282         break;
283     }
284     
285     if (charcode == 'a') {
286         unsigned long state;
287         long keyTrans;
288         char charCode;
289         Ptr kchr;
290         state = 0;
291         kchr = (Ptr) GetScriptVariable(smCurrentScript, smKCHRCache);
292         keyTrans = KeyTranslate(kchr, code, &state);
293         charCode = keyTrans;
294         [item setKeyEquivalent:[NSString stringWithCString:&charCode length:1]];
295     } else if (charcode != 'b') {
296         [item setKeyEquivalent:[NSString stringWithCharacters:&charcode length:1]];
297     }
298 }
299
300 @end