diff --git a/MVMCoreUI/Atomic/Atoms/Views/CaretView.swift b/MVMCoreUI/Atomic/Atoms/Views/CaretView.swift index b3081654..b9de9b3a 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CaretView.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CaretView.swift @@ -140,7 +140,7 @@ open class CaretView: View { caretPath.addLine(to: CGPoint(x: frame.size.width - inset, y: frame.size.height - inset)) } - enabledColor.setStroke() + _ = isEnabled ? enabledColor.setStroke() : disabledColor.setStroke() caretPath.stroke() } @@ -160,6 +160,7 @@ open class CaretView: View { isHidden = false backgroundColor = .clear enabledColor = .mvmBlack + disabledColor = .mvmCoolGray3 } /// Ensure you have defined a CaretSize with Orientation before calling. diff --git a/MVMCoreUI/Atomic/Atoms/Views/ImageViewModel.swift b/MVMCoreUI/Atomic/Atoms/Views/ImageViewModel.swift index 57a82052..6cf019ca 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/ImageViewModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/ImageViewModel.swift @@ -21,6 +21,7 @@ import Foundation public var contentMode: UIView.ContentMode? public var localBundle: Bundle? public var cornerRadius: CGFloat? + public var clipsImage: Bool? public init(image: String, imageFormat: String? = nil, width: CGFloat? = nil, height: CGFloat? = nil) { self.image = image @@ -40,5 +41,6 @@ import Foundation case height case contentMode case cornerRadius + case clipsImage } } diff --git a/MVMCoreUI/Atomic/Atoms/Views/LoadImageView.swift b/MVMCoreUI/Atomic/Atoms/Views/LoadImageView.swift index 532056cb..42267a20 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/LoadImageView.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/LoadImageView.swift @@ -254,6 +254,10 @@ import UIKit clipsToBounds = true layer.cornerRadius = cornerRadius } + + if let clipsImage = imageModel.clipsImage { + clipsToBounds = clipsImage + } } // MARK: - load functions diff --git a/MVMCoreUI/Atomic/Molecules/Items/AccordionListItemModel.swift b/MVMCoreUI/Atomic/Molecules/Items/AccordionListItemModel.swift index ac299a8b..cd2c12aa 100644 --- a/MVMCoreUI/Atomic/Molecules/Items/AccordionListItemModel.swift +++ b/MVMCoreUI/Atomic/Molecules/Items/AccordionListItemModel.swift @@ -9,12 +9,21 @@ import UIKit class AccordionListItemModel: MoleculeListItemModel { + //-------------------------------------------------- + // MARK: - Properties + //-------------------------------------------------- + override public class var identifier: String { return "accordionListItem" - } + } + public var molecules: [ListItemModelProtocol & MoleculeModelProtocol] public var hideLineWhenExpanded: Bool = false + //-------------------------------------------------- + // MARK: - Keys + //-------------------------------------------------- + private enum CodingKeys: String, CodingKey { case moleculeName case molecules @@ -22,11 +31,19 @@ class AccordionListItemModel: MoleculeListItemModel { case hideLineWhenExpanded } + //-------------------------------------------------- + // MARK: - Methods + //-------------------------------------------------- + public override func setDefaults() { super.setDefaults() hideArrow = true } + //-------------------------------------------------- + // MARK: - Codec + //-------------------------------------------------- + required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) molecules = try typeContainer.decodeModels(codingKey: .molecules) diff --git a/MVMCoreUI/Atomic/Molecules/Items/AccordionMoleculeTableViewCell.swift b/MVMCoreUI/Atomic/Molecules/Items/AccordionMoleculeTableViewCell.swift index f6e6dd6f..8488703d 100644 --- a/MVMCoreUI/Atomic/Molecules/Items/AccordionMoleculeTableViewCell.swift +++ b/MVMCoreUI/Atomic/Molecules/Items/AccordionMoleculeTableViewCell.swift @@ -8,20 +8,29 @@ import UIKit + @objcMembers public class AccordionMoleculeTableViewCell: MoleculeTableViewCell { + //-------------------------------------------------- + // MARK: - Properties + //-------------------------------------------------- + var accordionListItemModel: AccordionListItemModel? { return listItemModel as? AccordionListItemModel } - let accordionButton = createAccordionButton() - static func createAccordionButton() -> Button { + let accordionButton: Button = { let accordionButton = Button(type: .custom) accordionButton.setTitle("+", for: .normal) accordionButton.setTitleColor(.black, for: .normal) accordionButton.titleLabel?.font = UIFont.systemFont(ofSize: 40, weight: .ultraLight) accordionButton.frame = CGRect(x: 0, y: 0, width: 20, height: 20) + accordionButton.translatesAutoresizingMaskIntoConstraints = true return accordionButton - } + }() + + //-------------------------------------------------- + // MARK: - Setup + //-------------------------------------------------- override public func setupView() { customAccessoryView = true @@ -29,11 +38,13 @@ import UIKit accessoryView = accordionButton } - override public func didSelectCell(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) { - accordionButton.isSelected = !accordionButton.isSelected + override public func didSelectCell(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { + + accordionButton.isSelected.toggle() accordionButton.setTitle(accordionButton.isSelected ? "-" : "+", for: .normal) + guard let model = accordionListItemModel else { return } - + if accordionButton.isSelected { if let indexPath = delegateObject?.moleculeDelegate?.getIndexPath(for: model) { delegateObject?.moleculeDelegate?.addMolecules(model.molecules, indexPath: indexPath, animation: .automatic) diff --git a/MVMCoreUI/Atomic/Molecules/OtherContainers/BGImageMolecule.swift b/MVMCoreUI/Atomic/Molecules/OtherContainers/BGImageMolecule.swift index 1c39975e..4aa811a1 100644 --- a/MVMCoreUI/Atomic/Molecules/OtherContainers/BGImageMolecule.swift +++ b/MVMCoreUI/Atomic/Molecules/OtherContainers/BGImageMolecule.swift @@ -10,7 +10,7 @@ import Foundation open class BGImageMolecule: MoleculeContainer { - let image = LoadImageView(pinnedEdges: .all) + public let image = LoadImageView(pinnedEdges: .all) open override func setupView() { super.setupView() diff --git a/MVMCoreUI/Atomic/Molecules/OtherContainers/BGImageMoleculeModel.swift b/MVMCoreUI/Atomic/Molecules/OtherContainers/BGImageMoleculeModel.swift index 83b5931d..2dbfced5 100644 --- a/MVMCoreUI/Atomic/Molecules/OtherContainers/BGImageMoleculeModel.swift +++ b/MVMCoreUI/Atomic/Molecules/OtherContainers/BGImageMoleculeModel.swift @@ -9,7 +9,7 @@ import Foundation open class BGImageMoleculeModel: MoleculeContainerModel { - public override class var identifier: String { + open override class var identifier: String { return "bgImageContainer" } public var image: ImageViewModel @@ -44,7 +44,7 @@ open class BGImageMoleculeModel: MoleculeContainerModel { try super.init(from: decoder) } - public override func encode(to encoder: Encoder) throws { + open override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(image, forKey: .image) diff --git a/MVMCoreUI/BaseClasses/TableViewCell.swift b/MVMCoreUI/BaseClasses/TableViewCell.swift index b391162e..298fa6b0 100644 --- a/MVMCoreUI/BaseClasses/TableViewCell.swift +++ b/MVMCoreUI/BaseClasses/TableViewCell.swift @@ -8,8 +8,12 @@ import UIKit -@objcMembers open class TableViewCell: UITableViewCell, MoleculeViewProtocol, MoleculeListCellProtocol, MVMCoreViewProtocol, MFButtonProtocol { +@objcMembers open class TableViewCell: UITableViewCell, MoleculeViewProtocol, MoleculeListCellProtocol, MVMCoreViewProtocol, MFButtonProtocol { + //-------------------------------------------------- + // MARK: - Properties + //-------------------------------------------------- + open var molecule: MoleculeViewProtocol? open var listItemModel: ListItemModelProtocol? public let containerHelper = ContainerHelper() @@ -30,7 +34,10 @@ import UIKit private var initialSetupPerformed = false + //-------------------------------------------------- // MARK: - Styling + //-------------------------------------------------- + open func styleLine(with style: ListItemStyle?) { switch style { case .standard?: