mvm_core_ui/MVMCoreUI/Styles/Facade.swift
2020-04-30 14:40:33 -04:00

189 lines
8.9 KiB
Swift

//
// Facade.swift
// MVMCoreUI
//
// Created by Kevin Christiano on 4/30/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import Foundation
public typealias FacadeElements = (fill: UIColor?, text: UIColor?, border: UIColor?)
public class Facade: Codable {
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
public var isInverted: Bool = false
public lazy var enabled: FacadeElements = (fill: enabled_fillColor(),
text: enabled_textColor(),
border: enabled_borderColor())
public lazy var disabled: FacadeElements = (fill: disabled_fillColor(),
text: disabled_textColor(),
border: disabled_borderColor())
public var backgroundColor_standard: Color?
public var backgroundColor_inverted: Color?
public var enabledFillColor: Color?
public var enabledTextColor: Color?
public var enabledBorderColor: Color?
public var enabledFillColor_inverted: Color?
public var enabledTextColor_inverted: Color?
public var enabledBorderColor_inverted: Color?
public var disabledFillColor: Color?
public var disabledTextColor: Color?
public var disabledBorderColor: Color?
public var disabledFillColor_inverted: Color?
public var disabledTextColor_inverted: Color?
public var disabledBorderColor_inverted: Color?
public var borderWidth: CGFloat?
public var borderWidth_inverted: CGFloat?
//--------------------------------------------------
// MARK: - Initializer
//--------------------------------------------------
public init(isInverted: Bool = false,
backgroundColor_standard: Color? = nil,
backgroundColor_inverted: Color? = nil,
enabledFillColor: Color? = nil,
enabledTextColor: Color? = nil,
enabledBorderColor: Color? = nil,
disabledFillColor: Color? = nil,
disabledTextColor: Color? = nil,
disabledBorderColor: Color? = nil,
enabledFillColor_inverted: Color? = nil,
enabledTextColor_inverted: Color? = nil,
enabledBorderColor_inverted: Color? = nil,
disabledFillColor_inverted: Color? = nil,
disabledTextColor_inverted: Color? = nil,
disabledBorderColor_inverted: Color? = nil,
borderWidth: CGFloat? = nil,
borderWidth_inverted: CGFloat? = nil) {
self.isInverted = isInverted
self.backgroundColor_standard = backgroundColor_standard
self.backgroundColor_inverted = backgroundColor_inverted
self.enabledFillColor = enabledFillColor
self.enabledTextColor = enabledTextColor
self.enabledBorderColor = enabledBorderColor
self.disabledFillColor = disabledFillColor
self.disabledTextColor = disabledTextColor
self.disabledBorderColor = disabledBorderColor
self.enabledFillColor_inverted = enabledFillColor_inverted
self.enabledTextColor_inverted = enabledTextColor_inverted
self.enabledBorderColor_inverted = enabledBorderColor_inverted
self.disabledFillColor_inverted = disabledFillColor_inverted
self.disabledTextColor_inverted = disabledTextColor_inverted
self.disabledBorderColor_inverted = disabledBorderColor_inverted
self.borderWidth = borderWidth
self.borderWidth_inverted = borderWidth_inverted
}
//--------------------------------------------------
// MARK: - Methods
//--------------------------------------------------
public func backgroundColor() -> UIColor? {
return (isInverted ? backgroundColor_inverted : backgroundColor_standard)?.uiColor
}
public func getBorderWidth() -> CGFloat? {
return isInverted ? borderWidth_inverted : borderWidth
}
public func enabled_fillColor() -> UIColor? {
return (isInverted ? enabledFillColor_inverted : enabledFillColor)?.uiColor
}
public func enabled_textColor() -> UIColor? {
return (isInverted ? enabledTextColor_inverted : enabledTextColor)?.uiColor
}
public func enabled_borderColor() -> UIColor? {
return (isInverted ? enabledBorderColor_inverted : enabledBorderColor)?.uiColor
}
public func disabled_fillColor() -> UIColor? {
return (isInverted ? disabledFillColor_inverted : disabledFillColor)?.uiColor
}
public func disabled_textColor() -> UIColor? {
return (isInverted ? disabledTextColor_inverted : disabledTextColor)?.uiColor
}
public func disabled_borderColor() -> UIColor? {
return (isInverted ? disabledBorderColor_inverted : disabledBorderColor)?.uiColor
}
//--------------------------------------------------
// MARK: - Keys
//--------------------------------------------------
private enum CodingKeys: String, CodingKey {
case backgroundColor_standard
case backgroundColor_inverted
case enabledFillColor
case enabledTextColor
case enabledBorderColor
case enabledFillColor_inverted
case enabledTextColor_inverted
case enabledBorderColor_inverted
case disabledFillColor
case disabledTextColor
case disabledBorderColor
case disabledFillColor_inverted
case disabledTextColor_inverted
case disabledBorderColor_inverted
}
//--------------------------------------------------
// MARK: - Codec
//--------------------------------------------------
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
backgroundColor_standard = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor_standard)
backgroundColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor_inverted)
enabledFillColor = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledFillColor)
enabledTextColor = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledTextColor)
enabledBorderColor = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledBorderColor)
enabledFillColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledFillColor_inverted)
enabledTextColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledTextColor_inverted)
enabledBorderColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledBorderColor_inverted)
disabledFillColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledFillColor)
disabledTextColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledTextColor)
disabledBorderColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledBorderColor)
disabledFillColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledFillColor_inverted)
disabledTextColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledTextColor_inverted)
disabledBorderColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledBorderColor_inverted)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(backgroundColor_standard, forKey: .backgroundColor_standard)
try container.encodeIfPresent(backgroundColor_inverted, forKey: .backgroundColor_inverted)
try container.encodeIfPresent(enabledFillColor, forKey: .enabledFillColor)
try container.encodeIfPresent(enabledTextColor, forKey: .enabledTextColor)
try container.encodeIfPresent(enabledBorderColor, forKey: .enabledBorderColor)
try container.encodeIfPresent(enabledFillColor_inverted, forKey: .enabledFillColor_inverted)
try container.encodeIfPresent(enabledTextColor_inverted, forKey: .enabledTextColor_inverted)
try container.encodeIfPresent(enabledBorderColor_inverted, forKey: .enabledBorderColor_inverted)
try container.encodeIfPresent(disabledFillColor, forKey: .disabledFillColor)
try container.encodeIfPresent(disabledTextColor, forKey: .disabledTextColor)
try container.encodeIfPresent(disabledBorderColor, forKey: .disabledBorderColor)
try container.encodeIfPresent(disabledFillColor_inverted, forKey: .disabledFillColor_inverted)
try container.encodeIfPresent(disabledTextColor_inverted, forKey: .disabledTextColor_inverted)
try container.encodeIfPresent(disabledBorderColor_inverted, forKey: .disabledBorderColor_inverted)
}
}