]> git.r.bdr.sh - rbdr/map/blob - Map/Data/MapDocument.swift
317c39d726d12355794ef9c397033a011cd92372
[rbdr/map] / Map / Data / MapDocument.swift
1 /*
2 Copyright (C) 2024 Rubén Beltrán del Río
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see https://map.tranquil.systems.
16 */
17 import SwiftUI
18 import UniformTypeIdentifiers
19
20 extension UTType {
21 static var exampleText: UTType {
22 UTType(importedAs: "systems.tranquil.map.wmap")
23 }
24 }
25
26 struct MapDocument: FileDocument {
27 var text: String
28
29 init(text: String = "Hello, world!") {
30 self.text = text
31 }
32
33 static var readableContentTypes: [UTType] { [.exampleText] }
34
35 init(configuration: ReadConfiguration) throws {
36 guard let data = configuration.file.regularFileContents,
37 let string = String(data: data, encoding: .utf8)
38 else {
39 throw CocoaError(.fileReadCorruptFile)
40 }
41 text = string
42 }
43
44 func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
45 let data = text.data(using: .utf8)!
46 return .init(regularFileWithContents: data)
47 }
48
49 @MainActor
50 func exportAsImage(withEvolution selectedEvolution: StageType) -> NSImage? {
51 let renderView = MapRenderView(
52 document: .constant(self),
53 evolution: .constant(selectedEvolution))
54 let renderer = ImageRenderer(content: renderView)
55
56 return renderer.nsImage
57 }
58 }