Cocoa Port: Continue refactoring the cheat system code, Part IV.

- Add the following C++ classes: ClientCheatSearcher, ClientCheatDatabase
- Remove the following Obj-C classes: CocoaDSCheatSearch, CocoaDSCheatSearchParams
- Remove duplicate GUI code from EmuControllerDelegate.mm and preferencesWindowDelegate.mm
- All basic functionality for managing game session cheat items, the cheat database list, and cheat search are now managed through CocoaDSCheatManager.
This commit is contained in:
rogerman 2023-07-07 19:31:26 -07:00
parent d00e6355da
commit 12347c7cd9
10 changed files with 830 additions and 835 deletions

View File

@ -28,18 +28,32 @@ class ClientCheatManager;
enum CheatType
{
CheatType_Internal = 0,
CheatType_Internal = 0,
CheatType_ActionReplay = 1,
CheatType_CodeBreaker = 2
CheatType_CodeBreaker = 2
};
enum CheatFreezeType
{
CheatFreezeType_Normal = 0,
CheatFreezeType_Normal = 0,
CheatFreezeType_CanDecrease = 1,
CheatFreezeType_CanIncrease = 2
};
enum CheatSearchStyle
{
CheatSearchStyle_ExactValue = 0,
CheatSearchStyle_Comparative = 1
};
enum CheatSearchCompareStyle
{
CheatSearchCompareStyle_GreaterThan = 0,
CheatSearchCompareStyle_LesserThan = 1,
CheatSearchCompareStyle_Equals = 2,
CheatSearchCompareStyle_NotEquals = 3
};
enum CheatSystemError
{
CheatSystemError_NoError = 0,
@ -50,6 +64,20 @@ enum CheatSystemError
CheatSystemError_FileSaveFailed = 5
};
union DesmumeCheatSearchItem
{
uint64_t data;
struct
{
uint32_t address;
uint32_t value;
};
};
typedef union DesmumeCheatSearchItem DesmumeCheatSearchItem;
typedef std::vector<DesmumeCheatSearchItem> DesmumeCheatSearchResultsList;
class ClientCheatItem
{
protected:
@ -161,18 +189,58 @@ public:
void CopyListToEngine(const bool willApplyOnlyEnabledItems, CHEATS *engineCheatList);
};
class ClientCheatSearcher
{
protected:
CHEATSEARCH *_desmumeSearcher;
uint8_t _searchValueLength;
size_t _resultsCount;
bool _didSearchStart;
DesmumeCheatSearchResultsList _resultsList;
public:
ClientCheatSearcher();
~ClientCheatSearcher();
bool DidStart() const;
void Reset();
size_t SearchExactValue(uint32_t value, uint8_t valueLength, bool performSignedSearch);
size_t SearchComparative(CheatSearchCompareStyle compareStyle, uint8_t valueLength, bool performSignedSearch);
const DesmumeCheatSearchResultsList& RefreshResults();
const DesmumeCheatSearchResultsList& GetResults();
size_t GetResultCount() const;
};
class ClientCheatDatabase
{
protected:
ClientCheatList *_list;
std::string _title;
std::string _date;
std::string _lastFilePath;
public:
ClientCheatDatabase();
~ClientCheatDatabase();
ClientCheatList* GetList() const;
ClientCheatList* LoadFromFile(const char *dbFilePath);
const char* GetTitle() const;
const char* GetDate() const;
};
class ClientCheatManager
{
protected:
ClientCheatList *_workingList;
ClientCheatList *_databaseList;
ClientCheatList *_currentSessionList;
ClientCheatDatabase *_currentDatabase;
ClientCheatSearcher *_currentSearcher;
ClientCheatItem *_selectedItem;
size_t _selectedItemIndex;
uint32_t _untitledCount;
std::string _databaseTitle;
std::string _databaseDate;
std::string _lastFilePath;
std::string _currentSessionLastFilePath;
bool _masterNeedsUpdate;
@ -183,19 +251,11 @@ public:
static CHEATS* GetMaster();
static void SetMaster(const CHEATS *masterCheats);
ClientCheatList* GetWorkingList() const;
ClientCheatList* GetDatabaseList() const;
ClientCheatList* GetSessionList() const;
const char* GetSessionListLastFilePath() const;
const char* GetDatabaseTitle() const;
void SetDatabaseTitle(const char *dbTitle);
const char* GetDatabaseDate() const;
void SetDatabaseDate(const char *dbDate);
const char* GetLastFilePath() const;
virtual CheatSystemError LoadFromFile(const char *filePath);
virtual CheatSystemError SaveToFile(const char *filePath);
virtual CheatSystemError SessionListLoadFromFile(const char *filePath);
virtual CheatSystemError SessionListSaveToFile(const char *filePath);
ClientCheatItem* SetSelectedItemByIndex(size_t index);
@ -212,12 +272,23 @@ public:
size_t GetTotalCheatCount() const;
size_t GetActiveCheatCount() const;
ClientCheatList* LoadFromDatabase(const char *dbFilePath);
void LoadFromMaster();
void ApplyToMaster();
void MasterNeedsUpdate();
ClientCheatList* GetDatabaseList() const;
ClientCheatList* DatabaseListLoadFromFile(const char *dbFilePath);
const char* GetDatabaseTitle() const;
const char* GetDatabaseDate() const;
bool SearchDidStart() const;
void SearchReset();
size_t SearchExactValue(uint32_t value, uint8_t valueLength, bool performSignedSearch);
size_t SearchComparative(CheatSearchCompareStyle compareStyle, uint8_t valueLength, bool performSignedSearch);
const DesmumeCheatSearchResultsList& SearchResultsRefresh();
const DesmumeCheatSearchResultsList& GetSearchResults();
size_t GetSearchResultCount() const;
void ApplyInternalCheatAtIndex(size_t index);
static void ApplyInternalCheatWithItem(const ClientCheatItem *cheatItem);
static void ApplyInternalCheatWithParams(uint32_t targetAddress, uint32_t newValue, size_t newValueLength);
@ -275,68 +346,43 @@ public:
@interface CocoaDSCheatManager : NSObject
{
ClientCheatManager *_internalCheatManager;
NSMutableArray *list;
NSMutableArray *sessionList;
NSMutableArray *databaseList;
NSMutableArray *searchResultsList;
pthread_rwlock_t *rwlockCoreExecute;
}
@property (readonly, nonatomic, getter=internalManager) ClientCheatManager *_internalCheatManager;
@property (readonly) NSMutableArray *list;
@property (assign, nonatomic) NSString *dbTitle;
@property (assign, nonatomic) NSString *dbDate;
@property (readonly) NSMutableArray *sessionList;
@property (readonly, nonatomic) NSUInteger itemTotalCount;
@property (readonly, nonatomic) NSUInteger itemActiveCount;
@property (readonly) NSMutableArray *databaseList;
@property (readonly, nonatomic) NSString *databaseTitle;
@property (readonly, nonatomic) NSString *databaseDate;
@property (readonly) NSMutableArray *searchResultsList;
@property (readonly, nonatomic) BOOL searchDidStart;
@property (readonly, nonatomic) NSUInteger searchCount;
@property (assign, nonatomic) pthread_rwlock_t *rwlockCoreExecute;
- (id) initWithFileURL:(NSURL *)fileURL;
- (CocoaDSCheatItem *) newItem;
- (BOOL) addExistingItem:(CocoaDSCheatItem *)cheatItem;
- (void) remove:(CocoaDSCheatItem *)cheatItem;
- (BOOL) update:(CocoaDSCheatItem *)cheatItem;
- (CocoaDSCheatItem *) addExistingItem:(ClientCheatItem *)cheatItem;
- (CocoaDSCheatItem *) addExistingCocoaItem:(CocoaDSCheatItem *)cocoaCheatItem;
- (void) remove:(CocoaDSCheatItem *)cocoaCheatItem;
- (void) removeAtIndex:(NSUInteger)itemIndex;
- (BOOL) update:(CocoaDSCheatItem *)cocoaCheatItem;
- (BOOL) save;
- (NSUInteger) activeCount;
- (NSMutableArray *) cheatListFromDatabase:(NSURL *)fileURL errorCode:(NSInteger *)error;
- (void) applyInternalCheat:(CocoaDSCheatItem *)cheatItem;
- (void) applyInternalCheat:(CocoaDSCheatItem *)cocoaCheatItem;
- (void) loadFromMaster;
- (void) applyToMaster;
+ (NSMutableArray *) cheatListWithClientListObject:(ClientCheatList *)cheatList;
@end
@interface CocoaDSCheatSearch : NSObject
{
CHEATSEARCH *listData;
NSMutableArray *addressList;
pthread_rwlock_t *rwlockCoreExecute;
BOOL isUsingDummyRWlock;
NSUInteger searchCount;
}
@property (readonly) CHEATSEARCH *listData;
@property (readonly) NSMutableArray *addressList;
@property (assign) pthread_rwlock_t *rwlockCoreExecute;
@property (readonly) NSUInteger searchCount;
- (NSMutableArray *) cheatListFromDatabase:(NSURL *)fileURL errorCode:(NSInteger *)error;
- (NSUInteger) databaseAddSelected;
- (NSUInteger) runExactValueSearch:(NSInteger)value byteSize:(UInt8)byteSize signType:(NSInteger)signType;
- (void) runExactValueSearchOnThread:(id)object;
- (NSUInteger) runComparativeSearch:(NSInteger)typeID byteSize:(UInt8)byteSize signType:(NSInteger)signType;
- (void) runComparativeSearchOnThread:(id)object;
- (void) reset;
+ (NSMutableArray *) addressListWithListObject:(CHEATSEARCH *)addressList maxItems:(NSUInteger)maxItemCount;
@end
@interface CocoaDSCheatSearchParams : NSObject
{
NSInteger comparativeSearchType;
NSInteger value;
UInt8 byteSize;
NSInteger signType;
}
@property (assign) NSInteger comparativeSearchType;
@property (assign) NSInteger value;
@property (assign) UInt8 byteSize;
@property (assign) NSInteger signType;
- (void) searchReset;
@end

File diff suppressed because it is too large Load Diff

View File

@ -167,6 +167,7 @@ volatile bool execute = true;
pthread_attr_destroy(&threadAttr);
[cdsGPU setOutputList:cdsOutputList rwlock:&threadParam.rwlockOutputList];
[cdsCheatManager setRwlockCoreExecute:&threadParam.rwlockCoreExecute];
macOS_driver *newDriver = new macOS_driver;
newDriver->SetCoreThreadMutexLock(&threadParam.mutexThreadExecute);

View File

@ -1191,34 +1191,31 @@ void UpdateDisplayPropertiesFromStates(uint64_t displayModeStates, ClientDisplay
// state on an existing cheat, so be sure to account for both cases.
// First check if the cheat exists.
CocoaDSCheatItem *cheatItem = (CocoaDSCheatItem *)[addedCheatsDict objectForKey:code];
CocoaDSCheatItem *cocoaCheatItem = (CocoaDSCheatItem *)[addedCheatsDict objectForKey:code];
if (cheatItem == nil)
if (cocoaCheatItem == nil)
{
// If the cheat doesn't already exist, then create a new one and add it.
cheatItem = [[[CocoaDSCheatItem alloc] init] autorelease];
[cheatItem setCheatType:CHEAT_TYPE_ACTION_REPLAY]; // Default to Action Replay for now
[cheatItem setFreezeType:0];
[cheatItem setDescription:@""]; // OpenEmu takes care of this
[cheatItem setCode:code];
[cheatItem setMemAddress:0x00000000]; // UNUSED
[cheatItem setBytes:1]; // UNUSED
[cheatItem setValue:0]; // UNUSED
ClientCheatItem *newCheatItem = new ClientCheatItem;
newCheatItem->SetType(CheatType_ActionReplay); // Default to Action Replay for now
newCheatItem->SetFreezeType(CheatFreezeType_Normal);
newCheatItem->SetDescription(NULL); // OpenEmu takes care of this
newCheatItem->SetRawCodeString([code cStringUsingEncoding:NSUTF8StringEncoding], true);
newCheatItem->SetEnabled((enabled) ? true : false);
[cheatItem setEnabled:enabled];
[[self cdsCheats] addExistingItem:cheatItem];
cocoaCheatItem = [[self cdsCheats] addExistingItem:newCheatItem];
// OpenEmu doesn't currently save cheats per game, so assume that the
// cheat list is short and that code strings are unique. This allows
// us to get away with simply saving the cheat code string and hashing
// for it later.
[addedCheatsDict setObject:cheatItem forKey:code];
[addedCheatsDict setObject:cocoaCheatItem forKey:code];
}
else
{
// If the cheat does exist, then just set its enable state.
[cheatItem setEnabled:enabled];
[[self cdsCheats] update:cheatItem];
[cocoaCheatItem setEnabled:enabled];
[[self cdsCheats] update:cocoaCheatItem];
}
}

View File

@ -18129,10 +18129,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
<nil key="NSUserInterfaceItemIdentifier"/>
<string key="NSWindowContentMaxSize">{10000, 10000}</string>
<string key="NSWindowContentMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
<string key="NSWindowContentMinSize">{640, 480}</string>
<object class="NSView" key="NSWindowView" id="667010674">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSScrollView" id="1011480808">
@ -18148,7 +18148,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{270, 335}</string>
<reference key="NSSuperview" ref="1055577013"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<bool key="NSControlAllowsExpansionToolTips">YES</bool>
@ -18157,7 +18156,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{270, 17}</string>
<reference key="NSSuperview" ref="584243960"/>
<reference key="NSWindow"/>
<reference key="NSTableView" ref="894702591"/>
</object>
<object class="_NSCornerView" key="NSCornerView">
@ -18275,7 +18273,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 17}, {270, 335}}</string>
<reference key="NSSuperview" ref="1011480808"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="894702591"/>
<reference key="NSDocView" ref="894702591"/>
<reference key="NSBGColor" ref="856317944"/>
@ -18289,7 +18286,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 0}, {270, 17}}</string>
<reference key="NSSuperview" ref="1011480808"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="716353213"/>
<reference key="NSDocView" ref="716353213"/>
</object>
@ -18298,7 +18294,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{256, 17}, {15, 306}}</string>
<reference key="NSSuperview" ref="1011480808"/>
<reference key="NSWindow"/>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="1011480808"/>
<string key="NSAction">_doScroller:</string>
@ -18309,7 +18304,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{1, 323}, {270, 15}}</string>
<reference key="NSSuperview" ref="1011480808"/>
<reference key="NSWindow"/>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="1011480808"/>
@ -18319,7 +18313,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{20, 49}, {272, 353}}</string>
<reference key="NSSuperview" ref="667010674"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1055577013"/>
<int key="NSsFlags">133682</int>
<reference key="NSVScroller" ref="744012231"/>
@ -18336,7 +18329,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">292</int>
<string key="NSFrame">{{113, 12}, {185, 32}}</string>
<reference key="NSSuperview" ref="667010674"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="193441988">
<int key="NSCellFlags">67108864</int>
@ -18358,7 +18350,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">292</int>
<string key="NSFrame">{{47, 19}, {28, 23}}</string>
<reference key="NSSuperview" ref="667010674"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="694582833">
<int key="NSCellFlags">-2080374784</int>
@ -18384,7 +18375,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 19}, {28, 23}}</string>
<reference key="NSSuperview" ref="667010674"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="349665005">
<int key="NSCellFlags">-2080374784</int>
@ -18418,7 +18408,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{100, 372}, {209, 26}}</string>
<reference key="NSSuperview" ref="880513976"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="252559910">
<int key="NSCellFlags">-2076180416</int>
@ -18483,7 +18472,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">272</int>
<string key="NSFrame">{{2, 32}, {320, 274}}</string>
<reference key="NSSuperview" ref="880513976"/>
<reference key="NSWindow"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSButton" id="1044249996">
@ -18491,7 +18479,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{16, 402}, {130, 18}}</string>
<reference key="NSSuperview" ref="880513976"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="471706675">
<int key="NSCellFlags">67108864</int>
@ -18515,7 +18502,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 378}, {83, 17}}</string>
<reference key="NSSuperview" ref="880513976"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="5206494">
<int key="NSCellFlags">68157504</int>
@ -18534,7 +18520,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">12</int>
<string key="NSFrame">{{14, 303}, {292, 5}}</string>
<reference key="NSSuperview" ref="880513976"/>
<reference key="NSWindow"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
@ -18554,7 +18539,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{103, 313}, {203, 57}}</string>
<reference key="NSSuperview" ref="880513976"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="559465196">
<int key="NSCellFlags">-1805647871</int>
@ -18574,7 +18558,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 353}, {83, 17}}</string>
<reference key="NSSuperview" ref="880513976"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="895191486">
<int key="NSCellFlags">68157504</int>
@ -18593,7 +18576,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">292</int>
<string key="NSFrame">{{114, 3}, {96, 32}}</string>
<reference key="NSSuperview" ref="880513976"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="27100057">
<int key="NSCellFlags">67108864</int>
@ -18613,12 +18595,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 1}, {324, 428}}</string>
<reference key="NSSuperview" ref="253817892"/>
<reference key="NSWindow"/>
</object>
</array>
<string key="NSFrame">{{297, 16}, {326, 444}}</string>
<reference key="NSSuperview" ref="667010674"/>
<reference key="NSWindow"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
@ -18639,7 +18619,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{76, 408}, {190, 18}}</string>
<reference key="NSSuperview" ref="667010674"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="702020116">
<int key="NSCellFlags">-2080374784</int>
@ -18674,7 +18653,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</set>
<string key="NSFrame">{{20, 410}, {50, 50}}</string>
<reference key="NSSuperview" ref="667010674"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="40753569">
<int key="NSCellFlags">134217728</int>
@ -18693,7 +18671,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{75, 432}, {168, 28}}</string>
<reference key="NSSuperview" ref="667010674"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="586903524">
<int key="NSCellFlags">69206017</int>
@ -18712,18 +18689,15 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{29, 419}, {32, 32}}</string>
<reference key="NSSuperview" ref="667010674"/>
<reference key="NSWindow"/>
<int key="NSpiFlags">28682</int>
<double key="NSMaxValue">100</double>
</object>
</array>
<string key="NSFrameSize">{640, 480}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1920, 1177}}</string>
<string key="NSMinSize">{640, 502}</string>
<string key="NSMaxSize">{10000, 10022}</string>
<string key="NSMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
<string key="NSFrameAutosaveName">CheatManagerWindow</string>
<bool key="NSWindowIsRestorable">YES</bool>
</object>
@ -18731,7 +18705,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="NSClassName">CheatWindowDelegate</string>
</object>
<object class="NSCustomView" id="653859410">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTextField" id="399602544">
@ -18739,7 +18713,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">292</int>
<string key="NSFrame">{{17, 4}, {294, 14}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="985033608">
<int key="NSCellFlags">68157504</int>
@ -18762,7 +18735,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">1292</int>
<string key="NSFrame">{{214, 220}, {16, 16}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<int key="NSpiFlags">28938</int>
<double key="NSMaxValue">100</double>
</object>
@ -18771,7 +18743,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{133, 369}, {136, 22}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="825069250">
<int key="NSCellFlags">-2076180416</int>
@ -18827,7 +18798,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{45, 374}, {86, 14}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="260875644">
<int key="NSCellFlags">68157504</int>
@ -18846,7 +18816,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{45, 398}, {86, 14}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="242082681">
<int key="NSCellFlags">68157504</int>
@ -18865,7 +18834,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{133, 393}, {136, 22}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="23677458">
<int key="NSCellFlags">-2076180416</int>
@ -18922,7 +18890,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{0, 237}, {328, 134}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSButton" id="493042311">
@ -18930,7 +18897,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{233, 213}, {80, 28}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="570153276">
<int key="NSCellFlags">67108864</int>
@ -18952,7 +18918,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{59, 222}, {150, 14}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="38661384">
<int key="NSCellFlags">68157504</int>
@ -18972,7 +18937,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 222}, {45, 14}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="717962612">
<int key="NSCellFlags">68157504</int>
@ -18999,7 +18963,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{286, 176}</string>
<reference key="NSSuperview" ref="381081269"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<bool key="NSControlAllowsExpansionToolTips">YES</bool>
@ -19008,7 +18971,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{286, 17}</string>
<reference key="NSSuperview" ref="872327306"/>
<reference key="NSWindow"/>
<reference key="NSTableView" ref="1001428622"/>
</object>
<object class="_NSCornerView" key="NSCornerView">
@ -19090,7 +19052,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 17}, {286, 176}}</string>
<reference key="NSSuperview" ref="502150128"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1001428622"/>
<reference key="NSDocView" ref="1001428622"/>
<reference key="NSBGColor" ref="856317944"/>
@ -19104,7 +19065,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 0}, {286, 17}}</string>
<reference key="NSSuperview" ref="502150128"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="833610819"/>
<reference key="NSDocView" ref="833610819"/>
</object>
@ -19113,7 +19073,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
<reference key="NSSuperview" ref="502150128"/>
<reference key="NSWindow"/>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="502150128"/>
<string key="NSAction">_doScroller:</string>
@ -19124,7 +19083,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{1, 294}, {338, 15}}</string>
<reference key="NSSuperview" ref="502150128"/>
<reference key="NSWindow"/>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="502150128"/>
@ -19134,7 +19092,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{20, 20}, {288, 194}}</string>
<reference key="NSSuperview" ref="653859410"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="381081269"/>
<int key="NSsFlags">133682</int>
<reference key="NSVScroller" ref="116802186"/>
@ -19148,8 +19105,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</object>
</array>
<string key="NSFrameSize">{328, 434}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSDrawer" id="22830540">
@ -19175,7 +19130,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="NSWindowContentMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
<string key="NSWindowContentMinSize">{500, 272}</string>
<object class="NSView" key="NSWindowView" id="353538986">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSScrollView" id="740354183">
@ -19191,7 +19146,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{500, 287}</string>
<reference key="NSSuperview" ref="979497021"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<bool key="NSControlAllowsExpansionToolTips">YES</bool>
@ -19200,7 +19154,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{500, 17}</string>
<reference key="NSSuperview" ref="621690129"/>
<reference key="NSWindow"/>
<reference key="NSTableView" ref="471622593"/>
</object>
<object class="_NSCornerView" key="NSCornerView">
@ -19288,7 +19241,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 17}, {500, 287}}</string>
<reference key="NSSuperview" ref="740354183"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="471622593"/>
<reference key="NSDocView" ref="471622593"/>
<reference key="NSBGColor" ref="856317944"/>
@ -19299,7 +19251,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
<reference key="NSSuperview" ref="740354183"/>
<reference key="NSWindow"/>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="740354183"/>
<string key="NSAction">_doScroller:</string>
@ -19310,7 +19261,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{1, 249}, {568, 15}}</string>
<reference key="NSSuperview" ref="740354183"/>
<reference key="NSWindow"/>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="740354183"/>
@ -19325,14 +19275,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 0}, {500, 17}}</string>
<reference key="NSSuperview" ref="740354183"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="882670721"/>
<reference key="NSDocView" ref="882670721"/>
</object>
</array>
<string key="NSFrame">{{-1, 57}, {502, 305}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="979497021"/>
<int key="NSsFlags">133682</int>
<reference key="NSVScroller" ref="537392378"/>
@ -19349,7 +19297,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 370}, {125, 14}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="130101551">
<int key="NSCellFlags">68157504</int>
@ -19368,7 +19315,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 392}, {68, 14}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="598451249">
<int key="NSCellFlags">68157504</int>
@ -19387,7 +19333,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">292</int>
<string key="NSFrame">{{14, 12}, {114, 32}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="753942431">
<int key="NSCellFlags">67108864</int>
@ -19409,7 +19354,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">292</int>
<string key="NSFrame">{{128, 12}, {114, 32}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="505105353">
<int key="NSCellFlags">67108864</int>
@ -19431,7 +19375,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">289</int>
<string key="NSFrame">{{390, 12}, {96, 32}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<int key="NSTag">1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="916129418">
@ -19454,7 +19397,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">289</int>
<string key="NSFrame">{{294, 12}, {96, 32}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="1008167590">
<int key="NSCellFlags">67108864</int>
@ -19476,7 +19418,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">265</int>
<string key="NSFrame">{{372, 370}, {48, 14}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="423886330">
<int key="NSCellFlags">68157504</int>
@ -19495,7 +19436,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{144, 370}, {232, 14}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="168969464">
<int key="NSCellFlags">70254657</int>
@ -19515,7 +19455,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">265</int>
<string key="NSFrame">{{422, 370}, {61, 14}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="299520343">
<int key="NSCellFlags">70254657</int>
@ -19535,7 +19474,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{87, 392}, {396, 14}}</string>
<reference key="NSSuperview" ref="353538986"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1055682485">
<int key="NSCellFlags">70254657</int>
@ -19552,8 +19490,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</object>
</array>
<string key="NSFrameSize">{500, 416}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1920, 1177}}</string>
<string key="NSMinSize">{500, 294}</string>
@ -19561,7 +19497,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<bool key="NSWindowIsRestorable">YES</bool>
</object>
<object class="NSCustomView" id="531093625">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="752124485">
@ -19569,7 +19505,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{233, 54}, {80, 28}}</string>
<reference key="NSSuperview" ref="531093625"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="19450435">
<int key="NSCellFlags">67108864</int>
@ -19591,7 +19526,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{20, 59}, {210, 19}}</string>
<reference key="NSSuperview" ref="531093625"/>
<reference key="NSWindow"/>
<bool key="NSViewIsLayerTreeHost">YES</bool>
<bool key="NSEnabled">YES</bool>
<object class="NSSearchFieldCell" key="NSCell" id="910542123">
@ -19646,7 +19580,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 86}, {294, 14}}</string>
<reference key="NSSuperview" ref="531093625"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="457648173">
<int key="NSCellFlags">67108864</int>
@ -19665,7 +19598,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 100}, {294, 14}}</string>
<reference key="NSSuperview" ref="531093625"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="125683977">
<int key="NSCellFlags">67108864</int>
@ -19681,8 +19613,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</object>
</array>
<string key="NSFrameSize">{328, 134}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="285216239">
@ -19882,7 +19812,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="306344915">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">272</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="857718893">
@ -19890,7 +19820,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{197, 175}, {109, 32}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="135944944">
<int key="NSCellFlags">67108864</int>
@ -19912,7 +19841,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">292</int>
<string key="NSFrame">{{17, 7}, {286, 42}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="129743229">
<int key="NSCellFlags">67108864</int>
@ -19931,7 +19859,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 246}, {128, 17}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="956303325">
<int key="NSCellFlags">68157504</int>
@ -19950,7 +19877,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{149, 241}, {27, 27}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="107511138">
<int key="NSCellFlags">-2080374784</int>
@ -19973,7 +19899,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{79, 214}, {38, 17}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="245978693">
<int key="NSCellFlags">68157504</int>
@ -19996,7 +19921,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{67, 182}, {128, 22}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="528979890">
<int key="NSCellFlags">-1804599231</int>
@ -20054,7 +19978,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 185}, {45, 17}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="64587549">
<int key="NSCellFlags">68157504</int>
@ -20073,7 +19996,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{118, 212}, {77, 22}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="219872989">
<int key="NSCellFlags">-1804599231</int>
@ -20093,7 +20015,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 215}, {60, 17}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="771067014">
<int key="NSCellFlags">68157504</int>
@ -20120,7 +20041,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{18, 14}, {190, 78}}</string>
<reference key="NSSuperview" ref="690888117"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSNumRows">4</int>
@ -20388,12 +20308,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 1}, {226, 102}}</string>
<reference key="NSSuperview" ref="224000982"/>
<reference key="NSWindow"/>
</object>
</array>
<string key="NSFrame">{{46, 56}, {228, 118}}</string>
<reference key="NSSuperview" ref="306344915"/>
<reference key="NSWindow"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
@ -20411,12 +20329,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</object>
</array>
<string key="NSFrameSize">{320, 274}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="439595996">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">272</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSScrollView" id="332554094">
@ -20451,7 +20367,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</set>
<string key="NSFrameSize">{278, 226}</string>
<reference key="NSSuperview" ref="612858975"/>
<reference key="NSWindow"/>
<object class="NSTextContainer" key="NSTextContainer" id="848187789">
<object class="NSLayoutManager" key="NSLayoutManager">
<object class="NSTextStorage" key="NSTextStorage">
@ -20503,7 +20418,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 1}, {278, 226}}</string>
<reference key="NSSuperview" ref="332554094"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="612136785"/>
<reference key="NSDocView" ref="612136785"/>
<reference key="NSBGColor" ref="991462592"/>
@ -20515,7 +20429,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{263, 1}, {16, 225.890625}}</string>
<reference key="NSSuperview" ref="332554094"/>
<reference key="NSWindow"/>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="332554094"/>
<string key="NSAction">_doScroller:</string>
@ -20526,7 +20439,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {87, 18}}</string>
<reference key="NSSuperview" ref="332554094"/>
<reference key="NSWindow"/>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="332554094"/>
@ -20537,7 +20449,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{20, 15}, {280, 228}}</string>
<reference key="NSSuperview" ref="439595996"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="612858975"/>
<int key="NSsFlags">133650</int>
<reference key="NSVScroller" ref="662113178"/>
@ -20552,7 +20463,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 249}, {138, 17}}</string>
<reference key="NSSuperview" ref="439595996"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="924249429">
<int key="NSCellFlags">68157504</int>
@ -20568,12 +20478,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</object>
</array>
<string key="NSFrameSize">{320, 274}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="970420241">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">301</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSImageView" id="928113865">
@ -20592,7 +20500,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</set>
<string key="NSFrame">{{101, 117}, {128, 128}}</string>
<reference key="NSSuperview" ref="970420241"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="871279379">
<int key="NSCellFlags">134217728</int>
@ -20614,7 +20521,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 19}, {286, 72}}</string>
<reference key="NSSuperview" ref="970420241"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="167903530">
<int key="NSCellFlags">67108864</int>
@ -20634,8 +20540,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</object>
</array>
<string key="NSFrameSize">{320, 274}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSWindowTemplate" id="818104650">
@ -42604,7 +42508,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<array class="NSMutableArray" key="NSDeclaredKeys">
<string>hasSelection</string>
<string>hasItems</string>
<string>cheatList</string>
<string>cheatWindowDelegateKey</string>
<string>cheatSearchStyle</string>
<string>cheatSearchSignType</string>
<string>cheatSearchSearchValue</string>
@ -84366,7 +84270,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="3488.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="3488.IBWindowTemplateEditedContentRect">{{493, 199}, {640, 480}}</string>
<boolean value="NO" key="3488.NSWindowTemplate.visibleAtLaunch"/>
<boolean value="YES" key="3488.windowTemplate.hasMaxSize"/>
<boolean value="NO" key="3488.windowTemplate.hasMaxSize"/>
<boolean value="YES" key="3488.windowTemplate.hasMinSize"/>
<string key="3488.windowTemplate.maxSize">{10000, 10000}</string>
<string key="3488.windowTemplate.minSize">{640, 480}</string>
@ -87361,7 +87265,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</object>
</dictionary>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="actionReplayCodeEditorView">NSTextView</string>
<string key="cheatConfigBox">NSBox</string>
<string key="cheatDatabaseController">NSArrayController</string>
<string key="cheatDatabaseSheet">NSWindow</string>
@ -87384,10 +87287,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="window">NSWindow</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="actionReplayCodeEditorView">
<string key="name">actionReplayCodeEditorView</string>
<string key="candidateClassName">NSTextView</string>
</object>
<object class="IBToOneOutletInfo" key="cheatConfigBox">
<string key="name">cheatConfigBox</string>
<string key="candidateClassName">NSBox</string>

