Line and image update

This commit is contained in:
Pfeil, Scott Robert 2020-01-09 11:38:32 -05:00
parent d651fb5783
commit 3e8b69a0bc
8 changed files with 88 additions and 54 deletions

View File

@ -10,7 +10,6 @@ import Foundation
@objcMembers public class ImageViewModel: MoleculeProtocol {
public static var identifier: String = "image"
public var moleculeName: String
public var backgroundColor: Color?
public var image: String

View File

@ -13,5 +13,4 @@ import UIKit
public var backgroundColor: Color?
public var leftText: LabelModel
public var rightText: LabelModel
}

View File

@ -9,42 +9,35 @@
import UIKit
@objcMembers open class Line: View {
var lineModel: LineModel? {
get { return model as? LineModel }
}
public var heightConstraint: NSLayoutConstraint?
public enum Style: String, Codable {
case standard
case thin
case medium
case heavy
case none
}
public var style = Style.standard {
didSet {
switch style {
case .standard:
heightConstraint?.constant = 1
backgroundColor = .mfSilver()
case .thin:
heightConstraint?.constant = 1
backgroundColor = .black
case .medium:
heightConstraint?.constant = 2
backgroundColor = .black
case .heavy:
heightConstraint?.constant = 4
backgroundColor = .black
case .none:
heightConstraint?.constant = 0
}
open func setStyle(_ style: LineModel.Style) {
switch style {
case .standard:
heightConstraint?.constant = 1
backgroundColor = .mfSilver()
case .thin:
heightConstraint?.constant = 1
backgroundColor = .black
case .medium:
heightConstraint?.constant = 2
backgroundColor = .black
case .heavy:
heightConstraint?.constant = 4
backgroundColor = .black
case .none:
heightConstraint?.constant = 0
}
}
// MARK: - Helpers
open func shouldBeVisible() -> Bool {
guard let type = json?.optionalStringForKey(KeyType) else { return false }
return type != "none"
guard let type = lineModel?.type else { return false }
return type != .none
}
public convenience init(pinTo view: UIView, edge: UIRectEdge, useMargin: Bool) {
@ -56,26 +49,33 @@ import UIKit
// MARK: - MVMCoreViewProtocol
open override func setupView() {
super.setupView()
backgroundColor = .black
heightConstraint = heightAnchor.constraint(equalToConstant: 1)
heightConstraint?.isActive = true
setStyle(.standard)
}
// MARK: - MVMCoreUIMoleculeViewProtocol
open override func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) {
// If no type, default to standard.
if let typeString = json?.optionalStringForKey(KeyType), let type = Style.init(rawValue: typeString) {
style = type
if let typeString = json?.optionalStringForKey(KeyType), let type = LineModel.Style.init(rawValue: typeString) {
setStyle(type)
} else {
style = .standard
setStyle(.standard)
}
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
}
open override func setWithModel(_ model: MoleculeProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [String : AnyHashable]?) {
if let lineModel = model as? LineModel {
setStyle(lineModel.type ?? .standard)
}
super.setWithModel(model, delegateObject, additionalData)
}
open override func reset() {
style = .standard
setStyle(.standard)
}
open func copyBackgroundColor() -> Bool {
@ -83,7 +83,7 @@ import UIKit
}
public static func estimatedHeight(forRow json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat {
guard let type = json?.optionalStringForKey(KeyType), let style = Style(rawValue: type) else { return 1 }
guard let type = json?.optionalStringForKey(KeyType), let style = LineModel.Style(rawValue: type) else { return 1 }
switch style {
case .none:
return 0

View File

@ -29,7 +29,7 @@ import UIKit
let navigationController = self.init()
style(navigationController.navigationBar)
navigationController.separatorView = Line(pinTo: navigationController.navigationBar, edge: .bottom, useMargin: false)
navigationController.separatorView?.style = .standard
navigationController.separatorView?.setStyle(.standard)
MVMCoreUISession.sharedGlobal()?.navigationController = navigationController
MVMCoreNavigationHandler.shared()?.viewControllerToPresentOn = navigationController
MVMCoreNavigationHandler.shared()?.navigationController = navigationController

View File

@ -9,7 +9,43 @@
import UIKit
@objcMembers public class LineModel: MoleculeProtocol {
/*
The frequency of the line in a moleculeList.
all (between all cells, above top, below bottom)
allExceptTop (between all cells, below bottom)
allExceptBottom (between all cells, above top)
between (between all cells)
*/
public enum Frequency: String, Codable {
case all
case allExceptTop
case allExceptBottom
case between
}
/*
The style of the line.
standard (1 height, silver)
thin (1 height, black)
medium (2 height, black)
heavy (4 height, black)
none (hidden)
*/
public enum Style: String, Codable {
case standard
case thin
case medium
case heavy
case none
}
public static var identifier: String = "line"
public var type: Style? = .standard
public var frequency: Frequency? = .allExceptTop
public var backgroundColor: Color?
public var type: String?
public init(type: Style) {
self.type = type
}
}

View File

@ -53,7 +53,7 @@ import UIKit
}
public override func setWithModel(_ model: MoleculeProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [String : AnyHashable]?) {
bottomSeparatorView?.style = .none
bottomSeparatorView?.setStyle(.none)
self.delegateObject = delegateObject
super.setWithModel(model, delegateObject, additionalData)
@ -65,6 +65,6 @@ import UIKit
public override func reset() {
super.reset()
bottomMarginPadding = 0
bottomSeparatorView?.style = .none
bottomSeparatorView?.setStyle(.none)
}
}

View File

@ -62,29 +62,29 @@ import UIKit
open func styleStandard() {
topMarginPadding = 24
bottomMarginPadding = 24
topSeparatorView?.style = .none
bottomSeparatorView?.style = .standard
topSeparatorView?.setStyle(.none)
bottomSeparatorView?.setStyle(.standard)
}
open func styleHeader() {
topMarginPadding = 48
bottomMarginPadding = 16
topSeparatorView?.style = .none
bottomSeparatorView?.style = .thin
topSeparatorView?.setStyle(.none)
bottomSeparatorView?.setStyle(.thin)
}
open func styleFooter() {
topMarginPadding = 24
bottomMarginPadding = 0
topSeparatorView?.style = .none
bottomSeparatorView?.style = .none
topSeparatorView?.setStyle(.none)
bottomSeparatorView?.setStyle(.none)
}
open func styleNone() {
topMarginPadding = 0
bottomMarginPadding = 0
topSeparatorView?.style = .none
bottomSeparatorView?.style = .none
topSeparatorView?.setStyle(.none)
bottomSeparatorView?.setStyle(.none)
}
/// Adds the molecule to the view.
@ -264,8 +264,8 @@ import UIKit
setSeparatorFrequency(separatorFrequency, indexPath: indexPath)
}
} else {
topSeparatorView?.style = .standard
bottomSeparatorView?.style = .standard
topSeparatorView?.setStyle(.standard)
bottomSeparatorView?.setStyle(.standard)
setSeparatorFrequency(TableViewCell.SeparatorFrequency.allExceptTop, indexPath: indexPath)
}
}
@ -285,7 +285,7 @@ import UIKit
open func addSeparatorsIfNeeded() {
if topSeparatorView == nil {
let line = Line()
line.style = .none
line.setStyle(.none)
addSubview(line)
NSLayoutConstraint.pinViewTop(toSuperview: line, useMargins: false, constant: 0).isActive = true
NSLayoutConstraint.pinViewLeft(toSuperview: line, useMargins: true, constant: 0).isActive = true
@ -294,7 +294,7 @@ import UIKit
}
if bottomSeparatorView == nil {
let line = Line()
line.style = .none
line.setStyle(.none)
addSubview(line)
NSLayoutConstraint.pinViewBottom(toSuperview: line, useMargins: false, constant: 0).isActive = true
NSLayoutConstraint.pinViewLeft(toSuperview: line, useMargins: true, constant: 0).isActive = true

View File

@ -26,7 +26,7 @@ public class StandardHeaderView: MoleculeContainer {
guard line == nil else { return }
let line = Line()
line.style = .heavy
line.setStyle(.heavy)
addSubview(line)
NSLayoutConstraint.pinViewBottom(toSuperview: line, useMargins: false, constant: 0).isActive = true
NSLayoutConstraint.pinViewLeft(toSuperview: line, useMargins: true, constant: 0).isActive = true
@ -56,7 +56,7 @@ public class StandardHeaderView: MoleculeContainer {
open override func reset() {
super.reset()
line?.style = .heavy
line?.setStyle(.heavy)
}
public class func estimatedHeight(forRow json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat {