ios/SpectrumKitSample/SpectrumKitSample-iOS/ConfigurationViewModel.swift (146 lines of code) (raw):

// Copyright (c) Facebook, Inc. and its affiliates. // // This source code is licensed under the MIT license found in the // LICENSE file in the root directory of this source tree. import Foundation protocol ConfigurationViewModelDelegate: class { func viewModelDidUpdate(_ viewModel: ConfigurationViewModel) } protocol ConfigurationViewModelInternalDelegate: class { func internalViewModelDidUpdate(_ viewModel: Any) } final class ConfigurationViewModel: ConfigurationViewModelInternalDelegate { // MARK: Public Types class General { // MARK: - Public Properties weak var delegate: ConfigurationViewModelInternalDelegate? var defaultBackgroundColor: DefaultBackgroundColor { get { return DefaultBackgroundColor(color: self.configuration.defaultBackgroundColor) } set { self.configuration.defaultBackgroundColor = newValue.color self.delegate?.internalViewModelDidUpdate(self) } } var interpretMetadata: Bool { get { return self.configuration.interpretMetadata } set { self.configuration.interpretMetadata = newValue self.delegate?.internalViewModelDidUpdate(self) } } var propagateChromaSamplingModeFromSource: Bool { get { return self.configuration.propagateChromaSamplingModeFromSource } set { self.configuration.propagateChromaSamplingModeFromSource = newValue self.delegate?.internalViewModelDidUpdate(self) } } var chromaSamplingModeOverride: ConfigurationChromaSamplingMode { get { return self.configuration.chromaSamplingModeOverride } set { self.configuration.chromaSamplingModeOverride = newValue self.delegate?.internalViewModelDidUpdate(self) } } // MARK: - Private Properties private let configuration: ConfigurationGeneral // MARK: - Public Methods init(configuration: ConfigurationGeneral) { self.configuration = configuration } } class Jpeg { // MARK: - Public Properties weak var delegate: ConfigurationViewModelInternalDelegate? var useTrellis: Bool { get { return self.configuration.useTrellis } set { self.configuration.useTrellis = newValue self.delegate?.internalViewModelDidUpdate(self) } } var useProgressive: Bool { get { return self.configuration.useProgressive } set { self.configuration.useProgressive = newValue self.delegate?.internalViewModelDidUpdate(self) } } var useOptimizeScan: Bool { get { return self.configuration.useOptimizeScan } set { self.configuration.useOptimizeScan = newValue self.delegate?.internalViewModelDidUpdate(self) } } var useCompatibleDCScanOption: Bool { get { return self.configuration.useCompatibleDCScanOption } set { self.configuration.useCompatibleDCScanOption = newValue self.delegate?.internalViewModelDidUpdate(self) } } var usePSNRQuantTable: Bool { get { return self.configuration.usePSNRQuantTable } set { self.configuration.usePSNRQuantTable = newValue self.delegate?.internalViewModelDidUpdate(self) } } // MARK: - Private Properties private let configuration: ConfigurationJpeg // MARK: - Public Methods init(configuration: ConfigurationJpeg) { self.configuration = configuration } } class Png { // MARK: - Public Properties weak var delegate: ConfigurationViewModelInternalDelegate? var useInterlacing: Bool { get { return self.configuration.useInterlacing } set { self.configuration.useInterlacing = newValue self.delegate?.internalViewModelDidUpdate(self) } } var compressionLevel: CompressionLevel { get { return CompressionLevel(rawValue: self.configuration.compressionLevel)! } set { self.configuration.compressionLevel = newValue.rawValue self.delegate?.internalViewModelDidUpdate(self) } } // MARK: - Private Properties private let configuration: ConfigurationPng // MARK: - Public Methods init(configuration: ConfigurationPng) { self.configuration = configuration } } class Webp { // MARK: - Public Properties weak var delegate: ConfigurationViewModelInternalDelegate? var method: WebpMethod { get { return WebpMethod(rawValue: self.configuration.method)! } set { self.configuration.method = newValue.rawValue self.delegate?.internalViewModelDidUpdate(self) } } var imageHint: ConfigurationWebpImageHint { get { return self.configuration.imageHint } set { self.configuration.imageHint = newValue self.delegate?.internalViewModelDidUpdate(self) } } // MARK: - Private Properties private let configuration: ConfigurationWebp // MARK: - Public Methods init(configuration: ConfigurationWebp) { self.configuration = configuration } } // MARK: Public Properties let general: General let jpeg: Jpeg let png: Png let webp: Webp weak var delegate: ConfigurationViewModelDelegate? // MARK: Public Methods init(configuration: Configuration) { self.general = General(configuration: configuration.general) self.jpeg = Jpeg(configuration: configuration.jpeg) self.png = Png(configuration: configuration.png) self.webp = Webp(configuration: configuration.webp) self.general.delegate = self self.jpeg.delegate = self self.png.delegate = self self.webp.delegate = self } // MARK: - ConfigurationViewModelInternalDelegate func internalViewModelDidUpdate(_: Any) { self.delegate?.viewModelDidUpdate(self) } }