View File

@ -1933,73 +1933,7 @@
// If the ROM has an associated cheat file, load it now.
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
CocoaDSCheatManager *newCheatList = [cdsCore cdsCheatManager];
if (newCheatList != nil)
{
[newCheatList loadFromMaster];
NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content];
[cheatListController setContent:[newCheatList list]];
[cheatWindowBindings setValue:newCheatList forKey:@"cheatList"];
NSString *filePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"R4Cheat_DatabasePath"];
if (filePath != nil)
{
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
NSInteger error = 0;
NSMutableArray *dbList = [newCheatList cheatListFromDatabase:fileURL errorCode:&error];
if (dbList != nil)
{
[cheatDatabaseController setContent:dbList];
NSString *titleString = [newCheatList dbTitle];
NSString *dateString = [newCheatList dbDate];
[cheatWindowBindings setValue:titleString forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:dateString forKey:@"cheatDBDate"];
[cheatWindowBindings setValue:[NSString stringWithFormat:@"%ld", (unsigned long)[dbList count]] forKey:@"cheatDBItemCount"];
}
else
{
[cheatWindowBindings setValue:@"---" forKey:@"cheatDBItemCount"];
switch (error)
{
case CHEATEXPORT_ERROR_FILE_NOT_FOUND:
NSLog(@"R4 Cheat Database read failed! Could not load the database file!");
[cheatWindowBindings setValue:@"Database not loaded." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"CANNOT LOAD FILE" forKey:@"cheatDBDate"];
break;
case CHEATEXPORT_ERROR_WRONG_FILE_FORMAT:
NSLog(@"R4 Cheat Database read failed! Wrong file format!");
[cheatWindowBindings setValue:@"Database load error." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"FAILED TO LOAD FILE" forKey:@"cheatDBDate"];
break;
case CHEATEXPORT_ERROR_SERIAL_NOT_FOUND:
NSLog(@"R4 Cheat Database read failed! Could not find the serial number for this game in the database!");
[cheatWindowBindings setValue:@"ROM not found in database." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"ROM not found." forKey:@"cheatDBDate"];
break;
case CHEATEXPORT_ERROR_EXPORT_FAILED:
NSLog(@"R4 Cheat Database read failed! Could not read the database file!");
[cheatWindowBindings setValue:@"Database read error." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"CANNOT READ FILE" forKey:@"cheatDBDate"];
break;
default:
break;
}
}
}
[cheatWindowDelegate setCdsCheats:newCheatList];
[[cheatWindowDelegate cdsCheatSearch] setRwlockCoreExecute:[cdsCore rwlockCoreExecute]];
[cheatWindowDelegate setCheatSearchViewByStyle:CHEATSEARCH_SEARCHSTYLE_EXACT_VALUE];
}
[cheatWindowDelegate cheatSystemStart:[cdsCore cdsCheatManager]];
// Add the last loaded ROM to the Recent ROMs list.
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[theRom fileURL]];
@ -2053,22 +1987,11 @@
[[windowController window] displayIfNeeded];
}
// Save the ROM's cheat list before unloading.
[[cdsCore cdsCheatManager] save];
[cheatWindowDelegate cheatSystemEnd];
// Update the UI to indicate that the ROM has started the process of unloading.
[self setStatusText:NSSTRING_STATUS_ROM_UNLOADING];
[romInfoPanelController setContent:[CocoaDSRom romNotLoadedBindings]];
[cheatListController setContent:nil];
[cheatWindowDelegate resetSearch:nil];
[cheatWindowDelegate setCdsCheats:nil];
[cheatDatabaseController setContent:nil];
NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content];
[cheatWindowBindings setValue:@"No ROM loaded." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"No ROM loaded." forKey:@"cheatDBDate"];
[cheatWindowBindings setValue:@"---" forKey:@"cheatDBItemCount"];
[cheatWindowBindings setValue:nil forKey:@"cheatList"];
// Unload the ROM.
if (![cdsCore emuFlagUseExternalBios] || ![cdsCore emuFlagUseExternalFirmware])

