TM-SGNL-iOS/SignalUI/ImageEditor/ImageEditorContents.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

63 lines
1.5 KiB
Swift

//
// Copyright 2019 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalServiceKit
// ImageEditorContents represents a snapshot of canvas
// state.
//
// Instances of ImageEditorContents should be treated
// as immutable, once configured.
class ImageEditorContents {
typealias ItemMapType = OrderedDictionary<String, ImageEditorItem>
// This represents the current state of each item,
// a mapping of [itemId : item].
private(set) var itemMap: ItemMapType
// Used to clone copies of instances of this class.
init(itemMap: ItemMapType? = nil) {
self.itemMap = itemMap ?? ItemMapType()
}
// Since the contents are immutable, we only modify copies
// made with this method.
func clone() -> ImageEditorContents {
return ImageEditorContents(itemMap: itemMap)
}
func item(forId itemId: String) -> ImageEditorItem? {
return itemMap[itemId]
}
func append(item: ImageEditorItem) {
itemMap.append(key: item.itemId, value: item)
}
func replace(item: ImageEditorItem) {
itemMap.replace(key: item.itemId, value: item)
}
func remove(item: ImageEditorItem) {
itemMap.remove(key: item.itemId)
}
func remove(itemId: String) {
itemMap.remove(key: itemId)
}
func itemCount() -> Int {
return itemMap.count
}
func items() -> [ImageEditorItem] {
return itemMap.orderedValues
}
func itemIds() -> [String] {
return itemMap.orderedKeys
}
}