// // ScriptControllerIconView.swift // SBrowser // // Created by James Magahern on 7/24/20. // import UIKit class ScriptControllerIconView: UIButton { public var shieldsDown: Bool = false { didSet { setNeedsLayout() } } public var someScriptsAllowed: Bool = false { didSet { setNeedsLayout() } } private let labelView = UILabel(frame: .zero) private let shieldsDownImage = UIImage(systemName: "shield.slash") private let shieldsUpImage = UIImage(systemName: "shield") private let shieldsPartiallyUpImage = UIImage(systemName: "shield.lefthalf.fill") convenience init() { self.init(frame: .zero) addSubview(labelView) imageView?.contentMode = .scaleAspectFit labelView.backgroundColor = .systemRed labelView.textAlignment = .center labelView.layer.cornerRadius = 4.0 labelView.layer.masksToBounds = true labelView.font = .boldSystemFont(ofSize: 8) labelView.textColor = .white setBlockedScriptsNumber(0) } public func setBlockedScriptsNumber(_ num: Int) { if num > 0 { labelView.isHidden = false labelView.text = "\(num)" } else { labelView.isHidden = true } setNeedsLayout() } override func layoutSubviews() { super.layoutSubviews() labelView.sizeToFit() labelView.center = CGPoint(x: bounds.center.x + 10, y: bounds.center.y + 10) labelView.bounds = labelView.bounds.insetBy(dx: -3.0, dy: -2.0) if shieldsDown { setImage(shieldsDownImage, for: .normal) } else { if someScriptsAllowed { setImage(shieldsPartiallyUpImage, for: .normal) } else { setImage(shieldsUpImage, for: .normal) } } } }