View File

@ -21,7 +21,6 @@
@class CocoaDSCheatItem;
@class CocoaDSCheatManager;
@class CocoaDSCheatSearch;
@class CocoaDSCheatSearchParams;
#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
@ -62,7 +61,6 @@
NSMutableDictionary *bindings;
CocoaDSCheatItem *workingCheat;
CocoaDSCheatManager *cdsCheats;
CocoaDSCheatSearch *cdsCheatSearch;
}
@property (assign) IBOutlet NSObject *dummyObject;
@ -95,7 +93,9 @@
@property (readonly) NSMutableDictionary *bindings;
@property (retain) CocoaDSCheatItem *workingCheat;
@property (retain) CocoaDSCheatManager *cdsCheats;
@property (readonly) CocoaDSCheatSearch *cdsCheatSearch;
- (BOOL) cheatSystemStart:(CocoaDSCheatManager *)theManager;
- (void) cheatSystemEnd;
- (IBAction) addToList:(id)sender;
- (IBAction) removeFromList:(id)sender;
@ -107,15 +107,15 @@
- (IBAction) selectCheatSearchStyle:(id)sender;
- (IBAction) runExactValueSearch:(id)sender;
- (IBAction) runComparativeSearch:(id)sender;
- (void) searchDidFinish:(NSNotification *)aNotification;
- (IBAction) resetSearch:(id)sender;
- (void) setCheatConfigViewByType:(NSInteger)cheatTypeID;
- (void) setCheatSearchViewByStyle:(NSInteger)searchStyleID;
- (void) databaseLoadFromFile:(NSURL *)fileURL;
- (void) addSelectedFromCheatDatabase;
- (IBAction) selectAllCheatsInDatabase:(id)sender;
- (IBAction) selectNoneCheatsInDatabase:(id)sender;
- (void) addSelectedFromCheatDatabase;
- (IBAction) closeCheatDatabaseSheet:(id)sender;
- (void) didEndCheatDatabaseSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;

