diff options
| author | SND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2012-12-20 22:42:36 +0000 |
|---|---|---|
| committer | SND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2012-12-20 22:42:36 +0000 |
| commit | ec03001040a634987b658e4b79e377ec4fd2e959 (patch) | |
| tree | d7a140be2703c4a92de736203ef02c70afb57787 | |
| parent | b35a42b0a1f8424b3e92b66bd315274ce748c2bb (diff) | |
| download | pcsxr-ec03001040a634987b658e4b79e377ec4fd2e959.tar.gz | |
Add a recent menu.
Ignoring Xcode 4 generated files.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@81905 e17a0e51-4ae3-4d35-97c3-1a29b211df97
| -rw-r--r-- | macosx/English.lproj/PCSXR.xib | 237 | ||||
| -rw-r--r-- | macosx/Pcsxr.xcodeproj/project.pbxproj | 4 | ||||
| -rw-r--r-- | macosx/PcsxrController.h | 4 | ||||
| -rw-r--r-- | macosx/PcsxrController.m | 12 | ||||
| -rw-r--r-- | macosx/RecentItemsMenu.h | 23 | ||||
| -rw-r--r-- | macosx/RecentItemsMenu.m | 103 |
6 files changed, 373 insertions, 10 deletions
diff --git a/macosx/English.lproj/PCSXR.xib b/macosx/English.lproj/PCSXR.xib index 3af0f7cb..6d563890 100644 --- a/macosx/English.lproj/PCSXR.xib +++ b/macosx/English.lproj/PCSXR.xib @@ -231,6 +231,52 @@ <reference key="NSOnImage" ref="926047672"/> <reference key="NSMixedImage" ref="645484985"/> </object> + <object class="NSMenuItem" id="435063348"> + <reference key="NSMenu" ref="164090988"/> + <string key="NSTitle">Run Recent...</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="926047672"/> + <reference key="NSMixedImage" ref="645484985"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="689397059"> + <string key="NSTitle">Run Recent...</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="989763883"> + <reference key="NSMenu" ref="689397059"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="926047672"/> + <reference key="NSMixedImage" ref="645484985"/> + <int key="NSTag">1</int> + </object> + <object class="NSMenuItem" id="861298428"> + <reference key="NSMenu" ref="689397059"/> + <string key="NSTitle">Clear recent list</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="926047672"/> + <reference key="NSMixedImage" ref="645484985"/> + <int key="NSTag">1</int> + </object> + </object> + </object> + </object> + <object class="NSMenuItem" id="160118245"> + <reference key="NSMenu" ref="164090988"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="926047672"/> + <reference key="NSMixedImage" ref="645484985"/> + </object> <object class="NSMenuItem" id="297547826"> <reference key="NSMenu" ref="164090988"/> <string key="NSTitle">Pause</string> @@ -550,6 +596,28 @@ <object class="NSCustomObject" id="113826207"> <string key="NSClassName">PcsxrController</string> </object> + <object class="NSMenuItem" id="126713148"> + <string key="NSTitle">Menu</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="926047672"/> + <reference key="NSMixedImage" ref="645484985"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="37407557"> + <string key="NSTitle">Menu</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="392373865"> + <reference key="NSMenu" ref="37407557"/> + <string key="NSTitle">Item</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="926047672"/> + <reference key="NSMixedImage" ref="645484985"/> + </object> + </object> + </object> + </object> </object> <object class="IBObjectContainer" key="IBDocument.Objects"> <object class="NSMutableArray" key="connectionRecords"> @@ -802,6 +870,30 @@ </object> <int key="connectionID">323</int> </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">recentItems</string> + <reference key="source" ref="113826207"/> + <reference key="destination" ref="689397059"/> + </object> + <int key="connectionID">364</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">pcsxr</string> + <reference key="source" ref="689397059"/> + <reference key="destination" ref="113826207"/> + </object> + <int key="connectionID">365</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">clearRecentDocuments:</string> + <reference key="source" ref="689397059"/> + <reference key="destination" ref="861298428"/> + </object> + <int key="connectionID">368</int> + </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> @@ -1000,6 +1092,8 @@ <reference ref="471681869"/> <reference ref="74319449"/> <reference ref="927940433"/> + <reference ref="160118245"/> + <reference ref="435063348"/> </object> <reference key="parent" ref="622845102"/> </object> @@ -1152,6 +1246,9 @@ <object class="IBObjectRecord"> <int key="objectID">308</int> <reference key="object" ref="74319449"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> <reference key="parent" ref="164090988"/> </object> <object class="IBObjectRecord"> @@ -1204,6 +1301,63 @@ <reference key="object" ref="781033990"/> <reference key="parent" ref="8470546"/> </object> + <object class="IBObjectRecord"> + <int key="objectID">324</int> + <reference key="object" ref="160118245"/> + <reference key="parent" ref="164090988"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">329</int> + <reference key="object" ref="435063348"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="689397059"/> + </object> + <reference key="parent" ref="164090988"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">330</int> + <reference key="object" ref="689397059"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="861298428"/> + <reference ref="989763883"/> + </object> + <reference key="parent" ref="435063348"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">366</int> + <reference key="object" ref="861298428"/> + <reference key="parent" ref="689397059"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">367</int> + <reference key="object" ref="989763883"/> + <reference key="parent" ref="689397059"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">369</int> + <reference key="object" ref="126713148"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="37407557"/> + </object> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">370</int> + <reference key="object" ref="37407557"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="392373865"/> + </object> + <reference key="parent" ref="126713148"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">371</int> + <reference key="object" ref="392373865"/> + <reference key="parent" ref="37407557"/> + </object> </object> </object> <object class="NSMutableDictionary" key="flattenedProperties"> @@ -1261,6 +1415,15 @@ <string>318.IBPluginDependency</string> <string>320.IBPluginDependency</string> <string>322.IBPluginDependency</string> + <string>324.IBPluginDependency</string> + <string>329.IBPluginDependency</string> + <string>330.CustomClassName</string> + <string>330.IBPluginDependency</string> + <string>366.IBPluginDependency</string> + <string>367.IBPluginDependency</string> + <string>369.IBPluginDependency</string> + <string>370.IBPluginDependency</string> + <string>371.IBPluginDependency</string> <string>5.IBPluginDependency</string> <string>56.IBPluginDependency</string> <string>57.IBPluginDependency</string> @@ -1324,6 +1487,15 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>RecentItemsMenu</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> @@ -1343,7 +1515,7 @@ <reference key="dict.values" ref="0"/> </object> <nil key="sourceID"/> - <int key="maxID">323</int> + <int key="maxID">371</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -1447,19 +1619,70 @@ </object> </object> <object class="NSMutableDictionary" key="outlets"> - <string key="NS.key.0">preferenceWindow</string> - <string key="NS.object.0">NSWindow</string> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>preferenceWindow</string> + <string>recentItems</string> + </object> + <object class="NSArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSWindow</string> + <string>RecentItemsMenu</string> + </object> + </object> + <object class="NSMutableDictionary" key="toOneOutletInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>preferenceWindow</string> + <string>recentItems</string> + </object> + <object class="NSArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBToOneOutletInfo"> + <string key="name">preferenceWindow</string> + <string key="candidateClassName">NSWindow</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">recentItems</string> + <string key="candidateClassName">RecentItemsMenu</string> + </object> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">./Classes/PcsxrController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">RecentItemsMenu</string> + <string key="superclassName">NSMenu</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">clearRecentDocuments:</string> + <string key="NS.object.0">id</string> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <string key="NS.key.0">clearRecentDocuments:</string> + <object class="IBActionInfo" key="NS.object.0"> + <string key="name">clearRecentDocuments:</string> + <string key="candidateClassName">id</string> + </object> + </object> + <object class="NSMutableDictionary" key="outlets"> + <string key="NS.key.0">pcsxr</string> + <string key="NS.object.0">PcsxrController</string> </object> <object class="NSMutableDictionary" key="toOneOutletInfosByName"> - <string key="NS.key.0">preferenceWindow</string> + <string key="NS.key.0">pcsxr</string> <object class="IBToOneOutletInfo" key="NS.object.0"> - <string key="name">preferenceWindow</string> - <string key="candidateClassName">NSWindow</string> + <string key="name">pcsxr</string> + <string key="candidateClassName">PcsxrController</string> </object> </object> <object class="IBClassDescriptionSource" key="sourceIdentifier"> <string key="majorKey">IBProjectSource</string> - <string key="minorKey">./Classes/PcsxrController.h</string> + <string key="minorKey">./Classes/RecentItemsMenu.h</string> </object> </object> </object> diff --git a/macosx/Pcsxr.xcodeproj/project.pbxproj b/macosx/Pcsxr.xcodeproj/project.pbxproj index 55ed00f1..0218a19a 100644 --- a/macosx/Pcsxr.xcodeproj/project.pbxproj +++ b/macosx/Pcsxr.xcodeproj/project.pbxproj @@ -260,6 +260,8 @@ 2BBB1792051E113B00B84448 /* EmuThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = EmuThread.m; sourceTree = "<group>"; }; 2BBB17DA051E4D0F00B84448 /* Plugin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Plugin.c; sourceTree = SOURCE_ROOT; }; 2BC4786204C7FD3600CAB520 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; + 5550D2711683C923006C56B5 /* RecentItemsMenu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RecentItemsMenu.h; sourceTree = "<group>"; }; + 5550D2721683C923006C56B5 /* RecentItemsMenu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RecentItemsMenu.m; sourceTree = "<group>"; }; 559366C012B694DF004ACC1E /* iGte.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iGte.h; sourceTree = "<group>"; }; 559366C112B694DF004ACC1E /* iR3000A-64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "iR3000A-64.c"; sourceTree = "<group>"; }; 559366C212B694DF004ACC1E /* ix86-64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "ix86-64.c"; sourceTree = "<group>"; }; @@ -488,6 +490,8 @@ 0280B7AC16764CC3007B8001 /* HotkeyController.m */, 02717967167884C9004AED62 /* hotkeys.m */, 02717969167884DF004AED62 /* hotkeys.h */, + 5550D2711683C923006C56B5 /* RecentItemsMenu.h */, + 5550D2721683C923006C56B5 /* RecentItemsMenu.m */, ); name = MacOSX; sourceTree = "<group>"; diff --git a/macosx/PcsxrController.h b/macosx/PcsxrController.h index b89587c0..10ae42c0 100644 --- a/macosx/PcsxrController.h +++ b/macosx/PcsxrController.h @@ -3,8 +3,10 @@ #import <Cocoa/Cocoa.h> #import "EmuThread.h" #import "PluginList.h" +#import "RecentItemsMenu.h" @class ConfigurationController; +@class RecentItemsMenu; @interface PcsxrController : NSObject <NSApplicationDelegate> { @@ -12,6 +14,7 @@ PluginList *pluginList; IBOutlet NSWindow *preferenceWindow; + IBOutlet RecentItemsMenu *recentItems; BOOL sleepInBackground; BOOL wasPausedBeforeBGSwitch; @@ -27,6 +30,7 @@ - (IBAction)defrost:(id)sender; - (IBAction)fullscreen:(id)sender; - (IBAction)pauseInBackground:(id)sender; +- (void)runURL:(NSURL*)url; + (void)setConfigFromDefaults; + (void)setDefaultFromConfig:(NSString *)defaultKey; diff --git a/macosx/PcsxrController.m b/macosx/PcsxrController.m index f23d7dfd..da5de3d3 100644 --- a/macosx/PcsxrController.m +++ b/macosx/PcsxrController.m @@ -195,9 +195,9 @@ static NSString *HandleBinCue(NSString *toHandle) [openDlg setAllowedFileTypes:[PcsxrDiscHandler supportedUTIs]]; if ([openDlg runModal] == NSFileHandlingPanelOKButton) { - NSArray* urls = [openDlg URLs]; - SetIsoFile((const char *)[HandleBinCue([[urls objectAtIndex:0] path]) fileSystemRepresentation]); - [EmuThread run]; + NSURL *url = [[openDlg URLs] objectAtIndex:0]; + [recentItems addRecentItem:url]; + [self runURL:url]; } [openDlg release]; } @@ -208,6 +208,12 @@ static NSString *HandleBinCue(NSString *toHandle) [EmuThread runBios]; } +- (void)runURL:(NSURL*)url +{ + SetIsoFile((const char *)[HandleBinCue([url path]) fileSystemRepresentation]); + [EmuThread run]; +} + - (IBAction)freeze:(id)sender { NSInteger num = [sender tag]; diff --git a/macosx/RecentItemsMenu.h b/macosx/RecentItemsMenu.h new file mode 100644 index 00000000..21c518c8 --- /dev/null +++ b/macosx/RecentItemsMenu.h @@ -0,0 +1,23 @@ +// +// RecentItemsMenu.h +// Pcsxr +// +// Created by Nicolas Pepin-Perreault on 12-12-16. +// +// + +#import <Cocoa/Cocoa.h> +#import "PcsxrController.h" + +@class PcsxrController; +@interface RecentItemsMenu : NSMenu { + IBOutlet PcsxrController *pcsxr; +} + +- (IBAction)clearRecentDocuments:(id)sender; +- (void)addRecentItem:(NSURL*)documentURL; +- (NSMenuItem*)createMenuItem:(NSURL*)documentURL; +- (void)openRecentItem:(NSMenuItem*)sender; +- (void)addMenuItem:(NSMenuItem*)item; + +@end diff --git a/macosx/RecentItemsMenu.m b/macosx/RecentItemsMenu.m new file mode 100644 index 00000000..aaf3f01b --- /dev/null +++ b/macosx/RecentItemsMenu.m @@ -0,0 +1,103 @@ +// +// RecentItemsMenu.m +// Pcsxr +// +// Created by Nicolas Pepin-Perreault on 12-12-16. +// +// + +#import "RecentItemsMenu.h" + +@implementation RecentItemsMenu + +// Initialization +- (void)awakeFromNib +{ + [self setAutoenablesItems:YES]; + + // Populate the menu + NSArray* recentDocuments = [[NSDocumentController sharedDocumentController] recentDocumentURLs]; + NSInteger index = 0; + for(NSURL* url in recentDocuments) { + [self addMenuItem:[self createMenuItem:url] atIndex:index]; + index++; + } +} + +- (void)addRecentItem:(NSURL*)documentURL +{ + [[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:documentURL]; + + NSMenuItem* item = [self findMenuItemByURL:documentURL]; + if(item != nil) { + [self removeItem:item]; + [self insertItem:item atIndex:0]; + } + else { + [self addMenuItem:[self createMenuItem:documentURL]]; + } +} + +- (void)addMenuItem:(NSMenuItem*)item +{ + [self addMenuItem:item atIndex:0]; + + // Prevent menu from overflowing; the -2 accounts for the "Clear..." and the separator items + NSInteger maxNumItems = [[NSDocumentController sharedDocumentController] maximumRecentDocumentCount]; + if(([self numberOfItems]-2) > maxNumItems) { + [self removeItemAtIndex:maxNumItems]; + } +} + +- (NSMenuItem*)findMenuItemByURL:(NSURL*)url +{ + for(NSMenuItem* item in [self itemArray]) { + if([[item representedObject] isEqual:url]) { + return item; + } + } + + return nil; +} + +- (void)addMenuItem:(NSMenuItem*)item atIndex:(NSInteger)index +{ + [self insertItem:item atIndex:index]; // insert at the top + [item release]; +} + +- (NSMenuItem*)createMenuItem:(NSURL*)documentURL +{ + NSMenuItem *newItem = [[NSMenuItem alloc] initWithTitle:[documentURL relativePath] action:@selector(openRecentItem:) keyEquivalent:@""]; + [newItem setRepresentedObject:documentURL]; + [newItem setEnabled:YES]; + [newItem setTarget:self]; + [newItem setTag:0]; + + return newItem; +} + +- (void)openRecentItem:(NSMenuItem*)sender +{ + NSURL* url = [sender representedObject]; + [self addRecentItem:url]; + [pcsxr runURL:url]; +} + +- (IBAction)clearRecentDocuments:(id)sender +{ + [self removeDocumentItems]; + [[NSDocumentController sharedDocumentController] clearRecentDocuments:sender]; +} + +// Document items are menu items with tag 0 +- (void)removeDocumentItems +{ + for(NSMenuItem* item in [self itemArray]) { + if([item tag] == 0) { + [self removeItem:item]; + } + } +} + +@end |
