From 7b6d4de5b1fa0961776342e3d74ac107eece410b Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Wed, 19 Aug 2020 23:19:12 -0400 Subject: [PATCH] updates --- FlippedView.h | 17 +++ FlippedView.m | 17 +++ MA2ME.xcodeproj/project.pbxproj | 18 +++ MA2ME/Base.lproj/MainMenu.xib | 2 +- MA2ME/MA2ME/Base.lproj/SlotView.xib | 180 +++++++++++++++------------- SlotViewController.h | 11 +- SlotViewController.m | 172 +++++++++++++++----------- 7 files changed, 266 insertions(+), 151 deletions(-) create mode 100644 FlippedView.h create mode 100644 FlippedView.m diff --git a/FlippedView.h b/FlippedView.h new file mode 100644 index 0000000..667433a --- /dev/null +++ b/FlippedView.h @@ -0,0 +1,17 @@ +// +// FlippedView.h +// MA2ME +// +// Created by Kelvin Sherlock on 8/19/2020. +// Copyright © 2020 Kelvin Sherlock. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FlippedView : NSView + +@end + +NS_ASSUME_NONNULL_END diff --git a/FlippedView.m b/FlippedView.m new file mode 100644 index 0000000..b134f34 --- /dev/null +++ b/FlippedView.m @@ -0,0 +1,17 @@ +// +// FlippedView.m +// MA2ME +// +// Created by Kelvin Sherlock on 8/19/2020. +// Copyright © 2020 Kelvin Sherlock. All rights reserved. +// + +#import "FlippedView.h" + +@implementation FlippedView + +-(BOOL)isFlipped { + return YES; +} + +@end diff --git a/MA2ME.xcodeproj/project.pbxproj b/MA2ME.xcodeproj/project.pbxproj index 60d1524..d5de250 100644 --- a/MA2ME.xcodeproj/project.pbxproj +++ b/MA2ME.xcodeproj/project.pbxproj @@ -8,6 +8,8 @@ /* 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 */; }; B64E15AC24EA1FD400E8AD3D /* SlotBrowserDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B64E15AB24EA1FD400E8AD3D /* SlotBrowserDelegate.m */; }; @@ -22,6 +24,9 @@ /* 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 = ""; }; B64E15A724EA1D5300E8AD3D /* ROMBrowserDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ROMBrowserDelegate.h; sourceTree = ""; }; B64E15A824EA1D5300E8AD3D /* ROMBrowserDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ROMBrowserDelegate.m; sourceTree = ""; }; @@ -65,6 +70,9 @@ B6BA257224E99BE9005FB8FF = { isa = PBXGroup; children = ( + B60A6E1224EE0AE2004B7EEF /* FlippedView.h */, + B60A6E1324EE0AE2004B7EEF /* FlippedView.m */, + B60A6E0D24EDFB88004B7EEF /* SlotView2.xib */, B65593AF24ECB61800722E0C /* SlotViewController.h */, B65593B024ECB61800722E0C /* SlotViewController.m */, B6BA257D24E99BE9005FB8FF /* MA2ME */, @@ -159,6 +167,7 @@ files = ( B6BA258224E99BEB005FB8FF /* Assets.xcassets in Resources */, B6BA258524E99BEB005FB8FF /* MainMenu.xib in Resources */, + B60A6E0F24EDFB88004B7EEF /* SlotView2.xib in Resources */, B64E15B824EC912200E8AD3D /* SlotView.xib in Resources */, B64E15B524EA383F00E8AD3D /* apple2gs in Resources */, B60A6E0C24ECE23F004B7EEF /* apple2gs.plist in Resources */, @@ -176,6 +185,7 @@ B6BA258824E99BEB005FB8FF /* main.m in Sources */, B64E15AC24EA1FD400E8AD3D /* SlotBrowserDelegate.m in Sources */, B64E15A924EA1D5300E8AD3D /* ROMBrowserDelegate.m in Sources */, + B60A6E1424EE0AE2004B7EEF /* FlippedView.m in Sources */, B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */, B65593B124ECB61800722E0C /* SlotViewController.m in Sources */, ); @@ -184,6 +194,14 @@ /* 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/Base.lproj/MainMenu.xib b/MA2ME/Base.lproj/MainMenu.xib index e2e8547..ed0d57d 100644 --- a/MA2ME/Base.lproj/MainMenu.xib +++ b/MA2ME/Base.lproj/MainMenu.xib @@ -769,7 +769,7 @@ - + diff --git a/MA2ME/MA2ME/Base.lproj/SlotView.xib b/MA2ME/MA2ME/Base.lproj/SlotView.xib index 2233391..1116a08 100644 --- a/MA2ME/MA2ME/Base.lproj/SlotView.xib +++ b/MA2ME/MA2ME/Base.lproj/SlotView.xib @@ -13,7 +13,6 @@ - @@ -24,14 +23,13 @@ - - + @@ -58,7 +56,6 @@ - @@ -89,8 +86,8 @@ - - + + @@ -99,7 +96,7 @@ - + @@ -110,19 +107,17 @@ - - - + - - + + @@ -131,7 +126,7 @@ - + @@ -144,14 +139,15 @@ + - - + + @@ -159,8 +155,8 @@ - - + + @@ -173,14 +169,15 @@ + - - + + @@ -188,8 +185,8 @@ - - + + @@ -201,12 +198,16 @@ + + + + - - + + @@ -214,8 +215,8 @@ - - + + @@ -227,12 +228,16 @@ + + + + - - + + @@ -240,8 +245,8 @@ - - + + @@ -253,12 +258,16 @@ + + + + - - + + @@ -266,8 +275,8 @@ - - + + @@ -279,12 +288,16 @@ + + + + - - + + @@ -292,8 +305,8 @@ - - + + @@ -305,12 +318,16 @@ + + + + - - + + @@ -318,8 +335,8 @@ - - + + @@ -331,38 +348,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + @@ -370,7 +365,7 @@ - + @@ -383,12 +378,16 @@ + + + + - + @@ -396,7 +395,7 @@ - + @@ -409,12 +408,16 @@ + + + + - + @@ -422,7 +425,7 @@ - + @@ -435,12 +438,16 @@ + + + + - + @@ -448,7 +455,7 @@ - + @@ -461,12 +468,16 @@ + + + + - + @@ -474,7 +485,7 @@ - + @@ -487,12 +498,16 @@ + + + + - + @@ -500,7 +515,7 @@ - + @@ -513,12 +528,15 @@ + + + + - - + diff --git a/SlotViewController.h b/SlotViewController.h index 741cc26..4d72f3a 100644 --- a/SlotViewController.h +++ b/SlotViewController.h @@ -13,9 +13,10 @@ NS_ASSUME_NONNULL_BEGIN @interface SlotViewController : NSViewController @property (nonatomic) NSString *model; -//@property (nonatomic) NSDictionary *machine; +@property (nonatomic) NSDictionary *machine; -@property unsigned memory; +@property NSString *memory; +@property NSUInteger memoryBytes; @property NSString *sl0; @property NSString *sl1; @@ -33,9 +34,15 @@ NS_ASSUME_NONNULL_BEGIN @property NSString *printer; @property NSString *modem; +@property NSSize resolution; + +@property NSArray *args; //-(void)setMachine: (NSDictionary *)machine; +- (IBAction)menuChanged:(id)sender; +- (IBAction)memoryMenuChanged:(id)sender; + @end NS_ASSUME_NONNULL_END diff --git a/SlotViewController.m b/SlotViewController.m index 20e3971..79d7225 100644 --- a/SlotViewController.m +++ b/SlotViewController.m @@ -9,7 +9,7 @@ #import "SlotViewController.h" @interface SlotViewController () { -//NSDictionary *_machine; + } @property (weak) IBOutlet NSPopUpButton *ram_menu; @@ -29,11 +29,6 @@ @property (weak) IBOutlet NSPopUpButton *printer_menu; @property (weak) IBOutlet NSPopUpButton *modem_menu; -@property (strong) IBOutlet NSArrayController *ram_array; - -@property NSArray *ram_menu_values; - -@property NSDictionary *machine; @end @@ -43,65 +38,14 @@ - (void)viewDidLoad { [super viewDidLoad]; // Do view setup here. - - [self setRam_menu_values: @[]]; - - NSBundle *bundle = [NSBundle mainBundle]; - NSURL *url= [bundle URLForResource: @"apple2gs" withExtension: @"plist"]; - - NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url]; - [self setMachine: d]; - //[self update_ram_menu]; - - - + [self setModel: @"apple2gs"]; } -(void)reset { } -- (IBAction)ram_menu_action:(id)sender { - NSLog(@"%@", sender); -} -static NSMenuItem *MemoryMenuItem(unsigned size) { - - NSMenuItem *m; - NSString *s; - - if (size >= 1024 * 1024) - s = [NSString stringWithFormat: @"%fM", (double)size / (1024 * 1024)]; - else - s = [NSString stringWithFormat: @"%uK", size / 1024]; - - m = [[NSMenuItem alloc] initWithTitle: s action: nil keyEquivalent: @""]; - - [m setTag: size]; - return m; -} - --(void)update_ram_menu { -#if 0 - NSMenu *menu = [_ram_menu menu]; - - [menu removeAllItems]; - - [menu addItem: MemoryMenuItem(4096)]; - [menu addItem: MemoryMenuItem(1310720)]; - [menu addItem: MemoryMenuItem(5242880)]; - - [_ram_array setContent: @[ - @{ @"description" : @"4K" }, - @{ @"description" : @"8K" }, - @{ @"description" : @"16K" } - ] - ]; - -#endif - [self setRam_menu_values: [_machine objectForKey: @"RAM"]]; - //[_ram_array setContent: [_machine objectForKey: @"RAM"]]; -} -(void)setModel:(NSString *)model { @@ -109,21 +53,115 @@ static NSMenuItem *MemoryMenuItem(unsigned size) { if ([model isEqualToString: _model]) return; _model = model; - _machine = nil; + + [self loadMachine: model]; +} + +-(void)resetMachine { + + [self setMachine: @{}]; + + [self setSl0: @""]; + [self setSl1: @""]; + [self setSl2: @""]; + [self setSl3: @""]; + [self setSl4: @""]; + [self setSl5: @""]; + [self setSl6: @""]; + [self setSl7: @""]; + + [self setRs232: @""]; + [self setAux: @""]; + [self setExp: @""]; + [self setGameio: @""]; + [self setPrinter: @""]; + [self setModem: @""]; + + [self setMemory: @""]; + [self setMemoryBytes: 0]; + [self setResolution: NSMakeSize(0, 0)]; + - NSGridView *view = (NSGridView *)[self view]; - if (!_model) { - [view setHidden: YES]; - [self setMemory: 0]; + [self setArgs: @[]]; +} + +-(void)loadMachine: (NSString *)model { + + NSBundle *bundle = [NSBundle mainBundle]; + NSURL *url= [bundle URLForResource: model withExtension: @"plist"]; + + NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url]; + + if (!d) { + [self resetMachine]; return; } + + + // n.b. - does content binding propogate immediately? + [self setMachine: d]; +} + + +- (IBAction)menuChanged:(NSPopUpButton *)sender { + + static NSString *Names[] = { + + @"sl0", @"sl1", @"sl2", @"sl3", + @"sl4", @"sl5", @"sl6", @"sl7", + @"exp", @"aux", + @"gameio", @"printer", @"modem", @"rs232" + }; - /* load ... */ + NSInteger tag = [sender tag]; + +// NSInteger ix = [sender indexOfSelectedItem]; - /* ram menu */ - [_ram_menu removeAllItems]; - [self update_ram_menu]; + NSString *key = Names[tag]; + + NSDictionary *o = [[sender selectedItem] representedObject]; + [self setValue: [o objectForKey: @"value"] forKey: key]; + + [self rebuildArgs]; +} + +- (IBAction)memoryMenuChanged:(NSPopUpButton *)sender { + + // + NSDictionary *o = [[sender selectedItem] representedObject]; + [self setMemory: [o objectForKey: @"description"]]; + [self setMemoryBytes: [(NSNumber *)[o objectForKey: @"value"] unsignedIntValue]]; + + [self rebuildArgs]; +} + +-(void)rebuildArgs { + + NSMutableArray *args = [NSMutableArray new]; + +#define _(a, b) if ([a length]) { [args addObject: b]; [args addObject: a]; } + + _(_memory, @"-ramsize") + + _(_sl0, @"-sl0") + _(_sl1, @"-sl1") + _(_sl2, @"-sl2") + _(_sl3, @"-sl3") + _(_sl4, @"-sl4") + _(_sl5, @"-sl5") + _(_sl6, @"-sl6") + _(_sl7, @"-sl7") + + _(_rs232, @"-rs232") + _(_aux, @"-aux") + _(_exp, @"-exp") + _(_gameio, @"-gameio") + _(_printer, @"-printer") + _(_modem, @"-modem") + + + [self setArgs: args]; } @end