123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613 |
- //
- // KMDesignButton.swift
- // PDF Reader Pro
- //
- // Created by wanjun on 2023/2/18.
- //
- import Cocoa
- @objc enum DesignButtonType : Int {
- case Text = 0 // 纯文本按钮
- case Image // 纯图片按钮
- case TextImage // 文本+图片按钮,区分图片在上左下右位置
- case PopUpButton // PopUp按钮
- case RadioButton // 单选按钮
- case CheckBox // 多选按钮
- }
- @objcMembers class KMDesignButton: KMDesignBase {
-
- @IBOutlet weak var mainBox: NSBox!
- @IBOutlet weak var button : NSButton!
-
- // Text
- @IBOutlet weak var textButtonBox: KMMoveBox!
- @IBOutlet weak var textButtonlabel : NSTextField!
-
- // Image
- @IBOutlet weak var imageButtonBox: KMMoveBox!
- @IBOutlet weak var imageView1: NSImageView!
- // TextImage
- @IBOutlet weak var textImageButtonBox: KMMoveBox!
- @IBOutlet weak var textImage_upView: NSView!
- @IBOutlet weak var textImage_leftView: NSView!
- @IBOutlet weak var textImage_downView: NSView!
- @IBOutlet weak var textImage_rightView: NSView!
- @IBOutlet weak var textImage_upImageView: NSImageView!
- @IBOutlet weak var textImage_leftImageView: NSImageView!
- @IBOutlet weak var textImage_downImageView: NSImageView!
- @IBOutlet weak var textImage_rightImageView: NSImageView!
- @IBOutlet weak var textImage_upTextfield: NSTextField!
- @IBOutlet weak var textImage_leftTextfield: NSTextField!
- @IBOutlet weak var textImage_downTextfield: NSTextField!
- @IBOutlet weak var textImage_rightTextfield: NSTextField!
- @IBOutlet weak var textImage_upPadding_spacing: NSLayoutConstraint!
- @IBOutlet weak var textImage_upImageHeight: NSLayoutConstraint!
- @IBOutlet weak var textImage_upImageWidth: NSLayoutConstraint!
- @IBOutlet weak var textImage_upItem_spacing: NSLayoutConstraint!
- @IBOutlet weak var textImage_leftPadding_spacing: NSLayoutConstraint!
- @IBOutlet weak var textImage_leftImageHeight: NSLayoutConstraint!
- @IBOutlet weak var textImage_leftImageWidth: NSLayoutConstraint!
- @IBOutlet weak var textImage_leftItem_spacing: NSLayoutConstraint!
- @IBOutlet weak var textImage_downPadding_spacing: NSLayoutConstraint!
- @IBOutlet weak var textImage_downImageHeight: NSLayoutConstraint!
- @IBOutlet weak var textImage_downImageWidth: NSLayoutConstraint!
- @IBOutlet weak var textImage_downItem_spacing: NSLayoutConstraint!
- @IBOutlet weak var textImage_rightPadding_spacing: NSLayoutConstraint!
- @IBOutlet weak var textImage_rightImageHeight: NSLayoutConstraint!
- @IBOutlet weak var textImage_rightImageWidth: NSLayoutConstraint!
- @IBOutlet weak var textImage_rightItem_spacing: NSLayoutConstraint!
-
- @IBOutlet weak var radioButton_mainBox: KMMoveBox!
- @IBOutlet weak var radioButton_imageView: NSImageView!
- @IBOutlet weak var radioButton_label: NSTextField!
-
- @IBOutlet weak var radio_label_spacing: NSLayoutConstraint!
- @IBOutlet weak var radio_imageViewWidth: NSLayoutConstraint!
- @IBOutlet weak var radio_imageViewHeight: NSLayoutConstraint!
-
- @IBOutlet weak var mainBoxHeight : NSLayoutConstraint! // mainBox 高度约束
- @IBOutlet weak var mainBoxWidth : NSLayoutConstraint! // mainBox 宽度约束
- var height: Float = 32.0 // 高度
- var width: Float = 80.0 // 宽度
-
- var textImage_imageWidth: Float = 20.0// 图片宽度
- var textImage_imageHeight: Float = 20.0// 图片高度
- var textImage_paddingSpacing: Float = 16.0
- var textImage_itemSpacing: Float = 8.0
-
- // var image: NSImage = NSImage(named: "KMRadioButtonUnSelect")! // imageView 图片
- var radio_imageWidth = 16.0 // 图片宽度
- var radio_imageHeight = 16.0 // 图片高度
- var radio_label = 8.0 // imageView、label 水平间距
- // button 通用属性
- var textImage_type: KMTextImageButtonType = .Left
- var textImage_state: KMDesignTokenState = .Norm
-
- init(withType type: DesignButtonType) {
- super.init(nibName: "KMDesignButton", bundle: nil)
- self.buttonType = type
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
-
- if (buttonType == .Text) {
- mainBox.contentView = textButtonBox
- } else if (buttonType == .Image) {
- mainBox.contentView = imageButtonBox
- } else if (buttonType == .TextImage) {
- mainBox.contentView = textImageButtonBox
- } else if (buttonType == .PopUpButton) {
- mainBox.contentView = textImageButtonBox
- } else if (buttonType == .RadioButton) || (buttonType == .CheckBox) {
- mainBox.contentView = radioButton_mainBox
- }
-
- textButtonBox.move = { [weak self](mouseEntered: Bool) -> Void in
- if self != nil {
- if mouseEntered {
- if self!.state != .Sel && self!.canHover && (self!.state != .Disabled) && (self!.state != .Act) {
- self!.state = .Hov
- self!.updateUI()
- }
- } else {
- if self!.state != .Sel && self!.canHover && (self!.state != .Disabled) && (self!.state != .Act) {
- self!.state = .Norm
- self!.updateUI()
- }
- }
- }
- }
- imageButtonBox.move = { [weak self](mouseEntered: Bool) -> Void in
- if self != nil {
- if mouseEntered {
- if self!.state != .Sel && self!.canHover && (self!.state != .Disabled) && (self!.state != .Act) {
- self!.state = .Hov
- self!.updateUI()
- }
- } else {
- if self!.state != .Sel && self!.canHover && (self!.state != .Disabled) && (self!.state != .Act) {
- self!.state = .Norm
- self!.updateUI()
- }
- }
- }
- }
- textImageButtonBox.move = { [weak self](mouseEntered: Bool) -> Void in
- if self != nil {
- if mouseEntered {
- if self!.state != .Sel && self!.canHover && (self!.state != .Disabled) && (self!.state != .Act) {
- self!.state = .Hov
- self!.updateUI()
- }
- } else {
- if self!.state != .Sel && self!.canHover && (self!.state != .Disabled) && (self!.state != .Act) {
- self!.state = .Norm
- self!.updateUI()
- }
- }
- }
- }
- radioButton_mainBox.move = { [weak self](mouseEntered: Bool) -> Void in
- if self != nil {
- if mouseEntered {
- if self!.state != .Checked_dis && self!.canHover && (self!.state != .Disabled) && (self!.state != .Checked) {
- self!.state = .Hov
- self!.updateUI()
- }
- } else {
- if self!.state != .Checked_dis && self!.canHover && (self!.state != .Disabled) && (self!.state != .Checked) {
- self!.state = .Norm
- self!.updateUI()
- }
- }
- }
- }
- // self.radioButton_mainBox.canHover = true
- // self.radioButton_mainBox.canClick = true
- // radioButton_mainBox.downCallback = { [weak self](downEntered: Bool, mouseBox: KMBox) -> Void in
- // if self != nil {
- // if self!.enabled {
- // if downEntered {
- // self!.canHover = false
- // self!.state = .Checked
- // self!.updateUI()
- // }
- // }
- // }
- // }
- // radioButton_mainBox.moveCallback = { [weak self](mouseEntered: Bool, mouseBox: KMBox) -> Void in
- // if self != nil {
- // if mouseEntered {
- // if self!.state != .Checked_dis && self!.canHover && (self!.state != .Disabled) && (self!.state != .Checked) {
- // self!.state = .Hov
- // self!.updateUI()
- // }
- // } else {
- // if self!.state != .Checked_dis && self!.canHover && (self!.state != .Disabled) && (self!.state != .Checked) {
- // self!.state = .Norm
- // self!.updateUI()
- // }
- // }
- // }
- // }
- }
-
- // MARK: Get、Set
-
- var action: Selector {
- get {
- return _action!
- }
- set {
- _action = newValue
- if _action != nil {
- button.action = _action
- }
- }
- }
-
- var target: AnyObject {
- get {
- return _target!
- }
- set {
- _target = newValue
- if _target != nil {
- button.target = _target
- }
- }
- }
-
- var state: KMDesignTokenState {
- get {
- return _state
- }
- set {
- _state = newValue
- updateUI()
- }
- }
-
- var enabled: Bool {
- get {
- return _enabled
- }
- set {
- _enabled = newValue
- self.button.isEnabled = _enabled
- if _enabled {
- state = .Norm
- } else {
- state = .Disabled
- }
- updateUI()
- }
- }
-
- var isHidden: Bool {
- get {
- return _isHidden
- }
- set {
- _isHidden = newValue
- self.view.isHidden = _isHidden
- }
- }
- var image: NSImage {
- get {
- return _image
- }
- set {
- _image = newValue
- updateUI()
- }
- }
-
- var image_hov: NSImage {
- get {
- if _image_hov == nil {
- return _image
- }
- return _image_hov!
- }
- set {
- _image_hov = newValue
- updateUI()
- }
- }
-
- var image_act: NSImage {
- get {
- if _image_act == nil {
- return _image
- }
- return _image_act!
- }
- set {
- _image_act = newValue
- updateUI()
- }
- }
-
- var image_disabled: NSImage {
- get {
- if _image_disabled == nil {
- return _image
- }
- return _image_disabled!
- }
- set {
- _image_disabled = newValue
- updateUI()
- }
- }
-
- var image_sel: NSImage {
- get {
- if (_image_sel == nil) {
- _image_sel = image
- }
- return _image_sel!
- }
- set {
- _image_sel = newValue
- updateUI()
- }
- }
-
- var image_checked: NSImage {
- get {
- if (_image_checked == nil) {
- _image_checked = image
- }
- return _image_checked!
- }
- set {
- _image_checked = newValue
- updateUI()
- }
- }
-
- var image_checkeddis: NSImage {
- get {
- if (_image_checkeddis == nil) {
- _image_checkeddis = image
- }
- return _image_checkeddis!
- }
- set {
- _image_checkeddis = newValue
- updateUI()
- }
- }
-
- var toolTip: String {
- get {
- return _toolTip
- }
- set {
- _toolTip = newValue
- if _toolTip != "" {
- button.toolTip = _toolTip
- }
- }
- }
-
- // MARK: Private Methods
- func updateUI() -> Void {
- if (buttonType == .Text) {
- let paragraphStyle = NSMutableParagraphStyle()
- if (state == .Norm) {
- textButtonBox.fillColor = background
- textButtonBox.borderWidth = CGFloat(borderWidth)
- textButtonBox.cornerRadius = CGFloat(cornerRadius)
- textButtonBox.borderColor = borderColor
- textButtonlabel.textColor = textColor
- textButtonlabel.font = font
- paragraphStyle.lineSpacing = lineHeight
- } else if (state == .Hov) {
- textButtonBox.fillColor = background_hov
- textButtonBox.borderWidth = CGFloat(borderWidth_hov)
- textButtonBox.cornerRadius = CGFloat(cornerRadius_hov)
- textButtonBox.borderColor = borderColor_hov
- textButtonlabel.textColor = textColor_hov
- textButtonlabel.font = font_hov
- paragraphStyle.lineSpacing = lineHeight_hov
- } else if (state == .Act) {
- textButtonBox.fillColor = background_act
- textButtonBox.borderWidth = CGFloat(borderWidth_act)
- textButtonBox.cornerRadius = CGFloat(cornerRadius_act)
- textButtonBox.borderColor = borderColor_act
- textButtonlabel.textColor = textColor_act
- textButtonlabel.font = font_act
- paragraphStyle.lineSpacing = lineHeight_act
- } else if (state == .Disabled) {
- textButtonBox.fillColor = background_disabled
- textButtonBox.borderWidth = CGFloat(borderWidth_disabled)
- textButtonBox.cornerRadius = CGFloat(cornerRadius_disabled)
- textButtonBox.borderColor = borderColor_disabled
- textButtonlabel.textColor = textColor_disabled
- textButtonlabel.font = font_disabled
- paragraphStyle.lineSpacing = lineHeight_disabled
- }
- textButtonlabel.attributedStringValue = NSAttributedString(string: stringValue, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
- } else if (buttonType == .Image) {
- if (state == .Norm) {
- imageButtonBox.fillColor = background
- imageButtonBox.borderWidth = CGFloat(borderWidth)
- imageButtonBox.borderColor = borderColor
- imageButtonBox.cornerRadius = CGFloat(cornerRadius)
- imageView1.image = image
- } else if (state == .Hov) {
- imageButtonBox.fillColor = background_hov
- imageButtonBox.borderWidth = CGFloat(borderWidth_hov)
- imageButtonBox.borderColor = borderColor_hov
- imageButtonBox.cornerRadius = CGFloat(cornerRadius_hov)
- imageView1.image = image_hov
- } else if (state == .Act) {
- imageButtonBox.fillColor = background_act
- imageButtonBox.borderWidth = CGFloat(borderWidth_act)
- imageButtonBox.borderColor = borderColor_act
- imageButtonBox.cornerRadius = CGFloat(cornerRadius_act)
- imageView1.image = image_act
- } else if (state == .Disabled) {
- imageButtonBox.fillColor = background_disabled
- imageButtonBox.borderWidth = CGFloat(borderWidth_disabled)
- imageButtonBox.borderColor = borderColor_disabled
- imageButtonBox.cornerRadius = CGFloat(cornerRadius_disabled)
- imageView1.image = image_disabled
- }
- } else if (buttonType == .TextImage) {
- let paragraphStyle = NSMutableParagraphStyle()
- if textImage_type == .Up {
- textImageButtonBox.contentView = textImage_upView
- textImage_upTextfield.isEditable = editable
- textImage_upTextfield.font = font
- } else if textImage_type == .Left {
- textImageButtonBox.contentView = textImage_leftView
- textImage_leftTextfield.isEditable = editable
- textImage_leftTextfield.font = font
- } else if textImage_type == .Down {
- textImageButtonBox.contentView = textImage_downView
- textImage_downTextfield.isEditable = editable
- textImage_downTextfield.font = font
- } else if textImage_type == .Right {
- textImageButtonBox.contentView = textImage_rightView
- textImage_rightTextfield.isEditable = editable
- textImage_rightTextfield.font = font
- }
-
- if textImage_state == .Norm {
- textImageButtonBox.fillColor = background
- textImageButtonBox.borderColor = borderColor
- if textImage_type == .Up {
- textImage_upImageView.image = image
- textImage_upTextfield.textColor = textColor
- } else if textImage_type == .Left {
- textImage_leftImageView.image = image
- textImage_leftTextfield.textColor = textColor
- } else if textImage_type == .Down {
- textImage_downImageView.image = image
- textImage_downTextfield.textColor = textColor
- } else if textImage_type == .Right {
- textImage_rightImageView.image = image
- textImage_rightTextfield.textColor = textColor
- }
-
- textImageButtonBox.borderWidth = CGFloat(borderWidth)
- textImageButtonBox.cornerRadius = CGFloat(cornerRadius)
- paragraphStyle.lineSpacing = lineHeight
- } else if state == .Hov {
- textImageButtonBox.fillColor = background_hov
- textImageButtonBox.borderColor = borderColor_hov
- if textImage_type == .Up {
- textImage_upImageView.image = image_hov
- textImage_upTextfield.textColor = textColor_hov
- } else if textImage_type == .Left {
- textImage_leftImageView.image = image_hov
- textImage_leftTextfield.textColor = textColor_hov
- } else if textImage_type == .Down {
- textImage_downImageView.image = image_hov
- textImage_downTextfield.textColor = textColor_hov
- } else if textImage_type == .Right {
- textImage_rightImageView.image = image_hov
- textImage_rightTextfield.textColor = textColor_hov
- }
- textImageButtonBox.borderWidth = CGFloat(borderWidth_hov)
- textImageButtonBox.cornerRadius = CGFloat(cornerRadius_hov)
- paragraphStyle.lineSpacing = lineHeight_hov
- } else if state == .Act {
- textImageButtonBox.fillColor = background_act
- textImageButtonBox.borderColor = borderColor_act
- if textImage_type == .Up {
- textImage_upImageView.image = image_act
- textImage_upTextfield.textColor = textColor_act
- } else if textImage_type == .Left {
- textImage_leftImageView.image = image_act
- textImage_leftTextfield.textColor = textColor_act
- } else if textImage_type == .Down {
- textImage_downImageView.image = image_act
- textImage_downTextfield.textColor = textColor_act
- } else if textImage_type == .Right {
- textImage_rightImageView.image = image_act
- textImage_rightTextfield.textColor = textColor_act
- }
- textImageButtonBox.borderWidth = CGFloat(borderWidth_act)
- textImageButtonBox.cornerRadius = CGFloat(cornerRadius_act)
- paragraphStyle.lineSpacing = lineHeight_act
- } else if state == .Disabled {
- textImageButtonBox.fillColor = background_disabled
- textImageButtonBox.borderColor = borderColor_disabled
- if textImage_type == .Up {
- textImage_upImageView.image = image_disabled
- textImage_upTextfield.textColor = textColor_disabled
- } else if textImage_type == .Left {
- textImage_leftImageView.image = image_disabled
- textImage_leftTextfield.textColor = textColor_disabled
- } else if textImage_type == .Down {
- textImage_downImageView.image = image_disabled
- textImage_downTextfield.textColor = textColor_disabled
- } else if textImage_type == .Right {
- textImage_rightImageView.image = image_disabled
- textImage_rightTextfield.textColor = textColor_disabled
- }
- textImageButtonBox.borderWidth = CGFloat(borderWidth_disabled)
- textImageButtonBox.cornerRadius = CGFloat(cornerRadius_disabled)
- paragraphStyle.lineSpacing = lineHeight_disabled
- }
-
- textImage_upImageHeight.constant = CGFloat(textImage_imageHeight)
- textImage_upImageWidth.constant = CGFloat(textImage_imageWidth)
- textImage_leftImageHeight.constant = CGFloat(textImage_imageHeight)
- textImage_leftImageWidth.constant = CGFloat(textImage_imageWidth)
- textImage_downImageHeight.constant = CGFloat(textImage_imageHeight)
- textImage_downImageWidth.constant = CGFloat(textImage_imageWidth)
- textImage_rightImageHeight.constant = CGFloat(textImage_imageHeight)
- textImage_rightImageWidth.constant = CGFloat(textImage_imageWidth)
-
- if textImage_type == .Up {
- textImage_upTextfield.attributedStringValue = NSAttributedString(string: stringValue, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
- textImage_upPadding_spacing.constant = CGFloat(textImage_paddingSpacing)
- textImage_upItem_spacing.constant = CGFloat(textImage_itemSpacing)
- } else if textImage_type == .Left {
- textImage_leftTextfield.attributedStringValue = NSAttributedString(string: stringValue, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
- textImage_leftPadding_spacing.constant = CGFloat(textImage_paddingSpacing)
- textImage_leftItem_spacing.constant = CGFloat(textImage_itemSpacing)
- } else if textImage_type == .Down {
- textImage_downTextfield.attributedStringValue = NSAttributedString(string: stringValue, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
- textImage_downPadding_spacing.constant = CGFloat(textImage_paddingSpacing)
- textImage_downItem_spacing.constant = CGFloat(textImage_itemSpacing)
- } else if textImage_type == .Right {
- textImage_rightTextfield.attributedStringValue = NSAttributedString(string: stringValue, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
- textImage_rightPadding_spacing.constant = CGFloat(textImage_paddingSpacing)
- textImage_rightItem_spacing.constant = CGFloat(textImage_itemSpacing)
- }
- } else if (buttonType == .RadioButton) || (buttonType == .CheckBox) {
- let paragraphStyle = NSMutableParagraphStyle()
- if (state == .Norm) {
- if (buttonType == .RadioButton) {
- radioButton_imageView.image = NSImage(named: "KMRadioButtonUnSelect")
- } else {
- radioButton_imageView.image = NSImage(named: "icon_btn_checkbox_unsel")
- }
- radioButton_label.font = font
- radioButton_label.textColor = textColor
- paragraphStyle.lineSpacing = lineHeight
- } else if (state == .Hov) {
- if (buttonType == .RadioButton) {
- radioButton_imageView.image = NSImage(named: "KMRadioButtonHov")
- } else {
- radioButton_imageView.image = NSImage(named: "icon_btn_checkbox_hov")
- }
- radioButton_label.font = font_hov
- radioButton_label.textColor = textColor_hov
- paragraphStyle.lineSpacing = lineHeight_hov
- } else if (state == .Disabled) {
- if (buttonType == .RadioButton) {
- radioButton_imageView.image = NSImage(named: "KMRadioButtonUnSel_Disabled")
- } else {
- radioButton_imageView.image = NSImage(named: "icon_btn_checkbox_unsel_Disabled")
- }
- radioButton_label.font = font_disabled
- radioButton_label.textColor = textColor_disabled
- paragraphStyle.lineSpacing = lineHeight_disabled
- } else if (state == .Checked) {
- if (buttonType == .RadioButton) {
- radioButton_imageView.image = NSImage(named: "KMRadioButtonSelect")
- } else {
- radioButton_imageView.image = NSImage(named: "icon_btn_checkbox_sel")
- }
- radioButton_label.font = font_checked
- radioButton_label.textColor = textColor_checked
- paragraphStyle.lineSpacing = lineHeight_checked
- } else if (state == .Checked_dis) {
- if (buttonType == .RadioButton) {
- radioButton_imageView.image = NSImage(named: "KMRadioButtonSel_Disabled")
- } else {
- radioButton_imageView.image = NSImage(named: "icon_btn_checkbox_sel_Disabled")
- }
- radioButton_label.font = font_checkeddis
- radioButton_label.textColor = textColor_checkeddis
- paragraphStyle.lineSpacing = lineHeight_checkeddis
- }
- radioButton_label.attributedStringValue = NSAttributedString(string: stringValue, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
- radio_label_spacing.constant = radio_label
- radio_imageViewWidth.constant = radio_imageWidth
- radio_imageViewHeight.constant = radio_imageHeight
- }
- }
- }
|