From bdda06629f253c451326be363637215181655d19 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Thu, 2 Apr 2020 11:47:47 -0400 Subject: [PATCH] arrow updates. --- MVMCoreUI/Atomic/Atoms/Views/Arrow.swift | 29 ++++++++++++++- MVMCoreUI/Atomic/Atoms/Views/ArrowModel.swift | 36 +++++++++---------- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Arrow.swift b/MVMCoreUI/Atomic/Atoms/Views/Arrow.swift index c37e4c02..23bd259d 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Arrow.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Arrow.swift @@ -20,6 +20,33 @@ open class Arrow: View { return model as? ArrowModel } + open var isEnabled: Bool = true { + didSet { + isUserInteractionEnabled = isEnabled + setNeedsDisplay() + } + } + + open var disabledColor: UIColor { + get { return arrowModel?.disabledColor.uiColor ?? .mvmCoolGray3 } + set { arrowModel?.disabledColor = Color(uiColor: newValue) } + } + + open var color: UIColor { + get { return arrowModel?.color.uiColor ?? .mvmBlack } + set { arrowModel?.color = Color(uiColor: newValue) } + } + + open var degrees: Float { + get { return arrowModel?.degrees ?? 0 } + set { arrowModel?.degrees = newValue } + } + + open var lineWidth: CGFloat { + get { return arrowModel?.lineWidth ?? 1 } + set { arrowModel?.lineWidth = newValue } + } + //-------------------------------------------------- // MARK: - Constraints //-------------------------------------------------- @@ -88,7 +115,7 @@ open class Arrow: View { private func drawShapeLayer() { arrowLayer.frame = bounds - arrowLayer.strokeColor = arrowModel?.color.cgColor + arrowLayer.strokeColor = isEnabled ? arrowModel?.color.cgColor : arrowModel?.disabledColor.cgColor arrowLayer.fillColor = UIColor.clear.cgColor arrowLayer.path = arrowPath() arrowLayer.lineJoin = .miter diff --git a/MVMCoreUI/Atomic/Atoms/Views/ArrowModel.swift b/MVMCoreUI/Atomic/Atoms/Views/ArrowModel.swift index 61afd465..eea37df8 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/ArrowModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/ArrowModel.swift @@ -20,22 +20,20 @@ open class ArrowModel: MoleculeModelProtocol { public var moleculeName: String? public var backgroundColor: Color? - - public var enabledColor: Color? - public var disabledColor: Color? + public var disabledColor: Color = Color(uiColor: .mvmCoolGray3) public var color: Color = Color(uiColor: .mvmBlack) public var degrees: Float = 0 public var lineWidth: CGFloat = 1 - public var height: CGFloat = 12 public var width: CGFloat = 12 + public var isEnabled: Bool = true //-------------------------------------------------- // MARK: - Initializer //-------------------------------------------------- public init() { } - + //-------------------------------------------------- // MARK: - Keys //-------------------------------------------------- @@ -43,14 +41,13 @@ open class ArrowModel: MoleculeModelProtocol { private enum CodingKeys: String, CodingKey { case moleculeName case backgroundColor - case enabledColor case disabledColor case color case degrees - case size case lineWidth case height case width + case isEnabled } //-------------------------------------------------- @@ -59,17 +56,21 @@ open class ArrowModel: MoleculeModelProtocol { required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) - - backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) - disabledColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledColor) - enabledColor = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledColor) - + backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) + if let disabledColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledColor) { + self.disabledColor = disabledColor + } + if let color = try typeContainer.decodeIfPresent(Color.self, forKey: .color) { self.color = color } + if let isEnabled = try typeContainer.decodeIfPresent(Bool.self, forKey: .isEnabled) { + self.isEnabled = isEnabled + } + if let degrees = try typeContainer.decodeIfPresent(Float.self, forKey: .degrees) { self.degrees = degrees } @@ -79,7 +80,7 @@ open class ArrowModel: MoleculeModelProtocol { } if let height = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .height) { - self.lineWidth = height + self.height = height } if let width = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .width) { @@ -89,17 +90,14 @@ open class ArrowModel: MoleculeModelProtocol { public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) - try container.encodeIfPresent(enabledColor, forKey: .enabledColor) try container.encode(moleculeName, forKey: .moleculeName) - try container.encodeIfPresent(disabledColor, forKey: .disabledColor) - try container.encode(moleculeName, forKey: .moleculeName) - try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) + try container.encode(disabledColor, forKey: .disabledColor) try container.encode(color, forKey: .color) try container.encode(degrees, forKey: .degrees) - try container.encodeIfPresent(backgroundColor, forKey: .lineWidth) + try container.encode(lineWidth, forKey: .lineWidth) try container.encode(width, forKey: .width) try container.encode(height, forKey: .height) + try container.encode(isEnabled, forKey: .isEnabled) } }