diff options
| -rw-r--r-- | macosx/English.lproj/Configuration.xib | 471 | ||||
| -rw-r--r-- | macosx/English.lproj/Localizable.strings | 22 | ||||
| -rw-r--r-- | macosx/MemBadgeView.h | 13 | ||||
| -rw-r--r-- | macosx/MemBadgeView.m | 53 | ||||
| -rw-r--r-- | macosx/Pcsxr.xcodeproj/project.pbxproj | 12 | ||||
| -rwxr-xr-x | macosx/PcsxrController.m | 5 | ||||
| -rw-r--r-- | macosx/PcsxrMemCardArray.h | 36 | ||||
| -rw-r--r-- | macosx/PcsxrMemCardArray.m | 244 | ||||
| -rwxr-xr-x | macosx/PcsxrMemCardController.h | 10 | ||||
| -rwxr-xr-x | macosx/PcsxrMemCardController.m | 323 | ||||
| -rwxr-xr-x | macosx/PcsxrMemoryObject.h | 20 | ||||
| -rwxr-xr-x | macosx/PcsxrMemoryObject.m | 95 |
12 files changed, 649 insertions, 655 deletions
diff --git a/macosx/English.lproj/Configuration.xib b/macosx/English.lproj/Configuration.xib index 9ced3ebb..f7f13369 100644 --- a/macosx/English.lproj/Configuration.xib +++ b/macosx/English.lproj/Configuration.xib @@ -18,6 +18,7 @@ <string>NSCollectionView</string> <string>NSCollectionViewItem</string> <string>NSCustomObject</string> + <string>NSCustomView</string> <string>NSImageCell</string> <string>NSImageView</string> <string>NSMatrix</string> @@ -74,7 +75,6 @@ <int key="NSvFlags">274</int> <string key="NSFrame">{{13, 10}, {525, 391}}</string> <reference key="NSSuperview" ref="644483536"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="782866499"/> <array class="NSMutableArray" key="NSTabViewItems"> <object class="NSTabViewItem" id="150404821"> @@ -1604,7 +1604,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">269</int> <string key="NSFrame">{{221, 209}, {63, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="854313175"/> <string key="NSReuseIdentifierKey">_NS:687</string> <int key="NSTag">1</int> @@ -1630,7 +1629,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">293</int> <string key="NSFrame">{{221, 75}, {63, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="463534292"/> <string key="NSReuseIdentifierKey">_NS:687</string> <int key="NSTag">2</int> @@ -1664,7 +1662,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">274</int> <string key="NSFrameSize">{179, 246}</string> <reference key="NSSuperview" ref="781852938"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="913433103"/> <string key="NSReuseIdentifierKey">_NS:3367</string> <string key="NSMinGridSize">{0, 0}</string> @@ -1686,7 +1683,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </array> <string key="NSFrame">{{1, 1}, {179, 246}}</string> <reference key="NSSuperview" ref="463534292"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="628077157"/> <string key="NSReuseIdentifierKey">_NS:3365</string> <reference key="NSDocView" ref="628077157"/> @@ -1698,7 +1694,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">-2147483392</int> <string key="NSFrame">{{234, 1}, {15, 143}}</string> <reference key="NSSuperview" ref="463534292"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="677138134"/> <string key="NSReuseIdentifierKey">_NS:3372</string> <bool key="NSAllowsLogicalLayoutDirection">NO</bool> @@ -1712,7 +1707,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">-2147483392</int> <string key="NSFrame">{{1, 144}, {233, 15}}</string> <reference key="NSSuperview" ref="463534292"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="985208313"/> <string key="NSReuseIdentifierKey">_NS:3374</string> <bool key="NSAllowsLogicalLayoutDirection">NO</bool> @@ -1724,7 +1718,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </array> <string key="NSFrame">{{286, 42}, {181, 248}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="781852938"/> <string key="NSReuseIdentifierKey">_NS:3363</string> <int key="NSsFlags">133682</int> @@ -1748,7 +1741,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">274</int> <string key="NSFrameSize">{179, 246}</string> <reference key="NSSuperview" ref="171112102"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="617745638"/> <string key="NSReuseIdentifierKey">_NS:3367</string> <string key="NSMinGridSize">{0, 0}</string> @@ -1765,7 +1757,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </array> <string key="NSFrame">{{1, 1}, {179, 246}}</string> <reference key="NSSuperview" ref="137614947"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="855568378"/> <string key="NSReuseIdentifierKey">_NS:3365</string> <reference key="NSDocView" ref="855568378"/> @@ -1777,7 +1768,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">-2147483392</int> <string key="NSFrame">{{234, 1}, {15, 143}}</string> <reference key="NSSuperview" ref="137614947"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="24365741"/> <string key="NSReuseIdentifierKey">_NS:3372</string> <bool key="NSAllowsLogicalLayoutDirection">NO</bool> @@ -1791,7 +1781,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">-2147483392</int> <string key="NSFrame">{{1, 144}, {233, 15}}</string> <reference key="NSSuperview" ref="137614947"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="91368854"/> <string key="NSReuseIdentifierKey">_NS:3374</string> <bool key="NSAllowsLogicalLayoutDirection">NO</bool> @@ -1803,7 +1792,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </array> <string key="NSFrame">{{38, 42}, {181, 248}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="171112102"/> <string key="NSReuseIdentifierKey">_NS:3363</string> <int key="NSsFlags">133682</int> @@ -1819,7 +1807,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">289</int> <string key="NSFrame">{{280, 6}, {98, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="73572364"/> <string key="NSReuseIdentifierKey">_NS:687</string> <int key="NSTag">2</int> @@ -1845,7 +1832,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">292</int> <string key="NSFrame">{{32, 6}, {98, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="397679595"/> <string key="NSReuseIdentifierKey">_NS:687</string> <int key="NSTag">1</int> @@ -1871,7 +1857,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">292</int> <string key="NSFrame">{{132, 6}, {93, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="682387256"/> <string key="NSReuseIdentifierKey">_NS:687</string> <int key="NSTag">1</int> @@ -1897,7 +1882,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">289</int> <string key="NSFrame">{{380, 6}, {93, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView"/> <string key="NSReuseIdentifierKey">_NS:687</string> <int key="NSTag">2</int> @@ -1923,7 +1907,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">268</int> <string key="NSFrame">{{32, 289}, {80, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="137614947"/> <string key="NSReuseIdentifierKey">_NS:9</string> <int key="NSTag">1</int> @@ -1949,7 +1932,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">268</int> <string key="NSFrame">{{124, 289}, {101, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="816469593"/> <string key="NSReuseIdentifierKey">_NS:9</string> <int key="NSTag">1</int> @@ -1975,7 +1957,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">268</int> <string key="NSFrame">{{35, 325}, {187, 17}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="805254006"/> <string key="NSReuseIdentifierKey">_NS:1535</string> <bool key="NSEnabled">YES</bool> @@ -2004,7 +1985,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">268</int> <string key="NSFrame">{{280, 289}, {80, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="903286001"/> <string key="NSReuseIdentifierKey">_NS:9</string> <int key="NSTag">2</int> @@ -2030,7 +2010,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">268</int> <string key="NSFrame">{{372, 289}, {101, 32}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="38178535"/> <string key="NSReuseIdentifierKey">_NS:9</string> <int key="NSTag">2</int> @@ -2056,7 +2035,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSvFlags">268</int> <string key="NSFrame">{{283, 325}, {187, 17}}</string> <reference key="NSSuperview" ref="782866499"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="960369332"/> <string key="NSReuseIdentifierKey">_NS:1535</string> <bool key="NSEnabled">YES</bool> @@ -2075,7 +2053,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </array> <string key="NSFrame">{{10, 33}, {505, 345}}</string> <reference key="NSSuperview" ref="145760790"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="364230398"/> </object> <string key="NSLabel">Memory Cards</string> @@ -2556,7 +2533,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </array> <string key="NSFrameSize">{551, 407}</string> <reference key="NSSuperview"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="145760790"/> </object> <string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string> @@ -2587,10 +2563,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string> <string>NeXT TIFF v4.0 pasteboard type</string> </set> - <string key="NSFrame">{{73, 85}, {32, 32}}</string> + <string key="NSFrame">{{65, 79}, {48, 48}}</string> <reference key="NSSuperview" ref="873539094"/> - <reference key="NSWindow"/> - <reference key="NSNextKeyView" ref="979844614"/> + <reference key="NSNextKeyView" ref="534715842"/> <string key="NSReuseIdentifierKey">_NS:2141</string> <bool key="NSEnabled">YES</bool> <object class="NSImageCell" key="NSCell" id="544613766"> @@ -2612,9 +2587,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <object class="NSTextField" id="979844614"> <reference key="NSNextResponder" ref="873539094"/> <int key="NSvFlags">266</int> - <string key="NSFrame">{{0, 60}, {178, 17}}</string> + <string key="NSFrame">{{0, 54}, {178, 17}}</string> <reference key="NSSuperview" ref="873539094"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="938529027"/> <string key="NSReuseIdentifierKey">_NS:3944</string> <bool key="NSEnabled">YES</bool> @@ -2633,9 +2607,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <object class="NSTextField" id="938529027"> <reference key="NSNextResponder" ref="873539094"/> <int key="NSvFlags">266</int> - <string key="NSFrame">{{0, 35}, {178, 17}}</string> + <string key="NSFrame">{{0, 29}, {178, 17}}</string> <reference key="NSSuperview" ref="873539094"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="462204898"/> <string key="NSReuseIdentifierKey">_NS:3944</string> <bool key="NSEnabled">YES</bool> @@ -2654,9 +2627,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <object class="NSTextField" id="462204898"> <reference key="NSNextResponder" ref="873539094"/> <int key="NSvFlags">266</int> - <string key="NSFrame">{{0, 16}, {178, 11}}</string> + <string key="NSFrame">{{0, 7}, {178, 14}}</string> <reference key="NSSuperview" ref="873539094"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView"/> <string key="NSReuseIdentifierKey">_NS:3944</string> <bool key="NSEnabled">YES</bool> @@ -2677,17 +2649,46 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </object> <bool key="NSAllowsLogicalLayoutDirection">NO</bool> </object> + <object class="NSCustomView" id="534715842"> + <reference key="NSNextResponder" ref="873539094"/> + <int key="NSvFlags">4365</int> + <array class="NSMutableArray" key="NSSubviews"> + <object class="NSTextField" id="370252462"> + <reference key="NSNextResponder" ref="534715842"/> + <int key="NSvFlags">274</int> + <string key="NSFrame">{{2, 5}, {20, 14}}</string> + <reference key="NSSuperview" ref="534715842"/> + <reference key="NSNextKeyView" ref="979844614"/> + <string key="NSReuseIdentifierKey">_NS:1535</string> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="502243962"> + <int key="NSCellFlags">68157504</int> + <int key="NSCellFlags2">138544128</int> + <string key="NSContents">0</string> + <reference key="NSSupport" ref="26"/> + <string key="NSCellIdentifier">_NS:1535</string> + <reference key="NSControlView" ref="370252462"/> + <reference key="NSBackgroundColor" ref="243535788"/> + <reference key="NSTextColor" ref="271765176"/> + </object> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + </object> + </array> + <string key="NSFrame">{{89, 103}, {24, 24}}</string> + <reference key="NSSuperview" ref="873539094"/> + <reference key="NSNextKeyView" ref="370252462"/> + <string key="NSReuseIdentifierKey">_NS:9</string> + <string key="NSClassName">MemBadgeView</string> + </object> </array> - <string key="NSFrameSize">{179, 120}</string> + <string key="NSFrameSize">{179, 130}</string> <reference key="NSSuperview" ref="369120847"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="547270477"/> <string key="NSReuseIdentifierKey">_NS:11</string> </object> </array> - <string key="NSFrameSize">{179, 120}</string> + <string key="NSFrameSize">{179, 130}</string> <reference key="NSSuperview" ref="128798333"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="873539094"/> <string key="NSReuseIdentifierKey">_NS:9</string> <string key="NSOffsets">{0, 0}</string> @@ -2715,9 +2716,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </object> </object> </array> - <string key="NSFrameSize">{179, 120}</string> + <string key="NSFrameSize">{180, 130}</string> <reference key="NSSuperview"/> - <reference key="NSWindow"/> <reference key="NSNextKeyView" ref="369120847"/> </object> <object class="NSCollectionViewItem" id="1047165271"/> @@ -3591,35 +3591,35 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> - <string key="label">contentArray: self.memCard2Array</string> + <string key="label">contentArray: self.memCard2Array.memoryArray</string> <reference key="source" ref="94388034"/> <reference key="destination" ref="363971326"/> <object class="NSNibBindingConnector" key="connector"> <reference key="NSSource" ref="94388034"/> <reference key="NSDestination" ref="363971326"/> - <string key="NSLabel">contentArray: self.memCard2Array</string> + <string key="NSLabel">contentArray: self.memCard2Array.memoryArray</string> <string key="NSBinding">contentArray</string> - <string key="NSKeyPath">self.memCard2Array</string> + <string key="NSKeyPath">self.memCard2Array.memoryArray</string> <int key="NSNibBindingConnectorVersion">2</int> </object> </object> - <int key="connectionID">995</int> + <int key="connectionID">1033</int> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> - <string key="label">contentArray: self.memCard1Array</string> + <string key="label">contentArray: self.memCard1Array.memoryArray</string> <reference key="source" ref="104514835"/> <reference key="destination" ref="363971326"/> <object class="NSNibBindingConnector" key="connector"> <reference key="NSSource" ref="104514835"/> <reference key="NSDestination" ref="363971326"/> - <string key="NSLabel">contentArray: self.memCard1Array</string> + <string key="NSLabel">contentArray: self.memCard1Array.memoryArray</string> <string key="NSBinding">contentArray</string> - <string key="NSKeyPath">self.memCard1Array</string> + <string key="NSKeyPath">self.memCard1Array.memoryArray</string> <int key="NSNibBindingConnectorVersion">2</int> </object> </object> - <int key="connectionID">994</int> + <int key="connectionID">1034</int> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> @@ -3655,7 +3655,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <int key="NSNibBindingConnectorVersion">2</int> </object> </object> - <int key="connectionID">988</int> + <int key="connectionID">1057</int> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> @@ -3705,6 +3705,62 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> </object> <int key="connectionID">989</int> </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">hidden: representedObject.isBiggerThanOne</string> + <reference key="source" ref="534715842"/> + <reference key="destination" ref="1047165271"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="534715842"/> + <reference key="NSDestination" ref="1047165271"/> + <string key="NSLabel">hidden: representedObject.isBiggerThanOne</string> + <string key="NSBinding">hidden</string> + <string key="NSKeyPath">representedObject.isBiggerThanOne</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSValueTransformerName</string> + <string key="NS.object.0">NSNegateBoolean</string> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">1044</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: representedObject.blockSize</string> + <reference key="source" ref="370252462"/> + <reference key="destination" ref="1047165271"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="370252462"/> + <reference key="NSDestination" ref="1047165271"/> + <string key="NSLabel">value: representedObject.blockSize</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">representedObject.blockSize</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">1052</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">hidden: representedObject.isBiggerThanOne</string> + <reference key="source" ref="370252462"/> + <reference key="destination" ref="1047165271"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="370252462"/> + <reference key="NSDestination" ref="1047165271"/> + <string key="NSLabel">hidden: representedObject.isBiggerThanOne</string> + <string key="NSBinding">hidden</string> + <string key="NSKeyPath">representedObject.isBiggerThanOne</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSValueTransformerName</string> + <string key="NS.object.0">NSNegateBoolean</string> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">1055</int> + </object> </array> <object class="IBMutableOrderedSet" key="objectRecords"> <array key="orderedObjects"> @@ -4947,9 +5003,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <reference key="object" ref="369120847"/> <array class="NSMutableArray" key="children"> <reference ref="547270477"/> - <reference ref="462204898"/> + <reference ref="534715842"/> <reference ref="979844614"/> <reference ref="938529027"/> + <reference ref="462204898"/> </array> <reference key="parent" ref="128798333"/> </object> @@ -5005,12 +5062,36 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <reference key="object" ref="544613766"/> <reference key="parent" ref="547270477"/> </object> + <object class="IBObjectRecord"> + <int key="objectID">1021</int> + <reference key="object" ref="534715842"/> + <array class="NSMutableArray" key="children"> + <reference ref="370252462"/> + </array> + <reference key="parent" ref="369120847"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">1047</int> + <reference key="object" ref="370252462"/> + <array class="NSMutableArray" key="children"> + <reference ref="502243962"/> + </array> + <reference key="parent" ref="534715842"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">1048</int> + <reference key="object" ref="502243962"/> + <reference key="parent" ref="370252462"/> + </object> </array> </object> <dictionary class="NSMutableDictionary" key="flattenedProperties"> <string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="1021.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="1047.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="1048.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="21.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <object class="NSMutableDictionary" key="238.IBAttributePlaceholdersKey"> @@ -5272,295 +5353,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> <nil key="activeLocalization"/> <dictionary class="NSMutableDictionary" key="localizations"/> <nil key="sourceID"/> - <int key="maxID">1018</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <array class="NSMutableArray" key="referencedPartialClassDescriptions"> - <object class="IBPartialClassDescription"> - <string key="className">ConfigurationController</string> - <string key="superclassName">NSWindowController</string> - <dictionary class="NSMutableDictionary" key="actions"> - <string key="mcdChangeClicked:">id</string> - <string key="mcdNewClicked:">id</string> - <string key="setCheckbox:">id</string> - <string key="setCheckboxInverse:">id</string> - <string key="setVideoType:">id</string> - </dictionary> - <dictionary class="NSMutableDictionary" key="actionInfosByName"> - <object class="IBActionInfo" key="mcdChangeClicked:"> - <string key="name">mcdChangeClicked:</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBActionInfo" key="mcdNewClicked:"> - <string key="name">mcdNewClicked:</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBActionInfo" key="setCheckbox:"> - <string key="name">setCheckbox:</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBActionInfo" key="setCheckboxInverse:"> - <string key="name">setCheckboxInverse:</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBActionInfo" key="setVideoType:"> - <string key="name">setVideoType:</string> - <string key="candidateClassName">id</string> - </object> - </dictionary> - <dictionary class="NSMutableDictionary" key="outlets"> - <string key="autoVTypeCell">id</string> - <string key="bwMdecCell">id</string> - <string key="cdromPlugin">PluginController</string> - <string key="consoleOutputCell">id</string> - <string key="enableNetPlayCell">id</string> - <string key="graphicsPlugin">PluginController</string> - <string key="hkController">HotkeyController</string> - <string key="hkTab">NSTabViewItem</string> - <string key="memCardEdit">PcsxrMemCardController</string> - <string key="netPlugin">PluginController</string> - <string key="noCDAudioCell">id</string> - <string key="noFastBootCell">id</string> - <string key="noXaAudioCell">id</string> - <string key="padPlugin">PluginController</string> - <string key="rCountFixCell">id</string> - <string key="sio1Plugin">PluginController</string> - <string key="sioIrqAlwaysCell">id</string> - <string key="soundPlugin">PluginController</string> - <string key="spuIrqAlwaysCell">id</string> - <string key="usesDynarecCell">id</string> - <string key="usesHleCell">id</string> - <string key="vSyncWAFixCell">id</string> - <string key="vTypePALCell">id</string> - <string key="widescreen">id</string> - </dictionary> - <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName"> - <object class="IBToOneOutletInfo" key="autoVTypeCell"> - <string key="name">autoVTypeCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="bwMdecCell"> - <string key="name">bwMdecCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="cdromPlugin"> - <string key="name">cdromPlugin</string> - <string key="candidateClassName">PluginController</string> - </object> - <object class="IBToOneOutletInfo" key="consoleOutputCell"> - <string key="name">consoleOutputCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="enableNetPlayCell"> - <string key="name">enableNetPlayCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="graphicsPlugin"> - <string key="name">graphicsPlugin</string> - <string key="candidateClassName">PluginController</string> - </object> - <object class="IBToOneOutletInfo" key="hkController"> - <string key="name">hkController</string> - <string key="candidateClassName">HotkeyController</string> - </object> - <object class="IBToOneOutletInfo" key="hkTab"> - <string key="name">hkTab</string> - <string key="candidateClassName">NSTabViewItem</string> - </object> - <object class="IBToOneOutletInfo" key="memCardEdit"> - <string key="name">memCardEdit</string> - <string key="candidateClassName">PcsxrMemCardController</string> - </object> - <object class="IBToOneOutletInfo" key="netPlugin"> - <string key="name">netPlugin</string> - <string key="candidateClassName">PluginController</string> - </object> - <object class="IBToOneOutletInfo" key="noCDAudioCell"> - <string key="name">noCDAudioCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="noFastBootCell"> - <string key="name">noFastBootCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="noXaAudioCell"> - <string key="name">noXaAudioCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="padPlugin"> - <string key="name">padPlugin</string> - <string key="candidateClassName">PluginController</string> - </object> - <object class="IBToOneOutletInfo" key="rCountFixCell"> - <string key="name">rCountFixCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="sio1Plugin"> - <string key="name">sio1Plugin</string> - <string key="candidateClassName">PluginController</string> - </object> - <object class="IBToOneOutletInfo" key="sioIrqAlwaysCell"> - <string key="name">sioIrqAlwaysCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="soundPlugin"> - <string key="name">soundPlugin</string> - <string key="candidateClassName">PluginController</string> - </object> - <object class="IBToOneOutletInfo" key="spuIrqAlwaysCell"> - <string key="name">spuIrqAlwaysCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="usesDynarecCell"> - <string key="name">usesDynarecCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="usesHleCell"> - <string key="name">usesHleCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="vSyncWAFixCell"> - <string key="name">vSyncWAFixCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="vTypePALCell"> - <string key="name">vTypePALCell</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo" key="widescreen"> - <string key="name">widescreen</string> - <string key="candidateClassName">id</string> - </object> - </dictionary> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">./Classes/ConfigurationController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">HotkeyController</string> - <string key="superclassName">NSView</string> - <object class="NSMutableDictionary" key="actions"> - <string key="NS.key.0">hotkeySet:</string> - <string key="NS.object.0">id</string> - </object> - <object class="NSMutableDictionary" key="actionInfosByName"> - <string key="NS.key.0">hotkeySet:</string> - <object class="IBActionInfo" key="NS.object.0"> - <string key="name">hotkeySet:</string> - <string key="candidateClassName">id</string> - </object> - </object> - <dictionary class="NSMutableDictionary" key="outlets"> - <string key="FastForward">NSTextField</string> - <string key="FrameLimit">NSTextField</string> - <string key="LoadState">NSTextField</string> - <string key="NextState">NSTextField</string> - <string key="PrevState">NSTextField</string> - <string key="SaveState">NSTextField</string> - </dictionary> - <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName"> - <object class="IBToOneOutletInfo" key="FastForward"> - <string key="name">FastForward</string> - <string key="candidateClassName">NSTextField</string> - </object> - <object class="IBToOneOutletInfo" key="FrameLimit"> - <string key="name">FrameLimit</string> - <string key="candidateClassName">NSTextField</string> - </object> - <object class="IBToOneOutletInfo" key="LoadState"> - <string key="name">LoadState</string> - <string key="candidateClassName">NSTextField</string> - </object> - <object class="IBToOneOutletInfo" key="NextState"> - <string key="name">NextState</string> - <string key="candidateClassName">NSTextField</string> - </object> - <object class="IBToOneOutletInfo" key="PrevState"> - <string key="name">PrevState</string> - <string key="candidateClassName">NSTextField</string> - </object> - <object class="IBToOneOutletInfo" key="SaveState"> - <string key="name">SaveState</string> - <string key="candidateClassName">NSTextField</string> - </object> - </dictionary> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">./Classes/HotkeyController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">PcsxrMemCardController</string> - <string key="superclassName">NSViewController</string> - <dictionary class="NSMutableDictionary" key="actions"> - <string key="changeMemCard:">id</string> - <string key="deleteMemoryObject:">id</string> - <string key="formatCard:">id</string> - <string key="moveBlock:">id</string> - <string key="newMemCard:">id</string> - </dictionary> - <dictionary class="NSMutableDictionary" key="actionInfosByName"> - <object class="IBActionInfo" key="changeMemCard:"> - <string key="name">changeMemCard:</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBActionInfo" key="deleteMemoryObject:"> - <string key="name">deleteMemoryObject:</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBActionInfo" key="formatCard:"> - <string key="name">formatCard:</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBActionInfo" key="moveBlock:"> - <string key="name">moveBlock:</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBActionInfo" key="newMemCard:"> - <string key="name">newMemCard:</string> - <string key="candidateClassName">id</string> - </object> - </dictionary> - <dictionary class="NSMutableDictionary" key="outlets"> - <string key="memCard1Label">NSTextField</string> - <string key="memCard1view">NSCollectionView</string> - <string key="memCard2Label">NSTextField</string> - <string key="memCard2view">NSCollectionView</string> - </dictionary> - <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName"> - <object class="IBToOneOutletInfo" key="memCard1Label"> - <string key="name">memCard1Label</string> - <string key="candidateClassName">NSTextField</string> - </object> - <object class="IBToOneOutletInfo" key="memCard1view"> - <string key="name">memCard1view</string> - <string key="candidateClassName">NSCollectionView</string> - </object> - <object class="IBToOneOutletInfo" key="memCard2Label"> - <string key="name">memCard2Label</string> - <string key="candidateClassName">NSTextField</string> - </object> - <object class="IBToOneOutletInfo" key="memCard2view"> - <string key="name">memCard2view</string> - <string key="candidateClassName">NSCollectionView</string> - </object> - </dictionary> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">./Classes/PcsxrMemCardController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">PluginController</string> - <string key="superclassName">SPUPluginController</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">./Classes/PluginController.h</string> - </object> - </object> - </array> + <int key="maxID">1057</int> </object> + <object class="IBClassDescriber" key="IBDocument.Classes"/> <int key="IBDocument.localizationMode">0</int> <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> diff --git a/macosx/English.lproj/Localizable.strings b/macosx/English.lproj/Localizable.strings index 2166bcfb..5367f575 100644 --- a/macosx/English.lproj/Localizable.strings +++ b/macosx/English.lproj/Localizable.strings @@ -52,18 +52,28 @@ "CD-ROM ID: %.9s\n" = "CD-ROM ID: %.9s\n"; "Error opening file: %s.\n" = "Error opening file: %s.\n"; "Unknown CPE opcode %02x at poiition %08x.\n" = "Unknown CPE opcode %02x at position %08x.\n"; + +"Error opening file" = "Error opening file."; +"Unable to open %@: %@" = "Unable to open %@: %@."; + + +//Memory card management "Format Card" = "Format Card"; -"Cancel" = "Cancel"; +"Free Size" = "Free Size"; "Format" = "Format"; "Formatting a memory card will remove all data on it.\n\nThis cannot be undone." = "Formatting a memory card will remove all data on it.\n\nThis cannot be undone."; "Delete Block" = "Delete Block"; -"Deleting a block will remove all saved data on that block.\n\nThis cannot be undone." = "Deleting a block will remove all saved data on that block.\n\nThis cannot be undone."; -"Delete" = "Delete"; +"Deleting a block will remove all saved data on that block.\n\nThis cannot be undone." = "Deleting a memory card object will set the blocks to not be readable by the emulator, and may result in the data being overwritten."; "No Free Space" = "No Free Space"; -"Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue" = "Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue"; +"Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue" = "Memory card %d doesn't have %d free blocks on it. Please remove some blocks on that card to continue."; +"Memory card %i does not have enough free consecutive blocks.\n\nIn order to copy over \"%@ (%@),\" memory card %i must be compressed. Compressing memory cards will make deleted blocks unrecoverable.\n\nDo you want to continue?" = "Memory card %i does not have enough free consecutive blocks.\n\nIn order to copy over \"%@ (%@),\" memory card %i must be compressed. Compressing memory cards will make deleted blocks unrecoverable.\n\nDo you want to continue?"; + +//General buttons "Okay" = "Okay"; -"Error opening file" = "Error opening file"; -"Unable to open %@: %@" = "Unable to open %@: %@"; +"Cancel" = "Cancel"; +"Yes" = "Yes"; +"No" = "No"; +"Delete" = "Delete"; //Mem card flags "MemCard_Deleted" = "Deleted"; diff --git a/macosx/MemBadgeView.h b/macosx/MemBadgeView.h new file mode 100644 index 00000000..f9696008 --- /dev/null +++ b/macosx/MemBadgeView.h @@ -0,0 +1,13 @@ +// +// MemBadgeView.h +// Pcsxr +// +// Created by C.W. Betts on 7/6/13. +// +// + +#import <Cocoa/Cocoa.h> + +@interface MemBadgeView : NSView + +@end diff --git a/macosx/MemBadgeView.m b/macosx/MemBadgeView.m new file mode 100644 index 00000000..3a7b8277 --- /dev/null +++ b/macosx/MemBadgeView.m @@ -0,0 +1,53 @@ +// +// MemBadgeView.m +// Pcsxr +// +// Created by C.W. Betts on 7/6/13. +// +// + +#import "MemBadgeView.h" +#import "ARCBridge.h" + +@implementation MemBadgeView + +//TODO: also include the memory count in the view as well. +- (id)initWithFrame:(NSRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code here. + } + + return self; +} + +- (void)drawRect:(NSRect)dirtyRect +{ + NSRect drawToRect = dirtyRect; + NSImage *tmpDraw = nil; + if (!NSEqualSizes(self.frame.size, dirtyRect.size)) { + drawToRect = (NSRect) {NSZeroPoint, self.frame.size}; + tmpDraw = [[NSImage alloc] initWithSize:drawToRect.size]; + [tmpDraw lockFocus]; + } + [[NSColor whiteColor] set]; + [[NSBezierPath bezierPathWithOvalInRect:drawToRect] fill]; + [[NSColor redColor] set]; + NSRect smallerRect = drawToRect; + smallerRect.origin.x += 2; + smallerRect.origin.y += 2; + smallerRect.size.height -= 4; + smallerRect.size.width -= 4; + [[NSBezierPath bezierPathWithOvalInRect:smallerRect] fill]; + + if (tmpDraw) { + [tmpDraw unlockFocus]; + + [tmpDraw drawInRect:dirtyRect fromRect:dirtyRect operation:NSCompositeSourceOver fraction:1.0]; + + RELEASEOBJ(tmpDraw); + } +} + +@end diff --git a/macosx/Pcsxr.xcodeproj/project.pbxproj b/macosx/Pcsxr.xcodeproj/project.pbxproj index 8b244e78..d8a8cf58 100644 --- a/macosx/Pcsxr.xcodeproj/project.pbxproj +++ b/macosx/Pcsxr.xcodeproj/project.pbxproj @@ -212,6 +212,8 @@ 55BBA69914953887003B2CEC /* PcsxrDiscHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 55BBA69814953887003B2CEC /* PcsxrDiscHandler.m */; }; 55BBA69C1495839A003B2CEC /* PcsxrFreezeStateHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 55BBA69B1495839A003B2CEC /* PcsxrFreezeStateHandler.m */; }; 55C7A214148B2B3800C22ABC /* PcsxrMemCardDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55C7A216148B2B3800C22ABC /* PcsxrMemCardDocument.xib */; }; + 55EC05FB1788B1230053AC23 /* PcsxrMemCardArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 55EC05FA1788B1230053AC23 /* PcsxrMemCardArray.m */; }; + 55EC05FE178916E80053AC23 /* MemBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 55EC05FD178916E70053AC23 /* MemBadgeView.m */; }; 712FD1E81093096F00575A92 /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 712FD1E51093096F00575A92 /* debug.c */; }; 712FD1E91093096F00575A92 /* socket.c in Sources */ = {isa = PBXBuildFile; fileRef = 712FD1E61093096F00575A92 /* socket.c */; }; 713B530E110B75650002F164 /* ppf.c in Sources */ = {isa = PBXBuildFile; fileRef = 713B530C110B75650002F164 /* ppf.c */; }; @@ -730,6 +732,10 @@ 55BBA69A14958399003B2CEC /* PcsxrFreezeStateHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PcsxrFreezeStateHandler.h; sourceTree = "<group>"; }; 55BBA69B1495839A003B2CEC /* PcsxrFreezeStateHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PcsxrFreezeStateHandler.m; sourceTree = "<group>"; }; 55C7A215148B2B3800C22ABC /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PcsxrMemCardDocument.xib; sourceTree = "<group>"; }; + 55EC05F91788B1230053AC23 /* PcsxrMemCardArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PcsxrMemCardArray.h; sourceTree = "<group>"; }; + 55EC05FA1788B1230053AC23 /* PcsxrMemCardArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PcsxrMemCardArray.m; sourceTree = "<group>"; }; + 55EC05FC178916E70053AC23 /* MemBadgeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemBadgeView.h; sourceTree = "<group>"; }; + 55EC05FD178916E70053AC23 /* MemBadgeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MemBadgeView.m; sourceTree = "<group>"; }; 712FD1E51093096F00575A92 /* debug.c */ = {isa = PBXFileReference; fileEncoding = 0; lastKnownFileType = sourcecode.c.c; path = debug.c; sourceTree = "<group>"; }; 712FD1E61093096F00575A92 /* socket.c */ = {isa = PBXFileReference; fileEncoding = 0; lastKnownFileType = sourcecode.c.c; path = socket.c; sourceTree = "<group>"; }; 712FD1E71093096F00575A92 /* socket.h */ = {isa = PBXFileReference; fileEncoding = 0; lastKnownFileType = sourcecode.c.h; path = socket.h; sourceTree = "<group>"; }; @@ -997,6 +1003,10 @@ 7161C2970FDED75300225F97 /* ExtendedKeys.h */, 55A90227147D89380037E18F /* PcsxrMemoryObject.h */, 55A90228147D89380037E18F /* PcsxrMemoryObject.m */, + 55EC05F91788B1230053AC23 /* PcsxrMemCardArray.h */, + 55EC05FA1788B1230053AC23 /* PcsxrMemCardArray.m */, + 55EC05FC178916E70053AC23 /* MemBadgeView.h */, + 55EC05FD178916E70053AC23 /* MemBadgeView.m */, 02717969167884DF004AED62 /* hotkeys.h */, 02717967167884C9004AED62 /* hotkeys.m */, 5550D2711683C923006C56B5 /* RecentItemsMenu.h */, @@ -2226,6 +2236,8 @@ 02717968167884C9004AED62 /* hotkeys.m in Sources */, 5529EA11169CBE3400BAA2A5 /* RecentItemsMenu.m in Sources */, D422E67A16DC495800526DCF /* CheatController.m in Sources */, + 55EC05FB1788B1230053AC23 /* PcsxrMemCardArray.m in Sources */, + 55EC05FE178916E80053AC23 /* MemBadgeView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/macosx/PcsxrController.m b/macosx/PcsxrController.m index 8ca55692..6943fcac 100755 --- a/macosx/PcsxrController.m +++ b/macosx/PcsxrController.m @@ -122,7 +122,7 @@ void ShowHelpAndExit(FILE* output, int exitCode) [deviceName deleteCharactersInRange:rdiskRange]; } // execute hdiutil to eject the device - ejectTask = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/hdiutil" arguments:[NSArray arrayWithObjects:@"eject", deviceName, nil]]; + ejectTask = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/hdiutil" arguments:@[@"eject", deviceName]]; [ejectTask waitUntilExit]; } } @@ -497,9 +497,8 @@ otherblock();\ } RETAINOBJNORETURN(unknownString); } - NSLog(@"%@", unknownString); + NSLog(@"%@. This may be due to extra arguments passed by the OS or debugger.", unknownString); RELEASEOBJ(unknownString); - NSLog(@"This may be due to extra arguments passed by the OS or debugger."); } #endif if (!isLaunchable && hasParsedAnArgument) { diff --git a/macosx/PcsxrMemCardArray.h b/macosx/PcsxrMemCardArray.h new file mode 100644 index 00000000..760f4726 --- /dev/null +++ b/macosx/PcsxrMemCardArray.h @@ -0,0 +1,36 @@ +// +// PcsxrMemCardArray.h +// Pcsxr +// +// Created by C.W. Betts on 7/6/13. +// +// + +#import <Foundation/Foundation.h> +#import "PcsxrMemoryObject.h" + +@interface PcsxrMemCardArray : NSObject +{ + @private + NSArray *rawArray; + int cardNumber; + NSURL *fileURL; +} + +- (id)initWithMemoryCardNumber:(int)carNum; + +- (void)deleteMemoryBlocksAtIndex:(int)slotnum; +- (void)compactMemory; +//Blocks that are free +- (int)freeBlocks; +//Blocks that have been deleted and are free +- (int)availableBlocks; +- (int)memorySizeAtIndex:(int)idx; +- (BOOL)moveBlockAtIndex:(int)idx toMemoryCard:(PcsxrMemCardArray*)otherCard; +- (int)indexOfFreeBlocksWithSize:(int)asize; + + +@property (nonatomic, readonly, unsafe_unretained) NSArray *memoryArray; +@property (nonatomic, readonly, unsafe_unretained) NSURL *memCardLocation; + +@end diff --git a/macosx/PcsxrMemCardArray.m b/macosx/PcsxrMemCardArray.m new file mode 100644 index 00000000..181b993d --- /dev/null +++ b/macosx/PcsxrMemCardArray.m @@ -0,0 +1,244 @@ +// +// PcsxrMemCardArray.m +// Pcsxr +// +// Created by C.W. Betts on 7/6/13. +// +// + +#import "PcsxrMemCardArray.h" +#import "ARCBridge.h" +#import "ConfigurationController.h" + +#define MAX_MEMCARD_BLOCKS 15 + +static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, char *str) +{ + // header + memmove(to + (dsti + 1) * 128, from + (srci + 1) * 128, 128); + SaveMcd(str, to, (dsti + 1) * 128, 128); + + // data + memmove(to + (dsti + 1) * 1024 * 8, from + (srci+1) * 1024 * 8, 1024 * 8); + SaveMcd(str, to, (dsti + 1) * 1024 * 8, 1024 * 8); + + //printf("data = %s\n", from + (srci+1) * 128); +} + + +@interface PcsxrMemCardArray () +@property (arcretain) NSArray *rawArray; + +@end + +@implementation PcsxrMemCardArray +@synthesize rawArray; + +- (id)initWithMemoryCardNumber:(int)carNum +{ + NSParameterAssert(carNum == 1 || carNum == 2); + if (self = [super init]) { + NSMutableArray *tmpMemArray = [[NSMutableArray alloc] initWithCapacity:MAX_MEMCARD_BLOCKS]; + cardNumber = carNum; + int i, x; + i = 0; + while (i < MAX_MEMCARD_BLOCKS) { + x = 1; + McdBlock memBlock, tmpBlock; + GetMcdBlockInfo(carNum, i + 1, &memBlock); + + if ([PcsxrMemoryObject memFlagsFromBlockFlags:memBlock.Flags] == memFlagFree) { + //Free space: ignore + i++; + continue; + } + do { + GetMcdBlockInfo(carNum, i + x + 1, &tmpBlock); + if ((tmpBlock.Flags & 0x3) == 0x3) { + x++; + break; + } else if ((tmpBlock.Flags & 0x2) == 0x2) { + x++; + } else { + break; + } + } while (i + x - 1 < MAX_MEMCARD_BLOCKS); + PcsxrMemoryObject *obj = [[PcsxrMemoryObject alloc] initWithMcdBlock:&memBlock startingIndex:i size:x]; + [tmpMemArray addObject:obj]; + RELEASEOBJ(obj); + i += x; + } + self.rawArray = [NSArray arrayWithArray:tmpMemArray]; + RELEASEOBJ(tmpMemArray); + } + return self; +} + +- (int)indexOfFreeBlocksWithSize:(int)asize +{ + int foundcount = 0, i = 0; + + McdBlock obj; + // search for empty (formatted) blocks first + while (i < MAX_MEMCARD_BLOCKS && foundcount < asize) { + GetMcdBlockInfo(cardNumber, 1 + i++, &obj); + //&Blocks[target_card][++i]; + if ((obj.Flags & 0xFF) == 0xA0) { // if A0 but not A1 + foundcount++; + } else if (foundcount >= 1) { // need to find n count consecutive blocks + foundcount = 0; + } else { + //i++; + } + //printf("formatstatus=%x\n", Info->Flags); + } + + if (foundcount == asize) + return (i-foundcount); + + // no free formatted slots, try to find a deleted one + foundcount = i = 0; + while (i < MAX_MEMCARD_BLOCKS && foundcount < asize) { + GetMcdBlockInfo(cardNumber, 1 + i++, &obj); + if ((obj.Flags & 0xF0) == 0xA0) { // A2 or A6 f.e. + foundcount++; + } else if (foundcount >= 1) { // need to find n count consecutive blocks + foundcount = 0; + } else { + //i++; + } + //printf("delstatus=%x\n", Info->Flags); + } + + if (foundcount == asize) + return (i-foundcount); + + return -1; +} + +- (BOOL)moveBlockAtIndex:(int)idx toMemoryCard:(PcsxrMemCardArray*)otherCard +{ + if (idx == [rawArray count]) { +#ifdef DEBUG + NSLog(@"Trying to get an object one more than the length of the raw array. Perhaps you were trying to \"move\" the free blocks"); +#endif + return NO; + } + + + //TODO: Implement! + return NO; +} + + +- (int)freeBlocks +{ + int memSize = 15; + for (PcsxrMemoryObject *memObj in rawArray) { + memSize -= memObj.blockSize; + } + return memSize; +} + +- (int)availableBlocks +{ + int memSize = MAX_MEMCARD_BLOCKS; + for (PcsxrMemoryObject *memObj in rawArray) { + if (memObj.flagNameIndex != memFlagDeleted) { + memSize -= memObj.blockSize; + } + } + return memSize; +} + +- (NSArray*)memoryArray +{ + int freeSize = [self freeBlocks]; + + if (freeSize) { + McdBlock theBlock; + //Create a blank "block" that will be used for + theBlock.Flags = 0xA0; + theBlock.IconCount = 0; + PcsxrMemoryObject *freeObj = [[PcsxrMemoryObject alloc] initWithMcdBlock:&theBlock startingIndex:MAX_MEMCARD_BLOCKS - 1 - freeSize size:freeSize]; + return [rawArray arrayByAddingObject:AUTORELEASEOBJ(freeObj)]; + } else + return rawArray; +} + +- (NSURL*)memCardLocation +{ + if (cardNumber == 1) { + return [[NSUserDefaults standardUserDefaults] URLForKey:@"Mcd1"]; + } else { + return [[NSUserDefaults standardUserDefaults] URLForKey:@"Mcd2"]; + } +} + +- (int)memorySizeAtIndex:(int)idx +{ + if (idx == [rawArray count]) { +#ifdef DEBUG + NSLog(@"Trying to get an object one more than the length of the raw array. Perhaps you were trying to \"delete\" the free blocks"); +#endif + return [self freeBlocks]; + } + + return [[rawArray objectAtIndex:idx] blockSize]; +} + +- (void)compactMemory +{ + +#if 0 + LoadMcd(cardNumber, cardNumber == 1 ? Config.Mcd1 : Config.Mcd2); + [[NSNotificationCenter defaultCenter] postNotificationName:memChangeNotifier object:nil userInfo:[NSDictionary dictionaryWithObject:@(cardNumber) forKey:memCardChangeNumberKey]]; +#endif +} + +- (void)deleteMemoryBlocksAtIndex:(int)slotnum +{ + int xor = 0, i, j; + char *data, *ptr, *filename; + if (cardNumber == 1) { + filename = Config.Mcd1; + data = Mcd1Data; + } else { + filename = Config.Mcd2; + data = Mcd2Data; + } + + if (slotnum == [rawArray count]) { +#ifdef DEBUG + NSLog(@"Trying to get an object one more than the length of the raw array. Perhaps you were trying to \"delete\" the free blocks"); +#endif + return; + } + + PcsxrMemoryObject *theObj = [rawArray objectAtIndex:slotnum]; + + McdBlock flagBlock; + + for(i = theObj.startingIndex +1; i < (theObj.startingIndex + theObj.blockSize +1); i++) + { + GetMcdBlockInfo(cardNumber, i, &flagBlock); + ptr = data + i * 128; + + if ((flagBlock.Flags & 0xF0) == 0xA0) { + if ((flagBlock.Flags & 0xF) >= 1 && + (flagBlock.Flags & 0xF) <= 3) { // deleted + *ptr = 0x50 | (flagBlock.Flags & 0xF); + } else return; + } else if ((flagBlock.Flags & 0xF0) == 0x50) { // used + *ptr = 0xA0 | (flagBlock.Flags & 0xF); + } else { continue; } + + for (j = 0; j < 127; j++) xor ^= *ptr++; + *ptr = xor; + + SaveMcd(filename, data, i * 128, 128); + } +} + + +@end diff --git a/macosx/PcsxrMemCardController.h b/macosx/PcsxrMemCardController.h index 8e92de95..213e1e2c 100755 --- a/macosx/PcsxrMemCardController.h +++ b/macosx/PcsxrMemCardController.h @@ -7,6 +7,8 @@ // #import <Cocoa/Cocoa.h> +#import "ARCBridge.h" +@class PcsxrMemCardArray; @interface PcsxrMemCardController : NSViewController { @@ -15,10 +17,12 @@ IBOutlet NSTextField *memCard1Label; IBOutlet NSTextField *memCard2Label; - NSMutableArray *memCard1Array; - NSMutableArray *memCard2Array; + PcsxrMemCardArray *memCard1Array; + PcsxrMemCardArray *memCard2Array; NSTimer *imageAnimateTimer; } +@property (readonly, arcretain) PcsxrMemCardArray *memCard1Array; +@property (readonly, arcretain) PcsxrMemCardArray *memCard2Array; - (IBAction)moveBlock:(id)sender; - (IBAction)formatCard:(id)sender; @@ -26,6 +30,4 @@ - (IBAction)newMemCard:(id)sender; - (IBAction)changeMemCard:(id)sender; - (void)loadMemoryCardInfoForCard:(int)theCard; -- (BOOL)isMemoryBlockEmptyOnCard:(int)aCard block:(int)aBlock; -- (int)countFreeBlocksOnCard:(int)aCard; @end diff --git a/macosx/PcsxrMemCardController.m b/macosx/PcsxrMemCardController.m index 5c430cff..e04ace66 100755 --- a/macosx/PcsxrMemCardController.m +++ b/macosx/PcsxrMemCardController.m @@ -10,26 +10,21 @@ #import "PcsxrMemoryObject.h" #import "ConfigurationController.h" #import "PcsxrMemCardHandler.h" +#import "PcsxrMemCardArray.h" #include "sio.h" #import "ARCBridge.h" #define MAX_MEMCARD_BLOCKS 15 -static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, char *str) -{ - // header - memcpy(to + (dsti + 1) * 128, from + (srci + 1) * 128, 128); - SaveMcd(str, to, (dsti + 1) * 128, 128); - - // data - memcpy(to + (dsti + 1) * 1024 * 8, from + (srci+1) * 1024 * 8, 1024 * 8); - SaveMcd(str, to, (dsti + 1) * 1024 * 8, 1024 * 8); - - //printf("data = %s\n", from + (srci+1) * 128); -} +@interface PcsxrMemCardController () +@property (readwrite, arcretain) PcsxrMemCardArray *memCard1Array; +@property (readwrite, arcretain) PcsxrMemCardArray *memCard2Array; +@end @implementation PcsxrMemCardController +@synthesize memCard1Array, memCard2Array; + //memCard1Array KVO functions - (void)setupValues:(int)theCards @@ -50,7 +45,6 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha fileName = [fm displayNameAtPath:fullPath]; [memCard1Label setTitleWithMnemonic:fileName]; - [memCard1Label setToolTip:fullPath]; [self loadMemoryCardInfoForCard:1]; @@ -61,65 +55,12 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha fileName = [fm displayNameAtPath:fullPath]; [memCard2Label setTitleWithMnemonic:fileName]; - [memCard2Label setToolTip:fullPath]; [self loadMemoryCardInfoForCard:2]; } } --(void)insertObject:(PcsxrMemoryObject *)p inMemCard1ArrayAtIndex:(NSUInteger)index -{ - [memCard1Array insertObject:p atIndex:index]; -} - --(void)removeObjectFromMemCard1ArrayAtIndex:(NSUInteger)index -{ - [memCard1Array removeObjectAtIndex:index]; -} - -- (void)setMemCard1Array:(NSMutableArray *)a -{ - if (memCard1Array != a) { -#if !__has_feature(objc_arc) - [memCard1Array release]; -#endif - memCard1Array = [a mutableCopy]; - } -} - -- (NSArray *)memCard1Array -{ - return [NSArray arrayWithArray:memCard1Array]; -} - -//memCard2Array KVO functions - --(void)insertObject:(PcsxrMemoryObject *)p inMemCard2ArrayAtIndex:(NSUInteger)index -{ - [memCard2Array insertObject:p atIndex:index]; -} - --(void)removeObjectFromMemCard2ArrayAtIndex:(NSUInteger)index -{ - [memCard2Array removeObjectAtIndex:index]; -} - -- (void)setMemCard2Array:(NSMutableArray *)a -{ - if (memCard2Array != a) { -#if !__has_feature(objc_arc) - [memCard2Array release]; -#endif - memCard2Array = [a mutableCopy]; - } -} - -- (NSArray *)memCard2Array -{ - return [NSArray arrayWithArray:memCard2Array]; -} - - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil; { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; @@ -130,47 +71,10 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha return self; } -- (int)blockCount:(int)card fromIndex:(int)idx -{ - int i = 1; - NSArray *memArray = nil; - if (card == 1) { - memArray = [self memCard1Array]; - } else { - memArray = [self memCard2Array]; - } - - for (i = 1; i <= (MAX_MEMCARD_BLOCKS-idx); i++) { - //Get the mem card +1 from the current card - //And check its attributes - PcsxrMemoryObject *obj = [memArray objectAtIndex:(i + idx)]; - - //GetMcdBlockInfo(mcd, idx+i, &b); - //printf("i=%i, mcd=%i, startblock=%i, diff=%i, flags=%x\n", i, mcd, startblock, (MAX_MEMCARD_BLOCKS-startblock), b.Flags); - if ((obj.memFlags & 0x3) == 0x3) { - return i+1; - } else if ((obj.memFlags & 0x2) == 0x2) { - //i++ - } else { - return i; - } - } - return i; // startblock was the last block so count = 1 -} - - (void)loadMemoryCardInfoForCard:(int)theCard { - NSInteger i; - McdBlock info; - NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:MAX_MEMCARD_BLOCKS]; + PcsxrMemCardArray *newArray = [[PcsxrMemCardArray alloc] initWithMemoryCardNumber:theCard]; - for (i = 0; i < MAX_MEMCARD_BLOCKS; i++) { - GetMcdBlockInfo(theCard, i + 1, &info); - PcsxrMemoryObject *ob = [[PcsxrMemoryObject alloc] initWithMcdBlock:&info]; - - [newArray insertObject:ob atIndex:i]; - RELEASEOBJ(ob); - } if (theCard == 1) { [self setMemCard1Array:newArray]; } else { @@ -202,109 +106,55 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha [[NSNotificationCenter defaultCenter] postNotificationName:memoryAnimateTimerKey object:self]; } -- (int)findFreeMemCardBlockInCard:(int)target_card length:(int)len -{ - int foundcount = 0, i = 0; - - NSArray *cardArray; - if (target_card == 1) { - cardArray = [self memCard1Array]; - }else { - cardArray = [self memCard2Array]; - } - - // search for empty (formatted) blocks first - while (i < MAX_MEMCARD_BLOCKS && foundcount < len) { - PcsxrMemoryObject *obj = [cardArray objectAtIndex:i++]; //&Blocks[target_card][++i]; - if ((obj.memFlags & 0xFF) == 0xA0) { // if A0 but not A1 - foundcount++; - } else if (foundcount >= 1) { // need to find n count consecutive blocks - foundcount = 0; - } else { - //i++; - } - //printf("formatstatus=%x\n", Info->Flags); - } - - if (foundcount == len) - return (i-foundcount); - - // no free formatted slots, try to find a deleted one - foundcount = i = 0; - while (i < MAX_MEMCARD_BLOCKS && foundcount < len) { - PcsxrMemoryObject *obj = [cardArray objectAtIndex:i++]; - if ((obj.memFlags & 0xF0) == 0xA0) { // A2 or A6 f.e. - foundcount++; - } else if (foundcount >= 1) { // need to find n count consecutive blocks - foundcount = 0; - } else { - //i++; - } - //printf("delstatus=%x\n", Info->Flags); - } - - if (foundcount == len) - return (i-foundcount); - - return -1; -} - -- (int)findFreeMemCardBlockInCard:(int)target_card -{ - return [self findFreeMemCardBlockInCard:target_card length:1]; -} - - (IBAction)moveBlock:(id)sender { NSInteger memCardSelect = [sender tag]; NSCollectionView *cardView; NSIndexSet *selection; - int toCard, fromCard, freeSlot; - int count; - int j = 0; - char *str, *source, *destination; + PcsxrMemCardArray *toCard, *fromCard; + int cardnum; if (memCardSelect == 1) { - str = Config.Mcd1; - source = Mcd2Data; - destination = Mcd1Data; cardView = memCard2view; - toCard = 1; - fromCard = 2; + toCard = memCard1Array; + fromCard = memCard2Array; + cardnum = 1; } else { - str = Config.Mcd2; - source = Mcd1Data; - destination = Mcd2Data; cardView = memCard1view; - toCard = 2; - fromCard = 1; + toCard = memCard2Array; + fromCard = memCard1Array; + cardnum = 2; } selection = [cardView selectionIndexes]; if (!selection || [selection count] == 0) { NSBeep(); return; } - NSInteger selectedIndex = [selection firstIndex]; - count = [self blockCount:fromCard fromIndex:selectedIndex]; + int cardSize, freeConsBlocks, availBlocks; - freeSlot = [self findFreeMemCardBlockInCard:toCard length:count]; - if (freeSlot == -1) { - NSRunCriticalAlertPanel(NSLocalizedString(@"No Free Space", nil), NSLocalizedString(@"Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue", nil), nil, nil, nil, count, toCard); + cardSize = [fromCard memorySizeAtIndex:selectedIndex]; + freeConsBlocks = [toCard indexOfFreeBlocksWithSize:cardSize]; + availBlocks = [toCard availableBlocks]; + if (freeConsBlocks == -1 && availBlocks >= cardSize) { + PcsxrMemoryObject *tmpmemobj = [fromCard.memoryArray objectAtIndex:selectedIndex]; + NSInteger copyOK = NSRunInformationalAlertPanel(NSLocalizedString(@"Free Size", nil), NSLocalizedString(@"Memory card %i does not have enough free consecutive blocks.\n\nIn order to copy over \"%@ (%@),\" memory card %i must be compressed. Compressing memory cards will make deleted blocks unrecoverable.\n\nDo you want to continue?", nil), NSLocalizedString(@"Yes", nil), NSLocalizedString(@"No", nil), nil, cardnum, tmpmemobj.englishName, tmpmemobj.sjisName, cardnum == 1 ? 2 : 1); + if (copyOK != NSAlertDefaultReturn) { + return; + } + } else if (cardSize > availBlocks) { + NSRunCriticalAlertPanel(NSLocalizedString(@"No Free Space", nil), NSLocalizedString(@"Memory card %d doesn't have %d free consecutive blocks on it. Please remove some blocks on that card to continue", nil), nil, nil, nil, availBlocks, cardnum); return; } - for (j=0; j < count; j++) { - CopyMemcardData(source, destination, (selectedIndex+j), (freeSlot+j), str); - //printf("count = %i, firstfree=%i, i=%i\n", count, first_free_slot, j); - } + [fromCard moveBlockAtIndex:selectedIndex toMemoryCard:toCard]; - if (toCard == 1) { + if (cardnum == 1) { LoadMcd(1, Config.Mcd1); } else { LoadMcd(2, Config.Mcd2); } - [self loadMemoryCardInfoForCard:toCard]; + [self loadMemoryCardInfoForCard:cardnum]; } - (IBAction)formatCard:(id)sender @@ -323,60 +173,47 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha } } -- (void)deleteMemoryBlockAtSlot:(int)slotnum card:(int)cardNum +- (void)deleteMemoryBlocksAtIndex:(int)slotnum card:(int)cardNum { - int xor = 0, i, j; - char *data, *ptr, *filename; - NSArray *cardArray; - PcsxrMemoryObject *memObject; + PcsxrMemCardArray *cardArray; if (cardNum == 1) { - filename = Config.Mcd1; - data = Mcd1Data; cardArray = [self memCard1Array]; } else { - filename = Config.Mcd2; - data = Mcd2Data; cardArray = [self memCard2Array]; } - memObject = [cardArray objectAtIndex:slotnum]; - unsigned char flags = [memObject memFlags]; - i = slotnum; - i++; - ptr = data + i * 128; - - if ((flags & 0xF0) == 0xA0) { - if ((flags & 0xF) >= 1 && - (flags & 0xF) <= 3) { // deleted - *ptr = 0x50 | (flags & 0xF); - } else return; - } else if ((flags & 0xF0) == 0x50) { // used - *ptr = 0xA0 | (flags & 0xF); - } else { return; } + [cardArray deleteMemoryBlocksAtIndex:slotnum]; +} + +- (IBAction)deleteMemoryObject:(id)sender +{ + PcsxrMemCardArray *curCard; + NSInteger memCardSelect = [sender tag]; + NSIndexSet *selected; + if (memCardSelect == 1) { + curCard = memCard1Array; + selected = [memCard1view selectionIndexes]; + } else { + curCard = memCard2Array; + selected = [memCard2view selectionIndexes]; + } - for (j = 0; j < 127; j++) xor ^= *ptr++; - *ptr = xor; + if (!selected || [selected count] == 0) { + NSBeep(); + return; + } - SaveMcd(filename, data, i * 128, 128); -} + NSInteger selectedIndex = [selected firstIndex]; -- (IBAction)deleteMemoryObject:(id)sender { + PcsxrMemoryObject *tmpObj = [[curCard memoryArray] objectAtIndex:selectedIndex]; + + if (tmpObj.flagNameIndex == memFlagFree) { + NSBeep(); + return; + } + NSInteger deleteOkay = NSRunAlertPanel(NSLocalizedString(@"Delete Block", nil), NSLocalizedString(@"Deleting a block will remove all saved data on that block.\n\nThis cannot be undone.", nil), NSLocalizedString(@"Cancel", nil), NSLocalizedString(@"Delete", nil), nil); if (deleteOkay == NSAlertAlternateReturn) { - NSInteger memCardSelect = [sender tag]; - NSIndexSet *selected; - if (memCardSelect == 1) { - selected = [memCard1view selectionIndexes]; - } else { - selected = [memCard2view selectionIndexes]; - } - - if (!selected || [selected count] == 0) { - NSBeep(); - return; - } - - NSInteger selectedIndex = [selected firstIndex]; - [self deleteMemoryBlockAtSlot:selectedIndex card:memCardSelect]; + [self deleteMemoryBlocksAtIndex:selectedIndex card:memCardSelect]; if (memCardSelect == 1) { LoadMcd(1, Config.Mcd1); @@ -409,42 +246,4 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha SUPERDEALLOC; } -- (BOOL)isMemoryBlockEmptyOnCard:(int)aCard block:(int)aBlock -{ - NSArray *memArray; - PcsxrMemoryObject *obj; - if (aCard == 1) { - memArray = [self memCard1Array]; - } else { - memArray = [self memCard2Array]; - } - obj = [memArray objectAtIndex:aBlock]; -#if 0 - if (([obj memFlags] & 0xF0) != 0x50) - return YES; - - //FIXME: Does this properly handle saves that span more than one block? - if ([[obj englishName] isEqualToString:@""]) { - return YES; - } -#else - if (![obj isNotDeleted]) { - return YES; - } -#endif - - return NO; -} - -- (int)countFreeBlocksOnCard:(int)aCard -{ - int i, count = 0; - for (i = 0; i < MAX_MEMCARD_BLOCKS; i++) { - if ([self isMemoryBlockEmptyOnCard:aCard block:i]) { - count++; - } - } - return count; -} - @end diff --git a/macosx/PcsxrMemoryObject.h b/macosx/PcsxrMemoryObject.h index 1f1bb359..8efbe28a 100755 --- a/macosx/PcsxrMemoryObject.h +++ b/macosx/PcsxrMemoryObject.h @@ -34,25 +34,31 @@ typedef enum _PCSXRMemFlags { NSArray *memImages; NSInteger memImageIndex; - + int startingIndex; + int blockSize; PCSXRMemFlags flagNameIndex; - unsigned char memFlags; } + (NSArray *)imagesFromMcd:(McdBlock *)block; + (NSString*)memoryLabelFromFlag:(PCSXRMemFlags)flagNameIndex; ++ (NSImage *)blankImage; ++ (PCSXRMemFlags)memFlagsFromBlockFlags:(unsigned char)blockFlags; -- (id)initWithMcdBlock:(McdBlock *)infoBlock; +- (id)initWithMcdBlock:(McdBlock *)infoBlockc NS_UNAVAILABLE; +- (id)initWithMcdBlock:(McdBlock *)infoBlockc startingIndex:(int)startIdx; +- (id)initWithMcdBlock:(McdBlock *)infoBlockc startingIndex:(int)startIdx size:(int)memSize; @property (readonly, arcstrong) NSString *englishName; @property (readonly, arcstrong) NSString *sjisName; @property (readonly, arcstrong) NSString *memName; @property (readonly, arcstrong) NSString *memID; @property (readonly) PCSXRMemFlags flagNameIndex; -@property (readonly) unsigned char memFlags; -@property (readonly, unsafe_unretained, nonatomic) NSString *flagName; -@property (readonly, unsafe_unretained, nonatomic) NSAttributedString *attributedFlagName; +@property (readonly) int startingIndex; +@property (readonly) int blockSize; + @property (readonly, unsafe_unretained, nonatomic) NSImage *memImage; @property (readonly, nonatomic) int memIconCount; -@property (readonly, getter = isNotDeleted, nonatomic) BOOL notDeleted DEPRECATED_ATTRIBUTE; +@property (readonly, unsafe_unretained, nonatomic) NSString *flagName; +@property (readonly, unsafe_unretained, nonatomic) NSAttributedString *attributedFlagName; +@property (readonly, nonatomic) BOOL isBiggerThanOne; @end diff --git a/macosx/PcsxrMemoryObject.m b/macosx/PcsxrMemoryObject.m index 0893b238..1a7013e9 100755 --- a/macosx/PcsxrMemoryObject.m +++ b/macosx/PcsxrMemoryObject.m @@ -22,7 +22,9 @@ NSString *const memoryAnimateTimerKey = @"PCSXR Memory Card Image Animate"; @property (readwrite, arcstrong) NSString *sjisName; @property (readwrite, arcstrong) NSString *memName; @property (readwrite, arcstrong) NSString *memID; -@property (readwrite) unsigned char memFlags; +@property (readwrite) int startingIndex; +@property (readwrite) int blockSize; + @property (readwrite, nonatomic) NSInteger memImageIndex; @property (arcstrong) NSArray *memImages; @@ -126,39 +128,60 @@ static NSString *MemLabelEndLink; - (id)initWithMcdBlock:(McdBlock *)infoBlock { - if (self = [super init]) { - self.memFlags = infoBlock->Flags; - if ((infoBlock->Flags & 0xF0) == 0xA0) { - if ((infoBlock->Flags & 0xF) >= 1 && (infoBlock->Flags & 0xF) <= 3) - self.flagNameIndex = memFlagDeleted; - else - self.flagNameIndex = memFlagFree; - } else if ((infoBlock->Flags & 0xF0) == 0x50) { - if ((infoBlock->Flags & 0xF) == 0x1) - self.flagNameIndex = memFlagUsed; - else if ((infoBlock->Flags & 0xF) == 0x2) - self.flagNameIndex = memFlagLink; - else if ((infoBlock->Flags & 0xF) == 0x3) - self.flagNameIndex = memFlagEndLink; - } else - self.flagNameIndex = memFlagFree; + [self doesNotRecognizeSelector:_cmd]; + return nil; +} + +- (id)initWithMcdBlock:(McdBlock *)infoBlock startingIndex:(int)startIdx +{ + return [self initWithMcdBlock:infoBlock startingIndex:startIdx size:1]; +} - if (self.flagNameIndex == memFlagLink || self.flagNameIndex == memFlagEndLink || self.flagNameIndex == memFlagFree) { - //This prevents possible uglies in multi-save images ++ (PCSXRMemFlags)memFlagsFromBlockFlags:(unsigned char)blockFlags +{ + if ((blockFlags & 0xF0) == 0xA0) { + if ((blockFlags & 0xF) >= 1 && (blockFlags & 0xF) <= 3) + return memFlagDeleted; + else + return memFlagFree; + } else if ((blockFlags & 0xF0) == 0x50) { + if ((blockFlags & 0xF) == 0x1) + return memFlagUsed; + else if ((blockFlags & 0xF) == 0x2) + return memFlagLink; + else if ((blockFlags & 0xF) == 0x3) + return memFlagEndLink; + } else + return memFlagFree; + + //Xcode complains unless we do this... +#ifdef DEBUG + NSLog(@"Unknown flag "); +#endif + return memFlagFree; +} + +- (id)initWithMcdBlock:(McdBlock *)infoBlock startingIndex:(int)startIdx size:(int)memSize +{ + if (self = [super init]) { + self.startingIndex = startIdx; + self.blockSize = memSize; + self.flagNameIndex = [PcsxrMemoryObject memFlagsFromBlockFlags:infoBlock->Flags]; + if (self.flagNameIndex == memFlagFree) { self.memImages = @[]; self.memImageIndex = -1; - - if (flagNameIndex != memFlagFree) { - self.englishName = self.sjisName = (flagNameIndex == memFlagLink ? @"Multi-save" : @"Multi-save (end)"); - } else { - self.englishName = self.sjisName = @"Free block"; - } - + self.englishName = self.sjisName = @"Free block"; self.memID = self.memName = @""; } else { self.englishName = @(infoBlock->Title); self.sjisName = [NSString stringWithCString:infoBlock->sTitle encoding:NSShiftJISStringEncoding]; + if ([englishName isEqualToString:sjisName]) { +#ifdef DEBUG + NSLog(@"English name and SJIS name are the same: %@. Replacing the sjis string with the English string.", englishName); +#endif + self.sjisName = self.englishName; + } @autoreleasepool { self.memImages = [PcsxrMemoryObject imagesFromMcd:infoBlock]; } @@ -194,11 +217,12 @@ static NSString *MemLabelEndLink; [self didChangeValueForKey:@"memImage"]; } -@synthesize memFlags; @synthesize memName; @synthesize memID; @synthesize memImages; @synthesize flagNameIndex; +@synthesize blockSize; +@synthesize startingIndex; #pragma mark Non-synthesize Properties - (int)memIconCount @@ -247,12 +271,12 @@ NS_INLINE void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtclr) SetupAttrStr(tmpStr, [NSColor blueColor]); attribMemLabelEndLink = [tmpStr copy]; RELEASEOBJ(tmpStr); - + tmpStr = [[NSMutableAttributedString alloc] initWithString:MemLabelLink]; SetupAttrStr(tmpStr, [NSColor blueColor]); attribMemLabelLink = [tmpStr copy]; RELEASEOBJ(tmpStr); - + tmpStr = [[NSMutableAttributedString alloc] initWithString:MemLabelUsed]; SetupAttrStr(tmpStr, [NSColor controlTextColor]); attribMemLabelUsed = [tmpStr copy]; @@ -272,7 +296,7 @@ NS_INLINE void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtclr) //display nothing attribMemLabelUsed = [[NSAttributedString alloc] initWithString:@""]; #endif - + tmpStr = [[NSMutableAttributedString alloc] initWithString:MemLabelDeleted]; SetupAttrStr(tmpStr, [NSColor redColor]); attribMemLabelDeleted = [tmpStr copy]; @@ -303,12 +327,13 @@ NS_INLINE void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtclr) } } -- (BOOL)isNotDeleted +- (BOOL)isBiggerThanOne { - if (self.flagNameIndex == memFlagFree || self.flagNameIndex == memFlagDeleted) { - return NO; - } else { + if (flagNameIndex == memFlagFree) { + //Always show the size of the free blocks return YES; + } else { + return blockSize != 1; } } @@ -330,7 +355,7 @@ NS_INLINE void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtclr) - (NSString *)description { - return [NSString stringWithFormat:@"%@ (%@): Name: %@ ID: %@ Flags: %d", englishName, sjisName, memName, memID, memFlags]; + return [NSString stringWithFormat:@"%@ (%@): Name: %@ ID: %@, type: %@ start: %i size: %i", englishName, sjisName, memName, memID, self.flagName, startingIndex, blockSize]; } @end |
