From a3ad0ab09b9d88ac9b21e7d6ce33d45e6cefbb1d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 22 Jul 2019 21:46:28 -0400 Subject: [PATCH] Completes the successful import path. --- .../Clock Signal.xcodeproj/project.pbxproj | 6 +-- .../Documents/MachineDocument.swift | 46 ++++++++++++++----- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 29d85df7c..0c8c3b434 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -145,7 +145,6 @@ 4B1EDB451E39A0AC009D6819 /* chip.png in Resources */ = {isa = PBXBuildFile; fileRef = 4B1EDB431E39A0AC009D6819 /* chip.png */; }; 4B2A332D1DB86821002876E3 /* OricOptions.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B2A332B1DB86821002876E3 /* OricOptions.xib */; }; 4B2A539F1D117D36003C6002 /* CSAudioQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A53911D117D36003C6002 /* CSAudioQueue.m */; }; - 4B2A53A01D117D36003C6002 /* CSMachine.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A53961D117D36003C6002 /* CSMachine.mm */; }; 4B2B3A4B1F9B8FA70062DABF /* Typer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2B3A471F9B8FA70062DABF /* Typer.cpp */; }; 4B2B3A4C1F9B8FA70062DABF /* MemoryFuzzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2B3A481F9B8FA70062DABF /* MemoryFuzzer.cpp */; }; 4B2BFC5F1D613E0200BA3AA9 /* TapePRG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2BFC5D1D613E0200BA3AA9 /* TapePRG.cpp */; }; @@ -669,7 +668,7 @@ 4BDA00DD22E622C200AC3CD0 /* ROMImages in Resources */ = {isa = PBXBuildFile; fileRef = 4BC9DF441D044FCA00F44158 /* ROMImages */; }; 4BDA00E022E644AF00AC3CD0 /* CSROMReceiverView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BDA00DF22E644AF00AC3CD0 /* CSROMReceiverView.m */; }; 4BDA00E422E663B900AC3CD0 /* NSData+CRC32.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BDA00E222E663B900AC3CD0 /* NSData+CRC32.m */; }; - 4BDA00E522E669DC00AC3CD0 /* ROMImages in Resources */ = {isa = PBXBuildFile; fileRef = 4BC9DF441D044FCA00F44158 /* ROMImages */; }; + 4BDA00E622E699B000AC3CD0 /* CSMachine.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A53961D117D36003C6002 /* CSMachine.mm */; }; 4BDB61EB2032806E0048AF91 /* CSAtari2600.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A539A1D117D36003C6002 /* CSAtari2600.mm */; }; 4BDB61EC203285AE0048AF91 /* Atari2600OptionsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B8FE21F1DA19D7C0090D3CE /* Atari2600OptionsPanel.swift */; }; 4BDDBA991EF3451200347E61 /* Z80MachineCycleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BDDBA981EF3451200347E61 /* Z80MachineCycleTests.swift */; }; @@ -3577,7 +3576,6 @@ 4B79E4441E3AF38600141F11 /* cassette.png in Resources */, 4BB73EAC1B587A5100552FC2 /* MainMenu.xib in Resources */, 4B8FE21D1DA19D5F0090D3CE /* QuickLoadCompositeOptions.xib in Resources */, - 4BDA00E522E669DC00AC3CD0 /* ROMImages in Resources */, 4B79E4461E3AF38600141F11 /* floppy525.png in Resources */, 4BEEE6BD20DC72EB003723BF /* CompositeOptions.xib in Resources */, 4B1497981EE4B97F00CE2596 /* ZX8081Options.xib in Resources */, @@ -4124,6 +4122,7 @@ 4B55CE5F1C3B7D960093A61B /* MachineDocument.swift in Sources */, 4B2B3A4C1F9B8FA70062DABF /* MemoryFuzzer.cpp in Sources */, 4B7913CC1DFCD80E00175A82 /* Video.cpp in Sources */, + 4BDA00E622E699B000AC3CD0 /* CSMachine.mm in Sources */, 4B4518831F75E91A00926311 /* PCMTrack.cpp in Sources */, 4B45189F1F75FD1C00926311 /* AcornADF.cpp in Sources */, 4B7136911F789C93008B8ED9 /* SegmentParser.cpp in Sources */, @@ -4219,7 +4218,6 @@ 4BF437EE209D0F7E008CBD6B /* SegmentParser.cpp in Sources */, 4B8334861F5DA3780097E338 /* 6502Storage.cpp in Sources */, 4B8FE2271DA1DE2D0090D3CE /* NSBundle+DataResource.m in Sources */, - 4B2A53A01D117D36003C6002 /* CSMachine.mm in Sources */, 4BC91B831D1F160E00884B76 /* CommodoreTAP.cpp in Sources */, 4B55DD8320DF06680043F2E5 /* MachinePicker.swift in Sources */, 4B2A539F1D117D36003C6002 /* CSAudioQueue.m in Sources */, diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index edd7ebeb1..20e9bc301 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -153,8 +153,8 @@ class MachineDocument: } // MARK: configuring - var missingROMs: [CSMissingROM] = [] - var selectedMachine: CSStaticAnalyser? + fileprivate var missingROMs: [CSMissingROM] = [] + fileprivate var selectedMachine: CSStaticAnalyser? func configureAs(_ analysis: CSStaticAnalyser) { let missingROMs = NSMutableArray() @@ -337,11 +337,25 @@ class MachineDocument: @IBOutlet var romRequesterPanel: NSWindow? @IBOutlet var romRequesterText: NSTextField? @IBOutlet var romReceiverView: CSROMReceiverView? + var romRequestBaseText = "" func requestRoms() { // Load the ROM requester dialogue. Bundle.main.loadNibNamed("ROMRequester", owner: self, topLevelObjects: nil) self.romReceiverView!.delegate = self + self.romRequestBaseText = romRequesterText!.stringValue + // Populate the current absentee list. + populateMissingRomList() + + // Show the thing. + self.windowControllers[0].window?.beginSheet(self.romRequesterPanel!, completionHandler: nil) + } + + @IBAction func cancelRequestROMs(_ sender: NSButton?) { + close() + } + + func populateMissingRomList() { // Fill in the missing details; first build a list of all the individual // line items. var requestLines: [String] = [] @@ -365,14 +379,7 @@ class MachineDocument: requestLines[x].append(".") } } - romRequesterText!.stringValue += requestLines.joined(separator: "\n") - - // Show the thing. - self.windowControllers[0].window?.beginSheet(self.romRequesterPanel!, completionHandler: nil) - } - - @IBAction func cancelRequestROMs(_ sender: NSButton?) { - close() + romRequesterText!.stringValue = self.romRequestBaseText + requestLines.joined(separator: "\n") } func romReceiverView(_ view: CSROMReceiverView, didReceiveFileAt URL: URL) { @@ -396,7 +403,19 @@ class MachineDocument: // This ROM matches; copy it into the application library, // strike it from the missing ROM list and decide how to // proceed. - Swift.print("Matches") + let fileManager = FileManager.default + let targetPath = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0] + .appendingPathComponent("ROMImages") + .appendingPathComponent(missingROM.machineName) + let targetFile = targetPath + .appendingPathComponent(missingROM.fileName) + + do { + try fileManager.createDirectory(atPath: targetPath.path, withIntermediateDirectories: true, attributes: nil) + try trimmedData.write(to: targetFile) + } catch let error { + Swift.print("Some sort of error \(error)") + } self.missingROMs.remove(at: index) break @@ -407,7 +426,10 @@ class MachineDocument: } if self.missingROMs.count == 0 { - Swift.print("Should start") + self.windowControllers[0].window?.endSheet(self.romRequesterPanel!) + configureAs(self.selectedMachine!) + } else { + populateMissingRomList() } } catch let error { Swift.print("TODO: couldn't open \(URL.absoluteString); \(error)")