aboutsummaryrefslogtreecommitdiff
path: root/Map/Data/MapDocument.swift
blob: 9340684e428a8d2e5d6d77b9bca5d04e0bd87017 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import SwiftUI
import UniformTypeIdentifiers

extension UTType {
  static var exampleText: UTType {
    UTType(importedAs: "systems.tranquil.map.wmap")
  }
}

struct MapDocument: FileDocument {
  var text: String

  init(text: String = "Hello, world!") {
    self.text = text
  }

  static var readableContentTypes: [UTType] { [.exampleText] }

  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
  }
}