View File

@ -53,7 +53,6 @@
@synthesize codeEditorFont;
@synthesize bindings;
@synthesize cdsCheats;
@synthesize cdsCheatSearch;
@synthesize workingCheat;
- (id)init
@ -72,15 +71,6 @@
return self;
}
cdsCheatSearch = [[CocoaDSCheatSearch alloc] init];
if (cdsCheatSearch == nil)
{
[bindings release];
[self release];
self = nil;
return self;
}
workingCheat = nil;
currentView = nil;
currentSearchStyleView = nil;
@ -108,12 +98,59 @@
{
[self setWorkingCheat:nil];
[self setCdsCheats:nil];
[cdsCheatSearch release];
[bindings release];
[super dealloc];
}
- (BOOL) cheatSystemStart:(CocoaDSCheatManager *)cheatManager
{
BOOL didStartSuccessfully = NO;
if (cheatManager == nil)
{
return didStartSuccessfully;
}
[self setCdsCheats:cheatManager];
[cheatManager loadFromMaster];
[cheatListController setContent:[cheatManager sessionList]];
NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content];
[cheatWindowBindings setValue:self forKey:@"cheatWindowDelegateKey"];
NSString *dbFilePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"R4Cheat_DatabasePath"];
if (dbFilePath != nil)
{
[self databaseLoadFromFile:[NSURL fileURLWithPath:dbFilePath]];
}
[self setCheatSearchViewByStyle:CHEATSEARCH_SEARCHSTYLE_EXACT_VALUE];
didStartSuccessfully = YES;
return didStartSuccessfully;
}
- (void) cheatSystemEnd
{
CocoaDSCheatManager *cheatManager = [self cdsCheats];
if (cheatManager != nil)
{
[cheatManager save];
}
[cheatDatabaseController setContent:nil];
[cheatListController setContent:nil];
[self resetSearch:nil];
[self setCdsCheats:nil];
NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content];
[cheatWindowBindings setValue:@"No ROM loaded." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"No ROM loaded." forKey:@"cheatDBDate"];
[cheatWindowBindings setValue:@"---" forKey:@"cheatDBItemCount"];
[cheatWindowBindings setValue:nil forKey:@"cheatWindowDelegateKey"];
}
- (IBAction) addToList:(id)sender
{
if ([self cdsCheats] == nil)
@ -121,10 +158,10 @@
return;
}
CocoaDSCheatItem *newCheatItem = [[[self cdsCheats] newItem] autorelease];
CocoaDSCheatItem *newCheatItem = [[self cdsCheats] newItem];
if (newCheatItem != nil)
{
[cheatListController addObject:newCheatItem];
[cheatListController setContent:[[self cdsCheats] sessionList]];
[bindings setValue:[NSNumber numberWithBool:YES] forKey:@"hasItems"];
[[self cdsCheats] save];
}
@ -132,8 +169,8 @@
- (IBAction) removeFromList:(id)sender
{
NSMutableArray *cheatList = (NSMutableArray *)[cheatListController content];
if ( ([self cdsCheats] == nil) || (cheatList == nil) )
CocoaDSCheatManager *cheatManager = [self cdsCheats];
if (cheatManager == nil)
{
return;
}
@ -144,19 +181,19 @@
return;
}
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:selectionIndex];
NSArray *selectedObjects = [cheatListController selectedObjects];
CocoaDSCheatItem *selectedCheat = (CocoaDSCheatItem *)[selectedObjects objectAtIndex:0];
[[self cdsCheats] remove:selectedCheat];
[cheatListController removeObject:selectedCheat];
[cheatManager remove:selectedCheat];
[[self cdsCheats] save];
[cheatListController setContent:[cheatManager sessionList]];
[cheatManager save];
[cheatListTable deselectAll:sender];
NSUInteger cheatCount = [cheatList count];
NSUInteger cheatCount = [cheatManager itemTotalCount];
if (cheatCount > 0)
{
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:selectionIndex];
if (selectionIndex >= cheatCount)
{
selectionIndex--;
@ -245,9 +282,11 @@
NSInteger value = [searchField integerValue];
UInt8 byteSize = [[self workingCheat] bytes];
NSInteger signType = [(NSNumber *)[bindings valueForKey:@"cheatSearchSignType"] integerValue];
NSUInteger addressCount = [cdsCheatSearch runExactValueSearch:value byteSize:byteSize signType:signType];
[bindings setValue:[NSNumber numberWithUnsignedInteger:addressCount] forKey:@"cheatSearchAddressCount"];
[cheatSearchListController setContent:[cdsCheatSearch addressList]];
NSUInteger resultsCount = [cdsCheats runExactValueSearch:value byteSize:byteSize signType:signType];
[bindings setValue:[NSNumber numberWithUnsignedInteger:resultsCount] forKey:@"cheatSearchAddressCount"];
[cheatSearchListController setContent:[[self cdsCheats] searchResultsList]];
[bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isRunningSearch"];
}
@ -262,7 +301,8 @@
[bindings setValue:[NSNumber numberWithBool:YES] forKey:@"isSearchStarted"];
[bindings setValue:[NSNumber numberWithBool:YES] forKey:@"isRunningSearch"];
if ([cdsCheatSearch searchCount] == 0)
const BOOL wasSearchAlreadyStarted = [cdsCheats searchDidStart];
if (!wasSearchAlreadyStarted)
{
[bindings setValue:@"Running initial search..." forKey:@"cheatSearchAddressCount"];
[window displayIfNeeded];
@ -271,37 +311,23 @@
NSInteger compSearchTypeID = [CocoaDSUtil getIBActionSenderTag:sender];
UInt8 byteSize = [[self workingCheat] bytes];
NSInteger signType = [(NSNumber *)[bindings valueForKey:@"cheatSearchSignType"] integerValue];
NSUInteger addressCount = [cdsCheatSearch runComparativeSearch:compSearchTypeID byteSize:byteSize signType:signType];
[bindings setValue:[NSNumber numberWithUnsignedInteger:addressCount] forKey:@"cheatSearchAddressCount"];
[cheatSearchListController setContent:[cdsCheatSearch addressList]];
NSUInteger newResultsCount = [cdsCheats runComparativeSearch:compSearchTypeID byteSize:byteSize signType:signType];
[cheatSearchListController setContent:[[self cdsCheats] searchResultsList]];
NSInteger searchStyle = [(NSNumber *)[bindings valueForKey:@"cheatSearchStyle"] integerValue];
if (searchStyle == CHEATSEARCH_SEARCHSTYLE_COMPARATIVE && [cdsCheatSearch searchCount] == 1)
if (searchStyle == CHEATSEARCH_SEARCHSTYLE_COMPARATIVE)
{
[self setCheatSearchViewByStyle:CHEATSEARCH_SEARCHSTYLE_COMPARATIVE];
[bindings setValue:@"Search started!" forKey:@"cheatSearchAddressCount"];
}
[bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isRunningSearch"];
}
- (void) searchDidFinish:(NSNotification *)aNotification
{
CocoaDSCheatSearch *searcher = [aNotification object];
NSInteger addressCount = 0;
if (searcher != nil)
if (!wasSearchAlreadyStarted)
{
addressCount = [[searcher addressList] count];
[bindings setValue:[NSNumber numberWithUnsignedInteger:addressCount] forKey:@"cheatSearchAddressCount"];
[cheatSearchListController setContent:[searcher addressList]];
NSInteger searchStyle = [(NSNumber *)[bindings valueForKey:@"cheatSearchStyle"] integerValue];
if (searchStyle == CHEATSEARCH_SEARCHSTYLE_COMPARATIVE && [searcher searchCount] == 1)
{
[self setCheatSearchViewByStyle:CHEATSEARCH_SEARCHSTYLE_COMPARATIVE];
[bindings setValue:@"Search started!" forKey:@"cheatSearchAddressCount"];
}
[bindings setValue:@"Search started!" forKey:@"cheatSearchAddressCount"];
}
else
{
[bindings setValue:[NSNumber numberWithUnsignedInteger:newResultsCount] forKey:@"cheatSearchAddressCount"];
}
[bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isRunningSearch"];
@ -309,8 +335,8 @@
- (IBAction) resetSearch:(id)sender
{
[cheatSearchListController setContent:nil];
[cdsCheatSearch reset];
[[self cdsCheats] searchReset];
[cheatSearchListController setContent:[[self cdsCheats] searchResultsList]];
[bindings setValue:nil forKey:@"cheatSearchSearchValue"];
[bindings setValue:@"Search not started." forKey:@"cheatSearchAddressCount"];
[self setCheatSearchViewByStyle:[(NSNumber *)[bindings valueForKey:@"cheatSearchStyle"] integerValue]];
@ -370,7 +396,7 @@
break;
case CHEATSEARCH_SEARCHSTYLE_COMPARATIVE:
if ([cdsCheatSearch searchCount] == 0)
if ([cdsCheats searchDidStart] == 0)
{
newView = viewSearchComparativeStart;
}
@ -394,6 +420,82 @@
}
}
- (void) databaseLoadFromFile:(NSURL *)fileURL
{
CocoaDSCheatManager *cheatManager = [self cdsCheats];
NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content];
if ( (fileURL == nil) || (cheatManager == nil) || (cheatWindowBindings == nil) )
{
return;
}
NSInteger error = 0;
NSMutableArray *dbList = [cheatManager cheatListFromDatabase:fileURL errorCode:&error];
if (dbList != nil)
{
[cheatDatabaseController setContent:dbList];
NSString *titleString = [cheatManager databaseTitle];
NSString *dateString = [cheatManager databaseDate];
[cheatWindowBindings setValue:titleString forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:dateString forKey:@"cheatDBDate"];
[cheatWindowBindings setValue:[NSString stringWithFormat:@"%ld", (unsigned long)[dbList count]] forKey:@"cheatDBItemCount"];
}
else
{
[cheatWindowBindings setValue:@"---" forKey:@"cheatDBItemCount"];
switch (error)
{
case CHEATEXPORT_ERROR_FILE_NOT_FOUND:
NSLog(@"R4 Cheat Database read failed! Could not load the database file!");
[cheatWindowBindings setValue:@"Database not loaded." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"CANNOT LOAD FILE" forKey:@"cheatDBDate"];
break;
case CHEATEXPORT_ERROR_WRONG_FILE_FORMAT:
NSLog(@"R4 Cheat Database read failed! Wrong file format!");
[cheatWindowBindings setValue:@"Database load error." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"FAILED TO LOAD FILE" forKey:@"cheatDBDate"];
break;
case CHEATEXPORT_ERROR_SERIAL_NOT_FOUND:
NSLog(@"R4 Cheat Database read failed! Could not find the serial number for this game in the database!");
[cheatWindowBindings setValue:@"ROM not found in database." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"ROM not found." forKey:@"cheatDBDate"];
break;
case CHEATEXPORT_ERROR_EXPORT_FAILED:
NSLog(@"R4 Cheat Database read failed! Could not read the database file!");
[cheatWindowBindings setValue:@"Database read error." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"CANNOT READ FILE" forKey:@"cheatDBDate"];
break;
default:
break;
}
}
}
- (void) addSelectedFromCheatDatabase
{
CocoaDSCheatManager *cheatManager = [self cdsCheats];
if (cheatManager == nil)
{
return;
}
const NSInteger addedItemCount = [cheatManager databaseAddSelected];
if (addedItemCount > 0)
{
[cheatListController setContent:[[self cdsCheats] sessionList]];
[[self cdsCheats] save];
[bindings setValue:[NSNumber numberWithBool:YES] forKey:@"hasItems"];
}
}
- (IBAction) selectAllCheatsInDatabase:(id)sender
{
NSMutableArray *dbList = [cheatDatabaseController content];
@ -422,41 +524,6 @@
}
}
- (void) addSelectedFromCheatDatabase
{
NSMutableArray *dbList = [cheatDatabaseController content];
if (dbList == nil)
{
return;
}
size_t addedItemCount = 0;
BOOL didAddItem = NO;
for (CocoaDSCheatItem *dbItem in dbList)
{
if ([dbItem willAdd])
{
CocoaDSCheatItem *newCocoaCheatItem = [[[CocoaDSCheatItem alloc] init] autorelease];
ClientCheatItem *newCheatItem = [newCocoaCheatItem clientData];
newCheatItem->Init(*[dbItem clientData]);
didAddItem = [[self cdsCheats] addExistingItem:newCocoaCheatItem];
if (didAddItem)
{
[cheatListController addObject:newCocoaCheatItem];
addedItemCount++;
}
}
}
if (addedItemCount > 0)
{
[[self cdsCheats] save];
[bindings setValue:[NSNumber numberWithBool:YES] forKey:@"hasItems"];
}
}
- (IBAction) closeCheatDatabaseSheet:(id)sender
{
NSWindow *sheet = [(NSControl *)sender window];

View File

@ -18,6 +18,7 @@
#import "preferencesWindowDelegate.h"
#import "EmuControllerDelegate.h"
#import "cheatWindowDelegate.h"
#import "cocoa_core.h"
#import "cocoa_GPU.h"
@ -580,58 +581,11 @@
const BOOL isRomLoaded = [(EmuControllerDelegate *)[emuController content] currentRom] != nil;
NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content];
CocoaDSCheatManager *cdsCheats = (CocoaDSCheatManager *)[cheatWindowBindings valueForKey:@"cheatList"];
CheatWindowDelegate *cheatWindowDelegate = (CheatWindowDelegate *)[cheatWindowBindings valueForKey:@"cheatWindowDelegateKey"];
if (isRomLoaded == YES && cdsCheats != nil)
if ( (isRomLoaded == YES) && (cheatWindowDelegate != nil) )
{
NSInteger error = 0;
NSMutableArray *dbList = [cdsCheats cheatListFromDatabase:selectedFileURL errorCode:&error];
if (dbList != nil)
{
[cheatDatabaseController setContent:dbList];
NSString *titleString = [cdsCheats dbTitle];
NSString *dateString = [cdsCheats dbDate];
[cheatWindowBindings setValue:titleString forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:dateString forKey:@"cheatDBDate"];
[cheatWindowBindings setValue:[NSString stringWithFormat:@"%ld", (unsigned long)[dbList count]] forKey:@"cheatDBItemCount"];
}
else
{
// TODO: Display an error message here.
[cheatWindowBindings setValue:@"---" forKey:@"cheatDBItemCount"];
switch (error)
{
case CHEATEXPORT_ERROR_FILE_NOT_FOUND:
NSLog(@"R4 Cheat Database read failed! Could not load the database file!");
[cheatWindowBindings setValue:@"Database not loaded." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"CANNOT LOAD FILE" forKey:@"cheatDBDate"];
break;
case CHEATEXPORT_ERROR_WRONG_FILE_FORMAT:
NSLog(@"R4 Cheat Database read failed! Wrong file format!");
[cheatWindowBindings setValue:@"Database load error." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"FAILED TO LOAD FILE" forKey:@"cheatDBDate"];
break;
case CHEATEXPORT_ERROR_SERIAL_NOT_FOUND:
NSLog(@"R4 Cheat Database read failed! Could not find the serial number for this game in the database!");
[cheatWindowBindings setValue:@"ROM not found in database." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"ROM not found." forKey:@"cheatDBDate"];
break;
case CHEATEXPORT_ERROR_EXPORT_FAILED:
NSLog(@"R4 Cheat Database read failed! Could not read the database file!");
[cheatWindowBindings setValue:@"Database read error." forKey:@"cheatDBTitle"];
[cheatWindowBindings setValue:@"CANNOT READ FILE" forKey:@"cheatDBDate"];
break;
default:
break;
}
}
[cheatWindowDelegate databaseLoadFromFile:selectedFileURL];
}
}

View File

@ -147,7 +147,7 @@
finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nAudio - Sound Interpolation Method: "] stringByAppendingString:[[emuControl cdsSpeaker] spuInterpolationModeString]];
finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nAudio - Sound Synchronization Method: "] stringByAppendingString:[[emuControl cdsSpeaker] spuSyncMethodString]];
finalFormTextStr = [finalFormTextStr stringByAppendingString:@"\n"];
finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nCheats: "] stringByAppendingString:(([cdsCore isCheatingEnabled] && ([[cdsCore cdsCheatManager] activeCount] > 0)) ? [NSString stringWithFormat:@"YES (ActiveCheatCount=%ld)", (unsigned long)[[cdsCore cdsCheatManager] activeCount]] : @"NO")];
finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nCheats: "] stringByAppendingString:(([cdsCore isCheatingEnabled] && ([[cdsCore cdsCheatManager] itemActiveCount] > 0)) ? [NSString stringWithFormat:@"YES (ActiveCheatCount=%ld)", (unsigned long)[[cdsCore cdsCheatManager] itemActiveCount]] : @"NO")];
finalFormTextStr = [finalFormTextStr stringByAppendingString:@"\n"];
if ([window contentView] == viewSupportRequest)