Commit 90bd4619 by Daniel Dahan

Merge pull request #42 from GraphKit/issue-41

Issue 41
parents a2559db4 ec9ec082
...@@ -42,12 +42,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -42,12 +42,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
/** /**
:name: titleLabelTopInset :name: titleLabelTopInset
*/ */
public var titleLabelTopInset: CGFloat = MaterialTheme.verticalInset public var titleLabelTopInset: CGFloat = MaterialTheme.verticalInset {
didSet {
prepareCard()
}
}
/** /**
:name: titleLabelBottomInset :name: titleLabelBottomInset
*/ */
public var titleLabelBottomInset: CGFloat = MaterialTheme.verticalInset public var titleLabelBottomInset: CGFloat = MaterialTheme.verticalInset {
didSet {
prepareCard()
}
}
/** /**
:name: titleLabelHorizontalInset :name: titleLabelHorizontalInset
...@@ -62,12 +70,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -62,12 +70,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
/** /**
:name: titleLabelLeftInset :name: titleLabelLeftInset
*/ */
public var titleLabelLeftInset: CGFloat = MaterialTheme.horizontalInset public var titleLabelLeftInset: CGFloat = MaterialTheme.horizontalInset {
didSet {
prepareCard()
}
}
/** /**
:name: titleLabelRightInset :name: titleLabelRightInset
*/ */
public var titleLabelRightInset: CGFloat = MaterialTheme.horizontalInset public var titleLabelRightInset: CGFloat = MaterialTheme.horizontalInset {
didSet {
prepareCard()
}
}
/** /**
:name: detailLabelVerticalInset :name: detailLabelVerticalInset
...@@ -82,12 +98,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -82,12 +98,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
/** /**
:name: detailLabelTopInset :name: detailLabelTopInset
*/ */
public var detailLabelTopInset: CGFloat = MaterialTheme.verticalInset public var detailLabelTopInset: CGFloat = MaterialTheme.verticalInset {
didSet {
prepareCard()
}
}
/** /**
:name: detailLabelBottomInset :name: detailLabelBottomInset
*/ */
public var detailLabelBottomInset: CGFloat = MaterialTheme.verticalInset public var detailLabelBottomInset: CGFloat = MaterialTheme.verticalInset {
didSet {
prepareCard()
}
}
/** /**
:name: detailLabelHorizontalInset :name: detailLabelHorizontalInset
...@@ -102,12 +126,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -102,12 +126,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
/** /**
:name: detailLabelLeftInset :name: detailLabelLeftInset
*/ */
public var detailLabelLeftInset: CGFloat = MaterialTheme.horizontalInset public var detailLabelLeftInset: CGFloat = MaterialTheme.horizontalInset {
didSet {
prepareCard()
}
}
/** /**
:name: detailLabelRightInset :name: detailLabelRightInset
*/ */
public var detailLabelRightInset: CGFloat = MaterialTheme.horizontalInset public var detailLabelRightInset: CGFloat = MaterialTheme.horizontalInset {
didSet {
prepareCard()
}
}
/** /**
:name: buttonVerticalInset :name: buttonVerticalInset
...@@ -122,12 +154,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -122,12 +154,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
/** /**
:name: buttonTopInset :name: buttonTopInset
*/ */
public var buttonTopInset: CGFloat = MaterialTheme.verticalInset public var buttonTopInset: CGFloat = MaterialTheme.verticalInset / 2 {
didSet {
prepareCard()
}
}
/** /**
:name: buttonBottomInset :name: buttonBottomInset
*/ */
public var buttonBottomInset: CGFloat = MaterialTheme.verticalInset public var buttonBottomInset: CGFloat = MaterialTheme.verticalInset / 2 {
didSet {
prepareCard()
}
}
/** /**
:name: buttonHorizontalInset :name: buttonHorizontalInset
...@@ -142,17 +182,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -142,17 +182,20 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
/** /**
:name: buttonLeftInset :name: buttonLeftInset
*/ */
public var buttonLeftInset: CGFloat = MaterialTheme.horizontalInset public var buttonLeftInset: CGFloat = MaterialTheme.horizontalInset / 2 {
didSet {
prepareCard()
}
}
/** /**
:name: buttonRightInset :name: buttonRightInset
*/ */
public var buttonRightInset: CGFloat = MaterialTheme.horizontalInset public var buttonRightInset: CGFloat = MaterialTheme.horizontalInset / 2 {
didSet {
/** prepareCard()
:name: titleLabelContainer }
*/ }
public private(set) var titleLabelContainer: UIView?
/** /**
:name: shadow :name: shadow
...@@ -160,10 +203,25 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -160,10 +203,25 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
public var shadow: Bool = true { public var shadow: Bool = true {
didSet { didSet {
false == shadow ? removeShadow() : prepareShadow() false == shadow ? removeShadow() : prepareShadow()
prepareCard()
}
}
/**
:name: maximumTitleLabelHeight
*/
public var maximumTitleLabelHeight: CGFloat = 0 {
didSet {
prepareCard()
} }
} }
/** /**
:name: titleLabelContainer
*/
public private(set) var titleLabelContainer: UIView?
/**
:name: titleLabel :name: titleLabel
*/ */
public var titleLabel: UILabel? { public var titleLabel: UILabel? {
...@@ -180,22 +238,26 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -180,22 +238,26 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
// text // text
titleLabelContainer!.addSubview(t) titleLabelContainer!.addSubview(t)
t.setTranslatesAutoresizingMaskIntoConstraints(false) t.setTranslatesAutoresizingMaskIntoConstraints(false)
t.textColor = MaterialTheme.white.color
t.backgroundColor = MaterialTheme.clear.color t.backgroundColor = MaterialTheme.clear.color
t.font = Roboto.medium t.font = Roboto.medium
t.numberOfLines = 1 t.numberOfLines = 0
t.lineBreakMode = .ByTruncatingTail t.lineBreakMode = .ByTruncatingTail
prepareCard() t.textColor = MaterialTheme.white.color
} else { } else {
titleLabelContainer?.removeFromSuperview() titleLabelContainer?.removeFromSuperview()
} }
prepareCard()
} }
} }
/** /**
:name: maximumDetailLabelHeight :name: maximumDetailLabelHeight
*/ */
public var maximumDetailLabelHeight: CGFloat = 144 public var maximumDetailLabelHeight: CGFloat = 0 {
didSet {
prepareCard()
}
}
/** /**
:name: detailLabelContainer :name: detailLabelContainer
...@@ -224,10 +286,10 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -224,10 +286,10 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
l.font = Roboto.light l.font = Roboto.light
l.numberOfLines = 0 l.numberOfLines = 0
l.lineBreakMode = .ByTruncatingTail l.lineBreakMode = .ByTruncatingTail
prepareCard()
} else { } else {
detailLabelContainer?.removeFromSuperview() detailLabelContainer?.removeFromSuperview()
} }
prepareCard()
} }
} }
...@@ -238,12 +300,12 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -238,12 +300,12 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
didSet { didSet {
if let d = divider { if let d = divider {
d.setTranslatesAutoresizingMaskIntoConstraints(false) d.setTranslatesAutoresizingMaskIntoConstraints(false)
d.backgroundColor = MaterialTheme.blueGrey.color d.backgroundColor = MaterialTheme.blueGrey.darken1
addSubview(d) addSubview(d)
prepareCard()
} else { } else {
divider?.removeFromSuperview() divider?.removeFromSuperview()
} }
prepareCard()
} }
} }
...@@ -264,10 +326,10 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -264,10 +326,10 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
buttonsContainer!.backgroundColor = MaterialTheme.clear.color buttonsContainer!.backgroundColor = MaterialTheme.clear.color
addSubview(buttonsContainer!) addSubview(buttonsContainer!)
} }
prepareCard()
} else { } else {
buttonsContainer?.removeFromSuperview() buttonsContainer?.removeFromSuperview()
} }
prepareCard()
} }
} }
...@@ -283,10 +345,10 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -283,10 +345,10 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
buttonsContainer!.backgroundColor = MaterialTheme.clear.color buttonsContainer!.backgroundColor = MaterialTheme.clear.color
addSubview(buttonsContainer!) addSubview(buttonsContainer!)
} }
prepareCard()
} else { } else {
buttonsContainer?.removeFromSuperview() buttonsContainer?.removeFromSuperview()
} }
prepareCard()
} }
} }
...@@ -329,7 +391,7 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -329,7 +391,7 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
internal override func prepareView() { internal override func prepareView() {
super.prepareView() super.prepareView()
prepareShadow() prepareShadow()
backgroundColor = MaterialTheme.blueGrey.darken1 backgroundColor = MaterialTheme.blueGrey.color
} }
// //
...@@ -337,8 +399,7 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -337,8 +399,7 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
// //
internal override func prepareCard() { internal override func prepareCard() {
super.prepareCard() super.prepareCard()
// clear all constraints
// deactivate and clear all constraints
NSLayoutConstraint.deactivateConstraints(layoutConstraints) NSLayoutConstraint.deactivateConstraints(layoutConstraints)
layoutConstraints.removeAll(keepCapacity: false) layoutConstraints.removeAll(keepCapacity: false)
...@@ -356,8 +417,12 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -356,8 +417,12 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
views["titleLabelContainer"] = titleLabelContainer! views["titleLabelContainer"] = titleLabelContainer!
// common text // common text
Layout.height(titleLabelContainer!, child: titleLabel!, height: 1.5 * titleLabel!.font.pointSize) if 0 == maximumTitleLabelHeight {
Layout.expandToParentWithPad(titleLabelContainer!, child: titleLabel!, top: titleLabelTopInset, left: titleLabelLeftInset, bottom: titleLabelBottomInset, right: titleLabelRightInset) Layout.expandToParentWithPad(titleLabelContainer!, child: titleLabel!, top: titleLabelTopInset, left: titleLabelLeftInset, bottom: titleLabelBottomInset, right: titleLabelRightInset)
} else {
Layout.expandToParentHorizontallyWithPad(titleLabelContainer!, child: titleLabel!, left: titleLabelLeftInset, right: titleLabelRightInset)
titleLabelContainer!.addConstraints(Layout.constraint("V:|-(titleLabelTopInset)-[titleLabel(<=maximumTitleLabelHeight)]-(titleLabelBottomInset)-|", options: nil, metrics: ["titleLabelTopInset": titleLabelTopInset, "titleLabelBottomInset": titleLabelBottomInset, "maximumTitleLabelHeight": maximumTitleLabelHeight], views: ["titleLabel": titleLabel!]))
}
} }
// detail // detail
...@@ -370,10 +435,13 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable { ...@@ -370,10 +435,13 @@ public class BasicCardView : MaterialCardView, Comparable, Equatable {
verticalFormat += "[detailLabelContainer]" verticalFormat += "[detailLabelContainer]"
views["detailLabelContainer"] = detailLabelContainer! views["detailLabelContainer"] = detailLabelContainer!
// text if 0 == maximumDetailLabelHeight {
Layout.expandToParentWithPad(detailLabelContainer!, child: detailLabel!, top: detailLabelTopInset, left: detailLabelLeftInset, bottom: detailLabelBottomInset, right: detailLabelRightInset)
} else {
Layout.expandToParentHorizontallyWithPad(detailLabelContainer!, child: detailLabel!, left: detailLabelLeftInset, right: detailLabelRightInset) Layout.expandToParentHorizontallyWithPad(detailLabelContainer!, child: detailLabel!, left: detailLabelLeftInset, right: detailLabelRightInset)
detailLabelContainer!.addConstraints(Layout.constraint("V:|-(detailLabelTopInset)-[detailLabel(<=maximumDetailLabelHeight)]-(detailLabelBottomInset)-|", options: nil, metrics: ["detailLabelTopInset": detailLabelTopInset, "detailLabelBottomInset": detailLabelBottomInset, "maximumDetailLabelHeight": maximumDetailLabelHeight], views: ["detailLabel": detailLabel!])) detailLabelContainer!.addConstraints(Layout.constraint("V:|-(detailLabelTopInset)-[detailLabel(<=maximumDetailLabelHeight)]-(detailLabelBottomInset)-|", options: nil, metrics: ["detailLabelTopInset": detailLabelTopInset, "detailLabelBottomInset": detailLabelBottomInset, "maximumDetailLabelHeight": maximumDetailLabelHeight], views: ["detailLabel": detailLabel!]))
} }
}
// buttons // buttons
if nil != buttonsContainer && (nil != leftButtons || nil != rightButtons) { if nil != buttonsContainer && (nil != leftButtons || nil != rightButtons) {
......
...@@ -20,6 +20,17 @@ import UIKit ...@@ -20,6 +20,17 @@ import UIKit
public struct MaterialTheme {} public struct MaterialTheme {}
// spacing
extension MaterialTheme {
public static var verticalInset: CGFloat = 16
public static var horizontalInset: CGFloat = 16
}
// fonts
extension MaterialTheme {
public static var textFontSize: CGFloat = 16
}
// colors // colors
extension MaterialTheme { extension MaterialTheme {
// clear // clear
...@@ -369,14 +380,3 @@ extension MaterialTheme { ...@@ -369,14 +380,3 @@ extension MaterialTheme {
public static let darken4: UIColor = UIColor(red: 38/255, green: 50/255, blue: 56/255, alpha: 1) public static let darken4: UIColor = UIColor(red: 38/255, green: 50/255, blue: 56/255, alpha: 1)
} }
} }
// spacing
extension MaterialTheme {
public static var verticalInset: CGFloat = 8
public static var horizontalInset: CGFloat = 2 * verticalInset
}
// fonts
extension MaterialTheme {
public static var textFontSize: CGFloat = 16
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment