diff --git a/MA2ME.xcodeproj/project.pbxproj b/MA2ME.xcodeproj/project.pbxproj index d5de250..45debc9 100644 --- a/MA2ME.xcodeproj/project.pbxproj +++ b/MA2ME.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ B60A6E0C24ECE23F004B7EEF /* apple2gs.plist in Resources */ = {isa = PBXBuildFile; fileRef = B60A6E0B24ECE23F004B7EEF /* apple2gs.plist */; }; - B60A6E0F24EDFB88004B7EEF /* SlotView2.xib in Resources */ = {isa = PBXBuildFile; fileRef = B60A6E0D24EDFB88004B7EEF /* SlotView2.xib */; }; B60A6E1424EE0AE2004B7EEF /* FlippedView.m in Sources */ = {isa = PBXBuildFile; fileRef = B60A6E1324EE0AE2004B7EEF /* FlippedView.m */; }; B64E15A624E9B34700E8AD3D /* Models.plist in Resources */ = {isa = PBXBuildFile; fileRef = B64E15A424E9B34700E8AD3D /* Models.plist */; }; B64E15A924EA1D5300E8AD3D /* ROMBrowserDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B64E15A824EA1D5300E8AD3D /* ROMBrowserDelegate.m */; }; @@ -16,6 +15,10 @@ B64E15B524EA383F00E8AD3D /* apple2gs in Resources */ = {isa = PBXBuildFile; fileRef = B64E15B424EA383F00E8AD3D /* apple2gs */; }; B64E15B824EC912200E8AD3D /* SlotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B64E15B624EC912200E8AD3D /* SlotView.xib */; }; B65593B124ECB61800722E0C /* SlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B65593B024ECB61800722E0C /* SlotViewController.m */; }; + B67BD48324EE248C0073E334 /* ace100.plist in Resources */ = {isa = PBXBuildFile; fileRef = B67BD48224EE248C0073E334 /* ace100.plist */; }; + B67BD48624EE249D0073E334 /* apple1.plist in Resources */ = {isa = PBXBuildFile; fileRef = B67BD48424EE249D0073E334 /* apple1.plist */; }; + B67BD48724EE249D0073E334 /* apple2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B67BD48524EE249D0073E334 /* apple2.plist */; }; + B67BD48924EE24A40073E334 /* apple3.plist in Resources */ = {isa = PBXBuildFile; fileRef = B67BD48824EE24A40073E334 /* apple3.plist */; }; B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA257F24E99BE9005FB8FF /* AppDelegate.m */; }; B6BA258224E99BEB005FB8FF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B6BA258124E99BEB005FB8FF /* Assets.xcassets */; }; B6BA258524E99BEB005FB8FF /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6BA258324E99BEB005FB8FF /* MainMenu.xib */; }; @@ -24,7 +27,6 @@ /* Begin PBXFileReference section */ B60A6E0B24ECE23F004B7EEF /* apple2gs.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2gs.plist; sourceTree = ""; }; - B60A6E0E24EDFB88004B7EEF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MA2ME/MA2ME/Base.lproj/SlotView2.xib; sourceTree = ""; }; B60A6E1224EE0AE2004B7EEF /* FlippedView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FlippedView.h; sourceTree = ""; }; B60A6E1324EE0AE2004B7EEF /* FlippedView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FlippedView.m; sourceTree = ""; }; B64E15A524E9B34700E8AD3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/Models.plist; sourceTree = ""; }; @@ -36,6 +38,10 @@ B64E15B724EC912200E8AD3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MA2ME/Base.lproj/SlotView.xib; sourceTree = ""; }; B65593AF24ECB61800722E0C /* SlotViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SlotViewController.h; sourceTree = ""; }; B65593B024ECB61800722E0C /* SlotViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SlotViewController.m; sourceTree = ""; }; + B67BD48224EE248C0073E334 /* ace100.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ace100.plist; sourceTree = ""; }; + B67BD48424EE249D0073E334 /* apple1.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple1.plist; sourceTree = ""; }; + B67BD48524EE249D0073E334 /* apple2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2.plist; sourceTree = ""; }; + B67BD48824EE24A40073E334 /* apple3.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple3.plist; sourceTree = ""; }; B6BA257B24E99BE9005FB8FF /* MA2ME.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MA2ME.app; sourceTree = BUILT_PRODUCTS_DIR; }; B6BA257E24E99BE9005FB8FF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; B6BA257F24E99BE9005FB8FF /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -60,6 +66,10 @@ B64E15AF24EA365E00E8AD3D /* Resources */ = { isa = PBXGroup; children = ( + B67BD48424EE249D0073E334 /* apple1.plist */, + B67BD48524EE249D0073E334 /* apple2.plist */, + B67BD48824EE24A40073E334 /* apple3.plist */, + B67BD48224EE248C0073E334 /* ace100.plist */, B60A6E0B24ECE23F004B7EEF /* apple2gs.plist */, B64E15B424EA383F00E8AD3D /* apple2gs */, B64E15A424E9B34700E8AD3D /* Models.plist */, @@ -72,7 +82,6 @@ children = ( B60A6E1224EE0AE2004B7EEF /* FlippedView.h */, B60A6E1324EE0AE2004B7EEF /* FlippedView.m */, - B60A6E0D24EDFB88004B7EEF /* SlotView2.xib */, B65593AF24ECB61800722E0C /* SlotViewController.h */, B65593B024ECB61800722E0C /* SlotViewController.m */, B6BA257D24E99BE9005FB8FF /* MA2ME */, @@ -165,12 +174,15 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + B67BD48324EE248C0073E334 /* ace100.plist in Resources */, + B67BD48624EE249D0073E334 /* apple1.plist in Resources */, B6BA258224E99BEB005FB8FF /* Assets.xcassets in Resources */, B6BA258524E99BEB005FB8FF /* MainMenu.xib in Resources */, - B60A6E0F24EDFB88004B7EEF /* SlotView2.xib in Resources */, + B67BD48924EE24A40073E334 /* apple3.plist in Resources */, B64E15B824EC912200E8AD3D /* SlotView.xib in Resources */, B64E15B524EA383F00E8AD3D /* apple2gs in Resources */, B60A6E0C24ECE23F004B7EEF /* apple2gs.plist in Resources */, + B67BD48724EE249D0073E334 /* apple2.plist in Resources */, B64E15A624E9B34700E8AD3D /* Models.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -194,14 +206,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - B60A6E0D24EDFB88004B7EEF /* SlotView2.xib */ = { - isa = PBXVariantGroup; - children = ( - B60A6E0E24EDFB88004B7EEF /* Base */, - ); - name = SlotView2.xib; - sourceTree = ""; - }; B64E15A424E9B34700E8AD3D /* Models.plist */ = { isa = PBXVariantGroup; children = ( diff --git a/MA2ME/AppDelegate.m b/MA2ME/AppDelegate.m index 8897e63..5e57a72 100644 --- a/MA2ME/AppDelegate.m +++ b/MA2ME/AppDelegate.m @@ -154,9 +154,11 @@ static NSString *kMyContext = @"kMyContext"; NSString *model = [item objectForKey: @"Mame"]; [self setMameROM: model]; + // [self buildCommandLine]; [_slotDelegate setModel: model]; + [_slotController setModel: model]; } #pragma mark NSBrowser diff --git a/MA2ME/MA2ME/Base.lproj/SlotView.xib b/MA2ME/MA2ME/Base.lproj/SlotView.xib index 1116a08..467b9bf 100644 --- a/MA2ME/MA2ME/Base.lproj/SlotView.xib +++ b/MA2ME/MA2ME/Base.lproj/SlotView.xib @@ -41,7 +41,15 @@ - + + + + + NSIsNil + + + + @@ -51,11 +59,51 @@ - - - - - + + + + + NSIsNil + + + + + + + + + NSIsNil + + + + + + + + + NSIsNil + + + + + + + + + NSIsNil + + + + + + + + + NSIsNil + + + + @@ -74,10 +122,42 @@ - - - - + + + + + NSIsNil + + + + + + + + + NSIsNil + + + + + + + + + NSIsNil + + + + + + + + + NSIsNil + + + + diff --git a/SlotViewController.m b/SlotViewController.m index 79d7225..41a3cbd 100644 --- a/SlotViewController.m +++ b/SlotViewController.m @@ -21,7 +21,6 @@ @property (weak) IBOutlet NSPopUpButton *sl5_menu; @property (weak) IBOutlet NSPopUpButton *sl6_menu; @property (weak) IBOutlet NSPopUpButton *sl7_menu; -@property (weak) IBOutlet NSPopUpButton *sl8_menu; @property (weak) IBOutlet NSPopUpButton *exp_menu; @property (weak) IBOutlet NSPopUpButton *aux_menu; @property (weak) IBOutlet NSPopUpButton *rs232_menu; @@ -85,6 +84,72 @@ [self setArgs: @[]]; } +-(void)syncMemory { + + int ix = 0; + NSArray *items = [_machine objectForKey: @"RAM"]; + for (NSDictionary *d in items) { + unsigned size = [(NSNumber *)[d objectForKey: @"value"] unsignedIntValue]; + if (size == _memoryBytes) { + [_ram_menu selectItemAtIndex: ix]; + [self setMemory: [d objectForKey: @"description"]]; + return; + } + ++ix; + } + + [self setMemoryBytes: 0]; + [self setMemory: @""]; + [_ram_menu selectItemAtIndex: 0]; + /* set to default */ + +} + +-(void)syncSlot: (NSString *)slot button: (NSPopUpButton *)button { + + NSString *value = [self valueForKey: slot]; + + if (![value length]) return; + + NSArray *items = [_machine objectForKey: slot]; + + if (![items count]) { + [self setValue: @"" forKey: slot]; + return; + } + + int ix = 0; + for (NSDictionary *d in items) { + if ([value isEqualToString: [d objectForKey: @"value"]]) { + + [button selectItemAtIndex: ix]; + return; + } + ++ix; + } + [self setValue: @"" forKey: slot]; + [button selectItemAtIndex: 0]; +} + +-(void)syncSlots { + + [self syncMemory]; + [self syncSlot: @"sl0" button: _sl0_menu]; + [self syncSlot: @"sl1" button: _sl1_menu]; + [self syncSlot: @"sl2" button: _sl2_menu]; + [self syncSlot: @"sl3" button: _sl3_menu]; + [self syncSlot: @"sl4" button: _sl4_menu]; + [self syncSlot: @"sl5" button: _sl5_menu]; + [self syncSlot: @"sl6" button: _sl6_menu]; + [self syncSlot: @"sl7" button: _sl7_menu]; + [self syncSlot: @"rs232" button: _rs232_menu]; + [self syncSlot: @"aux" button: _aux_menu]; + [self syncSlot: @"exp" button: _exp_menu]; + [self syncSlot: @"gameio" button: _game_menu]; + [self syncSlot: @"modem" button: _modem_menu]; + [self syncSlot: @"printer" button: _printer_menu]; +} + -(void)loadMachine: (NSString *)model { NSBundle *bundle = [NSBundle mainBundle]; @@ -97,9 +162,18 @@ return; } + NSDictionary *r = [d objectForKey: @"resolution"]; + NSSize res = NSMakeSize(0, 0); + if (r) { + res.height = [(NSNumber *)[r objectForKey: @"height"] doubleValue]; + res.width = [(NSNumber *)[r objectForKey: @"width"] doubleValue]; + } + [self setResolution: res]; // n.b. - does content binding propogate immediately? [self setMachine: d]; + [self syncSlots]; + [self rebuildArgs]; } @@ -109,8 +183,8 @@ @"sl0", @"sl1", @"sl2", @"sl3", @"sl4", @"sl5", @"sl6", @"sl7", - @"exp", @"aux", - @"gameio", @"printer", @"modem", @"rs232" + @"exp", @"aux", @"rs232", + @"gameio", @"printer", @"modem", }; NSInteger tag = [sender tag];