KMAccountInfoView.swift 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. //
  2. // KMAccountInfoView.swift
  3. // PDF Master
  4. //
  5. // Created by lizhe on 2023/2/24.
  6. //
  7. import Cocoa
  8. typealias KMAccountInfoViewCloseAction = (_ view: KMAccountInfoView) -> Void
  9. typealias KMAccountInfoViewCancellationAction = (_ view: KMAccountInfoView) -> Void
  10. typealias KMAccountInfoViewLogOutAction = (_ view: KMAccountInfoView) -> Void
  11. typealias KMAccountInfoViewPurchaseInfoAction = (_ view: KMAccountInfoView) -> Void
  12. class KMAccountInfoView: KMBaseXibView {
  13. @IBOutlet weak var titleLabel: NSTextField!
  14. @IBOutlet weak var closeButton: NSButton!
  15. @IBOutlet weak var infoContentView: NSView!
  16. @IBOutlet weak var moreButton: NSButton!
  17. @IBOutlet weak var imageViewButton: NSButton!
  18. @IBOutlet weak var accountDescribeLabel: NSTextField!
  19. @IBOutlet weak var accountLabel: NSTextField!
  20. @IBOutlet weak var closeBox: KMBox!
  21. @IBOutlet weak var statusTitleLabel: NSTextField!
  22. @IBOutlet weak var statusLabel: NSTextField!
  23. @IBOutlet weak var tagLabel: NSTextField!
  24. @IBOutlet weak var statusTimeLabel: NSTextField!
  25. @IBOutlet weak var purchaseInfoButton: NSButton!
  26. @IBOutlet weak var lineView: NSView!
  27. @IBOutlet weak var subscribeButton: NSButton!
  28. @IBOutlet weak var statusContentView: NSView!
  29. @IBOutlet weak var purchaseInfoContentView: NSView!
  30. @IBOutlet weak var subscribeButtonContentView: NSView!
  31. var closeAction: KMAccountInfoViewCloseAction?
  32. var cancellationAction: KMAccountInfoViewCancellationAction?
  33. var logOutAction: KMAccountInfoViewLogOutAction?
  34. var purchaseInfoAction: KMAccountInfoViewPurchaseInfoAction?
  35. var userInfo: KMLightMemberUserInfo? {
  36. didSet {
  37. self.reloadData()
  38. }
  39. }
  40. var purchaseState: KMPurchaseManagerState = .unknow {
  41. didSet {
  42. self.reloadData()
  43. }
  44. }
  45. override func draw(_ dirtyRect: NSRect) {
  46. super.draw(dirtyRect)
  47. // Drawing code here.
  48. }
  49. override func setup() {
  50. super.setup()
  51. self.closeBox.moveCallback = { [weak self] (mouseEntered, mouseBox) in
  52. if mouseEntered {
  53. self?.closeButton.image = NSImage(named: "control_btn_icon_close_hov")
  54. } else {
  55. self?.closeButton.image = NSImage(named: "control_btn_icon_close")
  56. }
  57. }
  58. }
  59. override func updateUI() {
  60. super.updateUI()
  61. self.titleLabel.textColor = NSColor(hex: "#252629")
  62. self.titleLabel.font = NSFont.SFProTextSemibold(20.0)
  63. self.accountLabel.textColor = NSColor(hex: "#252629")
  64. self.accountLabel.font = NSFont.SFProTextRegular(14.0)
  65. self.accountDescribeLabel.textColor = NSColor(hex: "#616469")
  66. self.accountDescribeLabel.font = NSFont.SFProTextSemibold(12.0)
  67. self.imageViewButton.backgroundColor(NSColor(hex: "#1770F4"))
  68. self.imageViewButton.font = NSFont.SFProTextSemibold(28.0)
  69. self.imageViewButton.contentTintColor = NSColor(hex: "#FFFFFF")
  70. self.imageViewButton.border(NSColor(hex: "#1770F4"), 1, 24)
  71. self.infoContentView.backgroundColor(NSColor(hex: "#F7F8FA"))
  72. self.infoContentView.border(NSColor(hex: "#F7F8FA"), 0, 6)
  73. self.purchaseInfoButton.font = NSFont.SFProTextRegular(14)
  74. self.purchaseInfoButton.contentTintColor = NSColor(hex: "#1770F4")
  75. self.statusTitleLabel.textColor = NSColor(hex: "#616469")
  76. self.statusTitleLabel.font = NSFont.SFProTextRegular(12.0)
  77. self.statusLabel.textColor = NSColor(hex: "#252629")
  78. self.statusLabel.font = NSFont.SFProTextSemibold(16.0)
  79. self.statusTimeLabel.textColor = NSColor(hex: "#616469")
  80. self.statusTimeLabel.font = NSFont.SFProTextRegular(12.0)
  81. self.subscribeButton.contentTintColor = NSColor(hex: "#FFFFFF")
  82. self.subscribeButton.backgroundColor(NSColor(hex: "#FF852E"))
  83. self.subscribeButton.font = NSFont.SFProTextRegular(16)
  84. self.subscribeButton.border(NSColor.clear, 0, 20)
  85. self.tagLabel.font = NSFont.SFProTextRegular(12)
  86. self.tagLabel.textColor = NSColor(hex: "#252629")
  87. self.tagLabel.backgroundColor(NSColor(hex: "#F7F8FA"))
  88. self.tagLabel.border(NSColor(hex: "#DFE1E5"), 1, 4)
  89. self.lineView.backgroundColor(NSColor(hex: "#ECECEC"))
  90. self.updateMoreButtonState(select: false)
  91. }
  92. override func reloadData() {
  93. super.reloadData()
  94. if self.userInfo != nil {
  95. self.accountLabel.stringValue = userInfo!.email
  96. self.imageViewButton.title = userInfo?.email.substring(to: 1) ?? ""
  97. }
  98. if purchaseState == .unknow {
  99. self.statusContentView.isHidden = true
  100. self.purchaseInfoContentView.isHidden = true
  101. self.subscribeButtonContentView.isHidden = true
  102. } else if purchaseState == .subscription {
  103. self.statusContentView.isHidden = false
  104. self.purchaseInfoContentView.isHidden = false
  105. self.subscribeButtonContentView.isHidden = true
  106. } else {
  107. self.statusContentView.isHidden = false
  108. self.purchaseInfoContentView.isHidden = false
  109. self.subscribeButtonContentView.isHidden = false
  110. }
  111. }
  112. override func updateLanguage() {
  113. super.updateLanguage()
  114. self.accountDescribeLabel.stringValue = NSLocalizedString("Email Address", comment: "")
  115. self.titleLabel.stringValue = NSLocalizedString("Account Information", comment: "")
  116. // self.logOutButton.stringValue = NSLocalizedString("Log Out", comment: "")
  117. let timeString = NSLocalizedString("2023/01/25\nTrial expires", comment: "")
  118. let paragraphStyle = NSMutableParagraphStyle()
  119. paragraphStyle.lineHeightMultiple = 1.32
  120. paragraphStyle.alignment = .right
  121. self.statusTimeLabel.attributedStringValue = NSMutableAttributedString(string: NSLocalizedString(timeString, comment: ""), attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
  122. }
  123. }
  124. extension KMAccountInfoView {
  125. func updateMoreButtonState(select: Bool) {
  126. if select {
  127. self.moreButton.backgroundColor(NSColor(hex: "#CED0D4", alpha: 0.6))
  128. self.moreButton.border(NSColor(hex: "#CED0D4"), 1, 4)
  129. } else {
  130. self.moreButton.backgroundColor(NSColor.clear)
  131. self.moreButton.border(NSColor(hex: "#CED0D4"), 0, 4)
  132. }
  133. }
  134. }
  135. protocol KMAccountInfoViewAction {}
  136. extension KMAccountInfoView: KMAccountInfoViewAction {
  137. @IBAction func closeButtonAction(_ sender: Any) {
  138. guard let callBack = closeAction else { return }
  139. callBack(self)
  140. }
  141. @IBAction func moreButtonAction(_ sender: NSButton) {
  142. self.updateMoreButtonState(select: true)
  143. let vc: KMHomePopViewController = KMHomePopViewController().initWithPopViewDataArr([NSLocalizedString("Log out", comment: ""), NSLocalizedString("Cancellation", comment: "")])
  144. let createFilePopover: NSPopover = NSPopover.init()
  145. createFilePopover.contentViewController = vc
  146. createFilePopover.delegate = self
  147. createFilePopover.animates = true
  148. createFilePopover.behavior = .semitransient
  149. createFilePopover.setValue(true, forKey: "shouldHideAnchor")
  150. createFilePopover.show(relativeTo: CGRect(x: sender.bounds.origin.x, y: 10, width: sender.bounds.size.width, height: sender.bounds.size.height), of: sender, preferredEdge: .maxY)
  151. // vc.customBoxWidthLayoutConstraint.constant = sender.frame.width
  152. vc.downCallback = { [unowned self] (downEntered: Bool, count: String) -> Void in
  153. if downEntered {
  154. if count == "Cancellation" {
  155. createFilePopover.close()
  156. guard let callBack = self.cancellationAction else { return }
  157. callBack(self)
  158. } else if count == "Log out" {
  159. guard let callBack = logOutAction else { return }
  160. callBack(self)
  161. }
  162. }
  163. }
  164. }
  165. @IBAction func purchaseButtonAction(_ sender: Any) {
  166. guard let callBack = purchaseInfoAction else { return }
  167. callBack(self)
  168. }
  169. }
  170. extension KMAccountInfoView: NSPopoverDelegate {
  171. func popoverWillClose(_ notification: Notification) {
  172. self.updateMoreButtonState(select: false)
  173. }
  174. }