From ce07e58f56b64ce6eea89ecbd66fa7bb8af57519 Mon Sep 17 00:00:00 2001 From: Kent Sutherland Date: Wed, 4 Jun 2003 17:27:04 +0000 Subject: [PATCH] Moo. --- English.lproj/Preferences.nib/classes.nib | 2 +- .../Preferences.nib/keyedobjects.nib | Bin 40050 -> 40059 bytes MainController.m | 14 +++++++++- MenuController.m | 12 ++++++++- PreferencesController.h | 2 +- PreferencesController.m | 24 +++++++++--------- TODO.rtf | 10 +++++--- 7 files changed, 45 insertions(+), 19 deletions(-) diff --git a/English.lproj/Preferences.nib/classes.nib b/English.lproj/Preferences.nib/classes.nib index d273da6..2f70038 100755 --- a/English.lproj/Preferences.nib/classes.nib +++ b/English.lproj/Preferences.nib/classes.nib @@ -28,6 +28,7 @@ previousTrackButton = NSButton; ratingDecrementButton = NSButton; ratingIncrementButton = NSButton; + showPlayerButton = NSButton; songsInAdvance = NSTextField; toggleLoopButton = NSButton; toggleShuffleButton = NSButton; @@ -35,7 +36,6 @@ trackNumberCheckbox = NSButton; trackTimeCheckbox = NSButton; upcomingSongsButton = NSButton; - visualizerButton = NSButton; volumeDecrementButton = NSButton; volumeIncrementButton = NSButton; window = NSWindow; diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib index e08d86762ecf6b3a0c23bfac7ae5ca78b3f6bebf..8464e8c95a507be0871d2530bd3c2b5cdf7e5bf0 100755 GIT binary patch delta 15741 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 LKiWlqJ@Wqpv29z@ delta 15788 zcmaL71$-38`#8Kidn){5M})YLy9k##39gG4DcS-pr4%U? zik5FFF2$k6Tco&C;GIhXP21o9&3&F^=h?^Rd1jt@p1Hi)3Lb9-Gpz9EGsPkJy$$Je z2^H@!`3dhhIg*U!-6E676f%|ff=nlIGMmgHjmTWmhO{LMNmul{ge)aTljUS3Sw+^6 zwPZc0CmYB{vV~NT966VqM=l^gC6|z&kt@j0$uG#YxQzUo{Epm8ZX@#&&e0$ zEAln@j(kty6rd=IrudYAGNOzrmNKC%C`(FASyOhDJ>^I_Q4-3Pa;H3~LDXQ%lk%cu zln>=c`BOnuFcnG-r6Q>)YB==?HHwN>QL$7Ul|&^|sZ<)3No9c$Du*hd3aMhMgpyOE zsR~d}RZ>+{HC02^Qgu{4)kHN@3aX82r#h)|6r?6mlc_1xRB9SEllqieOf8|7QY)yH z)aTR})LQCG;tcgQwVwKx+DL7ozN5BM+o>JYE^0Tmhx(CH?WcaC4p7JNQPgqj1a+D^ zL!G5A^r^Z?U7~)aext5Y*Qs07AJlE?E_IK(Pd%U>QIDyo)HCV@^^$r`y+QDndQW3C zpb46!DVm}Av;l2M8_~uzOPkPUv^i}_TOqJUV2i*Wfg^3HqMgx$1c4g@4|*Uy2*D5p zUI?TJd=U5{2tW`-htQ!2!Vp9th(a(N!3YGS5X2yeLy&+ViB6$Y>2x}S&Z4vFTsn^~ zpbP0@x&*x|qes)_bR}IytH#q4=}8Et(9`KzG)K>;7w{N*A-#zHj9yBwpjXnX=(Y4$ z^w;!y`~m$9{Vlx_QE#TV(%b0m^bUG2y`TOc{S!&jKhr1Z^YlgfSNaNlmA*m$PX9sQ zrT?Vw(+}yV^mFjy;m}n-3p2)-@ zNI;N;AcaX|GMMYk4dy0ui}{`TgSm}9cbL1(J=}p&{mI;C9-xPZ%p*kbn0dlHWu75; z&b&a_o6Jkl#k@icubDT@P2NT3FXk=tj(N|=fRc~nHhh4d349cv$K2qPe2P!=F7g>f z{}4&JjXUu9d;yYqoA-*j!^fDXd;{hsk;c3y(r^d;N5wbf3;9OOUwmUE{uN(@zvQ!g zW4;OV0DT@4X?#<@8DcZ%TktLUmdLQjd@JS^U(C109gqn&$OK#TvE$qG9e5X!LSw!o z--+)`Oy|4sC45&T*^Tec_rOOn&-erQ19`7-8)WVvz6fy)<{J#*d-0`wAAyCyk{iQ} zFv1x@h#*ujR1hWz7esKo7=LR)o*-XPASe_R35o?Jf>J@5KrR?9C>K<4ruYK)h)}^z&RAf((Mw>2OYXA3rigM6A@~7;T@dVnU>^kgA@~V`pCLE|!4U|KL2v?sQxKen;4B2^A-D*^We9$Q;3@>y zA-D;_??WKC4Z&Rq{)FHG1dkwi0>Lu~UO?~)f;SMnh2T9Ta7Yl4Ah~#Wx_g!99OlB1TB(PRvFX_U2R92rlB@UD>wyc=X9#7{X7<6#)Yk3;;#SwwvkyM_IM z-Nx=4`eh-4YUVnU! zeSxjU#N=4A72+t?xgT7jTrU!nZDc!_6YHsh_zBXT~(ALS%f7c0Gzid&lG zdIztobkQ>Nv$&Ex9NpC_W$Yyd2=MtYozlHc4i2ucD z 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 diff --git a/MainController.m b/MainController.m index ea44696..16738a3 100755 --- a/MainController.m +++ b/MainController.m @@ -294,6 +294,7 @@ static MainController *sharedController; [[HotKeyCenter sharedCenter] removeHotKey:@"NextTrack"]; [[HotKeyCenter sharedCenter] removeHotKey:@"PrevTrack"]; [[HotKeyCenter sharedCenter] removeHotKey:@"TrackInfo"]; + [[HotKeyCenter sharedCenter] removeHotKey:@"ShowPlayer"]; [[HotKeyCenter sharedCenter] removeHotKey:@"UpcomingSongs"]; [[HotKeyCenter sharedCenter] removeHotKey:@"ToggleLoop"]; [[HotKeyCenter sharedCenter] removeHotKey:@"ToggleShuffle"]; @@ -323,6 +324,12 @@ static MainController *sharedController; target:self action:@selector(prevSong)]; } + if ([df objectForKey:@"ShowPlayer"] != nil) { + [[HotKeyCenter sharedCenter] addHotKey:@"ShowPlayer" + combo:[df keyComboForKey:@"ShowPlayer"] + target:self action:@selector(showPlayer)]; + } + if ([df objectForKey:@"TrackInfo"] != nil) { [[HotKeyCenter sharedCenter] addHotKey:@"TrackInfo" combo:[df keyComboForKey:@"TrackInfo"] @@ -540,7 +547,12 @@ static MainController *sharedController; [currentRemote begin]; [self setLatestSongIdentifier:@""]; [self timerUpdate]; - [NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil]; + refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:0.5 + target:self + selector:@selector(timerUpdate) + userInfo:nil + repeats:YES] retain]; + //[NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil]; [self setupHotKeys]; playerRunningState = ITMTRemotePlayerRunning; } diff --git a/MenuController.m b/MenuController.m index 94dc8c8..43a1a65 100755 --- a/MenuController.m +++ b/MenuController.m @@ -137,6 +137,13 @@ } } else if ([nextObject isEqualToString:@"Show Player"]) { tempItem = [menu addItemWithTitle:[NSString stringWithFormat:@"Show %@", [[[MainController sharedController] currentRemote] playerSimpleName]] action:@selector(performMainMenuAction:) keyEquivalent:@""]; + + if ( (keyCombo = [[HotKeyCenter sharedCenter] keyComboForName:@"ShowPlayer"]) ) { + [self setKeyEquivalentForCode:[keyCombo keyCode] + andModifiers:[keyCombo modifiers] + onItem:tempItem]; + } + [tempItem setTarget:self]; [tempItem setTag:MTMenuShowPlayerItem]; } else if ([nextObject isEqualToString:@"Preferences"]) { @@ -177,9 +184,12 @@ } if ([defaults boolForKey:@"showTrackNumber"]) { - [menu addItemWithTitle:[NSString stringWithFormat:@" Track %i", [currentRemote currentSongTrack]] + int track = [currentRemote currentSongTrack]; + if (track) { + [menu addItemWithTitle:[NSString stringWithFormat:@" Track %i", track] action:nil keyEquivalent:@""]; + } } if ([defaults boolForKey:@"showTime"]) { diff --git a/PreferencesController.h b/PreferencesController.h index effb259..53c843d 100755 --- a/PreferencesController.h +++ b/PreferencesController.h @@ -38,7 +38,7 @@ IBOutlet NSButton *trackNumberCheckbox; IBOutlet NSButton *trackTimeCheckbox; IBOutlet NSButton *upcomingSongsButton; - IBOutlet NSButton *visualizerButton; + IBOutlet NSButton *showPlayerButton; IBOutlet NSButton *volumeDecrementButton; IBOutlet NSButton *volumeIncrementButton; IBOutlet NSWindow *window; diff --git a/PreferencesController.m b/PreferencesController.m index 4f43e26..cc341e9 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -160,8 +160,8 @@ static PreferencesController *prefs = nil; [self setCurrentHotKey:@"PrevTrack"]; break; case 4035: - [self setKeyCombo:[hotKeysDictionary objectForKey:@"ToggleVisualizer"]]; - [self setCurrentHotKey:@"ToggleVisualizer"]; + [self setKeyCombo:[hotKeysDictionary objectForKey:@"ShowPlayer"]]; + [self setCurrentHotKey:@"ShowPlayer"]; break; case 4040: [self setKeyCombo:[hotKeysDictionary objectForKey:@"ToggleLoop"]]; @@ -300,8 +300,8 @@ static PreferencesController *prefs = nil; [nextTrackButton setTitle:@""]; } else if ([enumKey isEqualToString:@"PrevTrack"]) { [previousTrackButton setTitle:@""]; - } else if ([enumKey isEqualToString:@"ToggleVisualizer"]) { - [visualizerButton setTitle:@""]; + } else if ([enumKey isEqualToString:@"ShowPlayer"]) { + [showPlayerButton setTitle:@""]; } else if ([enumKey isEqualToString:@"TrackInfo"]) { [trackInfoButton setTitle:@""]; } else if ([enumKey isEqualToString:@"UpcomingSongs"]) { @@ -340,9 +340,9 @@ static PreferencesController *prefs = nil; } else if ([currentHotKey isEqualToString:@"PrevTrack"]) { [previousTrackButton setTitle:string]; [[HotKeyCenter sharedCenter] addHotKey:@"PrevTrack" combo:combo target:[MainController sharedController] action:@selector(prevSong)]; - } else if ([currentHotKey isEqualToString:@"ToggleVisualizer"]) { - [visualizerButton setTitle:string]; - //[[HotKeyCenter sharedCenter] addHotKey:@"ToggleVisualizer" combo:combo target:[MainController sharedController] selector:@selector(NULL)]; + } else if ([currentHotKey isEqualToString:@"ShowPlayer"]) { + [showPlayerButton setTitle:string]; + [[HotKeyCenter sharedCenter] addHotKey:@"ShowPlayer" combo:combo target:[MainController sharedController] action:@selector(showPlayer)]; } else if ([currentHotKey isEqualToString:@"TrackInfo"]) { [trackInfoButton setTitle:string]; [[HotKeyCenter sharedCenter] addHotKey:@"TrackInfo" combo:combo target:[MainController sharedController] action:@selector(showCurrentTrackInfo)]; @@ -523,12 +523,12 @@ static PreferencesController *prefs = nil; [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"PrevTrack"]; } - if ([df objectForKey:@"ToggleVisualizer"]) { - anItem = [df keyComboForKey:@"ToggleVisualizer"]; - [hotKeysDictionary setObject:anItem forKey:@"ToggleVisualizer"]; - [visualizerButton setTitle:[anItem userDisplayRep]]; + if ([df objectForKey:@"ShowPlayer"]) { + anItem = [df keyComboForKey:@"ShowPlayer"]; + [hotKeysDictionary setObject:anItem forKey:@"ShowPlayer"]; + [showPlayerButton setTitle:[anItem userDisplayRep]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"ToggleVisualizer"]; + [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"ShowPlayer"]; } if ([df objectForKey:@"TrackInfo"]) { diff --git a/TODO.rtf b/TODO.rtf index 194e86f..0c7bc71 100755 --- a/TODO.rtf +++ b/TODO.rtf @@ -11,16 +11,20 @@ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2\fs20 \cf0 MainController:\ +We now run on only one thread so that we don't have rebuild timing problems\ Hot keys need to work with FKeys and no modifier\ Make status windows work\ \ MenuController:\ Space key equivalent needs to show up\ +If you try to open iTunes, and then build the menu, it breaks waiting for iTunes to respond to AEs.\ \ -iTunesRemote:\ -Toggling shuffle, loop and show player don't work.\ +PreferencesController:\ +Do we want that preferences checkbox "Launch iTunes When MenuTunes Launches"? It isn't very pluginesque and I think our menu saying launch player is good enough.\ \ -I need to add toggle visualier hotkey. I think we should change it to Show Player though +iTunesRemote:\ +-showPrimaryInterface doesn't show the browser window it and unminimize it\ +Toggling shuffle and toggle loop don't work \f1\fs28 \ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural -- 2.20.1