summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2012-12-20 22:42:36 +0000
committerSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2012-12-20 22:42:36 +0000
commitec03001040a634987b658e4b79e377ec4fd2e959 (patch)
treed7a140be2703c4a92de736203ef02c70afb57787
parentb35a42b0a1f8424b3e92b66bd315274ce748c2bb (diff)
downloadpcsxr-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.xib237
-rw-r--r--macosx/Pcsxr.xcodeproj/project.pbxproj4
-rw-r--r--macosx/PcsxrController.h4
-rw-r--r--macosx/PcsxrController.m12
-rw-r--r--macosx/RecentItemsMenu.h23
-rw-r--r--macosx/RecentItemsMenu.m103
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