KMPreferenceMarkupController.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. //
  2. // KMPreferenceMarkupController.swift
  3. // PDF Office
  4. //
  5. // Created by tangchao on 2023/2/3.
  6. //
  7. import Cocoa
  8. /// 偏好设置 Markup控制器
  9. class KMPreferenceMarkupController: NSViewController {
  10. @IBOutlet weak var markupColorLabel: NSTextField!
  11. @IBOutlet weak var markupColorBox: NSBox!
  12. var markupColorView = KMPreferenceMarkupColorView()
  13. @IBOutlet weak var markupFontLabel: NSTextField!
  14. @IBOutlet weak var markupFontBox: NSBox!
  15. @IBOutlet weak var textLabel: NSTextField!
  16. @IBOutlet weak var textComboBox: NSComboBox!
  17. @IBOutlet weak var noteLabel: NSTextField!
  18. @IBOutlet weak var noteComboBox: NSComboBox!
  19. @IBOutlet weak var aligementView: KMPreferenceAligementView!
  20. var currentColorItemView: KMPreferenceMarkupColorItemView?
  21. lazy var fontNames = KMPreferenceManager.supportFonts
  22. override func viewDidLoad() {
  23. super.viewDidLoad()
  24. self.markupColorLabel.stringValue = NSLocalizedString("Markup Default Color", comment: "")
  25. self.markupFontLabel.stringValue = NSLocalizedString("Markup Default Font", comment: "")
  26. self.textLabel.stringValue = NSLocalizedString("Text:", comment: "")
  27. self.noteLabel.stringValue = NSLocalizedString("Note", comment: "")
  28. self.markupColorBox.contentView?.addSubview(self.markupColorView)
  29. self.markupColorView.frame = self.markupColorBox.contentView!.bounds
  30. self.markupColorView.autoresizingMask = [.width, .height]
  31. let keys = [KMMarkupColorHighlightKey, KMMarkupColorRectangleFillKey,
  32. KMMarkupColorStrikthroughKey, KMMarkupColorRectangleBorderKey,
  33. KMMarkupColorUnderlineKey, KMMarkupColorCircleFillKey,
  34. KMMarkupColorPenKey, KMMarkupColorCircleBorderKey,
  35. KMMarkupColorTextKey, KMMarkupColorLineKey,
  36. KMMarkupColorNoteKey]
  37. self.markupColorView.initKeys(keys)
  38. self.markupColorView.itemClick = { [weak self] itemView in
  39. self!.currentColorItemView = itemView
  40. let panel = NSColorPanel.shared
  41. panel.setTarget(self)
  42. panel.setAction(#selector(self!.colorPanelAction))
  43. panel.orderFront(nil)
  44. }
  45. let labels = [NSLocalizedString("Highlight:", comment: ""),
  46. NSLocalizedString("Rectangle fill:", comment: ""),
  47. "\(NSLocalizedString("Strikethrough", comment: "")):",
  48. NSLocalizedString("Rectangle border:", comment: ""),
  49. NSLocalizedString("Underline:", comment: ""),
  50. NSLocalizedString("Circle fill:", comment: ""),
  51. NSLocalizedString("Pen:", comment: ""),
  52. NSLocalizedString("Circle border:", comment: ""),
  53. NSLocalizedString("Text:", comment: ""),
  54. NSLocalizedString("Line:", comment: ""),
  55. NSLocalizedString("Anchored:", comment: "")]
  56. var i: Int = 0
  57. for itemView in self.markupColorView.itemViews {
  58. itemView.label.stringValue = labels[i]
  59. itemView.button.wantsLayer = true
  60. itemView.button.layer?.cornerRadius = 10
  61. itemView.button.layer?.borderWidth = 1
  62. itemView.button.layer?.borderColor = NSColor(hex: "#0000001A").cgColor
  63. i += 1
  64. }
  65. self.textComboBox.removeAllItems()
  66. self.textComboBox.addItems(withObjectValues: self.fontNames)
  67. self.noteComboBox.removeAllItems()
  68. self.noteComboBox.addItems(withObjectValues: self.fontNames)
  69. for comboBox in [self.textComboBox, self.noteComboBox] {
  70. comboBox?.delegate = self
  71. }
  72. self.aligementView.itemClick = { index in
  73. KMPreferenceManager.shared.markupFontTextAligmentType = index
  74. }
  75. self.initUIProperty()
  76. self.initData()
  77. }
  78. private func initUIProperty() {
  79. self.markupColorBox.borderColor = NSColor(white: 0, alpha: 0.05)
  80. self.markupColorBox.fillColor = NSColor.white
  81. self.markupColorView.vLine.layer?.backgroundColor = NSColor(white: 0, alpha: 0.1).cgColor
  82. self.markupFontBox.borderColor = NSColor(white: 0, alpha: 0.05)
  83. self.markupFontBox.fillColor = NSColor(white: 0, alpha: 0.05)
  84. self.markupColorLabel.textColor = NSColor(hex: "#252629")
  85. self.markupFontLabel.textColor = NSColor(hex: "#252629")
  86. self.textLabel.textColor = NSColor(hex: "#000000D9")
  87. self.noteLabel.textColor = NSColor(hex: "#000000D9")
  88. for itemView in self.markupColorView.itemViews {
  89. itemView.label.textColor = NSColor(hex: "#000000D9")
  90. }
  91. }
  92. private func initData() {
  93. for itemView in self.markupColorView.itemViews {
  94. var color: NSColor?
  95. if (itemView.key == KMMarkupColorHighlightKey) {
  96. color = KMPreferenceManager.shared.markupHighlightColor
  97. } else if (itemView.key == KMMarkupColorRectangleFillKey) {
  98. color = KMPreferenceManager.shared.markupRectangleFillColor
  99. } else if (itemView.key == KMMarkupColorStrikthroughKey) {
  100. color = KMPreferenceManager.shared.markupStrikthroughColor
  101. } else if (itemView.key == KMMarkupColorRectangleBorderKey) {
  102. color = KMPreferenceManager.shared.markupRectangleBorderColor
  103. } else if (itemView.key == KMMarkupColorUnderlineKey) {
  104. color = KMPreferenceManager.shared.markupUnderlineColor
  105. } else if (itemView.key == KMMarkupColorCircleFillKey) {
  106. color = KMPreferenceManager.shared.markupCircleFillColor
  107. } else if (itemView.key == KMMarkupColorPenKey) {
  108. color = KMPreferenceManager.shared.markupPenColor
  109. } else if (itemView.key == KMMarkupColorCircleBorderKey) {
  110. color = KMPreferenceManager.shared.markupCircleBorderColor
  111. } else if (itemView.key == KMMarkupColorTextKey) {
  112. color = KMPreferenceManager.shared.markupTextColor
  113. } else if (itemView.key == KMMarkupColorLineKey) {
  114. color = KMPreferenceManager.shared.markupLineColor
  115. } else if (itemView.key == KMMarkupColorNoteKey) {
  116. color = KMPreferenceManager.shared.markupNoteColor
  117. }
  118. if (color != nil) {
  119. var red: CGFloat = 0.0
  120. var green: CGFloat = 0.0
  121. var blue: CGFloat = 0.0
  122. var alpha: CGFloat = 0.0
  123. color!.usingColorSpaceName(.calibratedRGB)?.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
  124. if (red == 0 && green == 0 && blue == 0 && alpha == 0) {
  125. itemView.button.image = NSImage(named: "KMImageNamePreferenceClearColor")
  126. } else {
  127. itemView.button.image = nil
  128. itemView.button.layer?.backgroundColor = color!.cgColor
  129. }
  130. }
  131. }
  132. self.textComboBox.stringValue = KMPreferenceManager.shared.markupFontTextString
  133. var value = KMPreferenceManager.shared.markupFontTextAligmentType
  134. if (value == 0) {
  135. self.aligementView.selectIndex(index: 0)
  136. } else if (value == 1) {
  137. self.aligementView.selectIndex(index: 1)
  138. } else if (value == 2) {
  139. self.aligementView.selectIndex(index: 2)
  140. }
  141. let fontNames = self.fontNames
  142. value = KMPreferenceManager.shared.markupFontNoteType
  143. if (value == 0) {
  144. self.noteComboBox.stringValue = fontNames[0]
  145. } else if (value == 1) {
  146. self.noteComboBox.stringValue = fontNames[1]
  147. } else if (value == 2) {
  148. self.noteComboBox.stringValue = fontNames[2]
  149. }
  150. }
  151. @objc private func colorPanelAction(sender: NSColorPanel) {
  152. if (self.currentColorItemView == nil) {
  153. return
  154. }
  155. let itemView = self.currentColorItemView!
  156. itemView.button.image = nil
  157. itemView.button.layer?.backgroundColor = sender.color.cgColor
  158. if (itemView.key == KMMarkupColorHighlightKey) {
  159. KMPreferenceManager.shared.markupHighlightColor = sender.color
  160. } else if (itemView.key == KMMarkupColorRectangleFillKey) {
  161. KMPreferenceManager.shared.markupRectangleFillColor = sender.color
  162. } else if (itemView.key == KMMarkupColorStrikthroughKey) {
  163. KMPreferenceManager.shared.markupStrikthroughColor = sender.color
  164. } else if (itemView.key == KMMarkupColorRectangleBorderKey) {
  165. KMPreferenceManager.shared.markupRectangleBorderColor = sender.color
  166. } else if (itemView.key == KMMarkupColorUnderlineKey) {
  167. KMPreferenceManager.shared.markupUnderlineColor = sender.color
  168. } else if (itemView.key == KMMarkupColorCircleFillKey) {
  169. KMPreferenceManager.shared.markupCircleFillColor = sender.color
  170. } else if (itemView.key == KMMarkupColorPenKey) {
  171. KMPreferenceManager.shared.markupPenColor = sender.color
  172. } else if (itemView.key == KMMarkupColorCircleBorderKey) {
  173. KMPreferenceManager.shared.markupCircleBorderColor = sender.color
  174. } else if (itemView.key == KMMarkupColorTextKey) {
  175. KMPreferenceManager.shared.markupTextColor = sender.color
  176. } else if (itemView.key == KMMarkupColorLineKey) {
  177. KMPreferenceManager.shared.markupLineColor = sender.color
  178. } else if (itemView.key == KMMarkupColorNoteKey) {
  179. KMPreferenceManager.shared.markupNoteColor = sender.color
  180. }
  181. }
  182. }
  183. extension KMPreferenceMarkupController: NSComboBoxDelegate {
  184. func comboBoxSelectionDidChange(_ notification: Notification) {
  185. if (self.textComboBox.isEqual(to: notification.object)) {
  186. var index = self.textComboBox.indexOfSelectedItem
  187. if (index < 0) {
  188. index = 0
  189. }
  190. KMPreferenceManager.shared.markupFontTextString = self.fontNames[index]
  191. } else if (self.noteComboBox.isEqual(to: notification.object)) {
  192. var index = self.noteComboBox.indexOfSelectedItem
  193. if (index < 0) {
  194. index = 0
  195. }
  196. KMPreferenceManager.shared.markupFontNoteType = index
  197. }
  198. }
  199. }
  200. extension KMPreferenceMarkupController: KMPreferenceDealDataChangeProtocol {
  201. func refreshUI() {
  202. DispatchQueue.main.async {
  203. self.initData()
  204. }
  205. }
  206. }