// Copyright (C) 2024 Rubén Beltrán del Río // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see https://map.tranquil.systems. import SwiftUI import UniformTypeIdentifiers extension UTType { static var wmap: UTType { UTType(importedAs: "systems.tranquil.map.wmap") } } struct MapDocument: FileDocument { var text: String init( text: String = """ Anchor (60, 5) [x] Node A (78, 23) Node B (40, 30) [square] Node C (65, 70) Anchor -> Node A Anchor -> Node B Node A -> Node C Node B -> Node C """ ) { self.text = text } static var readableContentTypes: [UTType] { [.wmap] } init(configuration: ReadConfiguration) throws { guard let data = configuration.file.regularFileContents, let string = String(data: data, encoding: .utf8) else { throw CocoaError(.fileReadCorruptFile) } text = string } func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper { let data = text.data(using: .utf8)! return .init(regularFileWithContents: data) } @MainActor func exportAsImage(withEvolution selectedEvolution: StageType) -> NSImage? { let renderView = MapRenderView( document: .constant(self), evolution: .constant(selectedEvolution)) let renderer = ImageRenderer(content: renderView) return renderer.nsImage } }