123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- //
- // ComponentCard.swift
- // KMComponentLibrary
- //
- // Created by Niehaoyu on 2024/9/14.
- //
- import Cocoa
- import AppKit
- @objc public protocol ComponentCardPDFToolDelegate: AnyObject {
-
- //点击回调
- @objc optional func componentCardPDFToolDidClicked(_ view: ComponentCardPDFTool)
-
- //选中状态更新结束后回调
- @objc optional func componentCardPDFToolDidSelectedStateUpdated(_ view: ComponentCardPDFTool)
-
- }
- public class ComponentCardPDFTool: ComponentBaseXibView {
-
- @IBOutlet var contendBox: NSBox!
- @IBOutlet var iconImage: NSImageView!
- @IBOutlet var titleLabel: NSTextField!
- @IBOutlet var subTitleLabel: NSTextField!
- @IBOutlet var checkBox: ComponentCheckBox!
-
- @IBOutlet var iconWidthConst: NSLayoutConstraint!
-
- private var _properties : ComponentCardPDFToolProperty = ComponentCardPDFToolProperty()
-
- weak open var delegate: ComponentCardPDFToolDelegate?
- public override func draw(_ dirtyRect: NSRect) {
- super.draw(dirtyRect)
-
- }
-
- // MARK: 初始化
- deinit {
- NotificationCenter.default.removeObserver(self)
-
- }
-
- public required init?(coder decoder: NSCoder) {
- super.init(coder: decoder)
-
- }
-
- override init(frame frameRect: NSRect) {
- super.init(frame: frameRect)
- }
-
- public override func awakeFromNib() {
- super.awakeFromNib()
-
- self.iconImage.wantsLayer = true
- self.iconImage.layer?.masksToBounds = true
-
- checkBox.properties = ComponentCheckBoxProperty(size: .xxs, state: .normal, isDisabled: false, showhelp: false, text: nil, checkboxType: .normal)
- checkBox.setTarget(self, action: #selector(checkBoxAction(_:)))
- }
-
- //MARK: - Setter and Getter
- public var properties : ComponentCardPDFToolProperty {
- get {
- return _properties
- }
- set {
- _properties = newValue
-
- ComponentLibrary.shared.configCardPDFToolComponent(properties: _properties)
-
- self.setupUI()
-
- self.refreshUI()
-
- }
- }
-
-
- //MARK: - SetupUI
- func setupUI() {
-
- if properties.selectedAble == true {
- self.iconWidthConst.constant = 24
- self.iconImage.layer?.cornerRadius = 12
- } else {
- self.iconWidthConst.constant = 36
- self.iconImage.layer?.cornerRadius = 18
- }
- self.iconImage.image = self.properties.icon
- self.titleLabel.stringValue = self.properties.text ?? ""
- self.subTitleLabel.stringValue = self.properties.subText ?? ""
-
- if self.properties.collapse == true {
- self.subTitleLabel.isHidden = true
-
- self.titleLabel.frame = CGRectMake(CGRectGetMaxX(self.iconImage.frame)+8, CGRectGetHeight(self.frame)/2-CGRectGetHeight(self.titleLabel.frame)/2, CGRectGetWidth(self.titleLabel.frame), CGRectGetHeight(self.titleLabel.frame))
- self.titleLabel.autoresizingMask = [.maxXMargin, .maxYMargin]
-
- } else {
- self.titleLabel.frame = CGRectMake(CGRectGetMaxX(self.iconImage.frame)+8, CGRectGetHeight(self.frame)-16-CGRectGetHeight(self.titleLabel.frame), CGRectGetWidth(self.titleLabel.frame), CGRectGetHeight(self.titleLabel.frame))
- self.titleLabel.autoresizingMask = [.minYMargin, .maxXMargin, .maxYMargin]
-
- self.subTitleLabel.isHidden = false
- self.subTitleLabel.frame = CGRectMake(self.iconWidthConst.constant+8+12, CGRectGetMinY(self.titleLabel.frame)-4-38, CGRectGetWidth(self.frame)-self.iconWidthConst.constant-20-12-12, 38)
- self.subTitleLabel.autoresizingMask = [.minYMargin, .maxXMargin, .maxYMargin, .width]
-
- }
- }
-
- func refreshUI() {
- self.contendBox.cornerRadius = self.properties.propertyInfo.cornerRadius
- self.contendBox.fillColor = properties.propertyInfo.color_nor
- self.titleLabel.textColor = properties.propertyInfo.textColor
-
- self.subTitleLabel.textColor = properties.propertyInfo.subTextColor
-
- self.subTitleLabel.font = properties.propertyInfo.textFont
-
- self.subTitleLabel.font = properties.propertyInfo.subTextFont
-
-
- if self.properties.state == .normal {
- self.contendBox.borderColor = properties.propertyInfo.borderColor_nor
- self.contendBox.borderWidth = self.properties.propertyInfo.borderWidth
- } else if self.properties.state == .hover {
- self.contendBox.borderColor = properties.propertyInfo.borderColor_hov
- self.contendBox.borderWidth = self.properties.propertyInfo.borderWidth_hov
- }
-
- if properties.selectedAble == true && properties.isSelected == true {
- contendBox.fillColor = properties.propertyInfo.color_active
- contendBox.borderColor = properties.propertyInfo.borderColor_hov
- contendBox.borderWidth = properties.propertyInfo.borderWidth
- }
-
- self.titleLabel.sizeToFit()
-
- checkBox.isHidden = properties.selectedAble ? false : true
- checkBox.properties.checkboxType = properties.isSelected ? .selected : .normal
- checkBox.reloadData()
-
- }
-
- //MARK: - Action
- @objc func checkBoxAction(_ sender: NSView) {
- if checkBox.properties.checkboxType == .normal {
- properties.isSelected = false
- } else if checkBox.properties.checkboxType == .selected {
- properties.isSelected = true
- }
-
- self.reloadData()
-
- self.delegate?.componentCardPDFToolDidSelectedStateUpdated?(self)
-
- }
-
- //MARK: - Public Method
- public func reloadData() {
- self.setupUI()
-
- self.refreshUI()
- }
-
- //MARK: - MouseEvent
- public override func mouseEntered(with event: NSEvent) {
- super.mouseEntered(with: event)
-
- if properties.enableMouseEnterExit {
-
- properties.state = .hover
-
- self.refreshUI()
- }
- }
-
- public override func mouseMoved(with event: NSEvent) {
- super.mouseMoved(with: event)
-
- if properties.enableMouseEnterExit {
-
- properties.state = .hover
-
- self.refreshUI()
- }
- }
-
- public override func mouseExited(with event: NSEvent) {
- super.mouseExited(with: event)
-
- if properties.enableMouseEnterExit {
-
- properties.state = .normal
-
- self.refreshUI()
- }
- }
-
- public override func mouseDown(with event: NSEvent) {
- super.mouseDown(with: event)
-
- self.refreshUI()
-
- }
-
- public override func mouseUp(with event: NSEvent) {
- super.mouseUp(with: event)
-
- self.delegate?.componentCardPDFToolDidClicked?(self)
-
- }
- }
|