KMHeaderFooterPropertyInfoController.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. //
  2. // KMHeaderFooterPropertyInfoController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2022/12/27.
  6. //
  7. import Cocoa
  8. class KMHeaderFooterPropertyInfoController: NSViewController {
  9. @IBOutlet weak var fontBox: NSBox!
  10. var fontView = KMHeaderFooterFontInfoView()
  11. @IBOutlet weak var marginBox: NSBox!
  12. var marginView = KMHeaderFooterMarginInfoView()
  13. @IBOutlet weak var dateBox: NSBox!
  14. var dateView = KMHeaderFooterDateInfoView()
  15. @IBOutlet weak var pageBox: NSBox!
  16. var pageView = KMHeaderFooterPageInfoView()
  17. @IBOutlet weak var contentBox: NSBox!
  18. var contentView = KMHeaderFooterContentInfoView()
  19. @IBOutlet weak var pageRangeBox: NSBox!
  20. var pagePageView = KMConvertPageRangeSettingItemView.createFromNib()
  21. weak var delegate: KMWatermarkAdjectivePropertyDelegate!
  22. init() {
  23. super.init(nibName: "KMHeaderFooterPropertyInfoController", bundle: nil)
  24. }
  25. required init?(coder: NSCoder) {
  26. super.init(nibName: "KMHeaderFooterPropertyInfoController", bundle: nil)
  27. }
  28. private var myModel: KMHeaderFooterObject!
  29. var model: KMHeaderFooterObject {
  30. get {
  31. return myModel
  32. }
  33. set {
  34. myModel = newValue
  35. // self.fontView.model = newValue
  36. // self.marginView.model = newValue
  37. // self.dateView.model = newValue
  38. //
  39. // self.pageView.leftComboBox.removeAllItems()
  40. // self.pageView.leftComboBox.addItems(withObjectValues: KMWatermarkAdjectiveTools.getPageFormats())
  41. // if (newValue.pageFormatString.isEmpty) {
  42. // self.pageView.leftComboBox.stringValue = KMWatermarkAdjectiveTools.getPageFormats().first!
  43. // } else {
  44. // self.pageView.leftComboBox.stringValue = newValue.pageFormatString
  45. // }
  46. // self.pageView.rightComboBox.removeAllItems()
  47. // for i in 0 ..< newValue.pageCount {
  48. // self.pageView.rightComboBox.addItem(withObjectValue: i+1)
  49. // }
  50. //
  51. // if (newValue.startString.isEmpty) {
  52. // self.pageView.rightComboBox.stringValue = "1"
  53. // } else {
  54. // self.pageView.rightComboBox.stringValue = newValue.startString
  55. // }
  56. //
  57. // self.contentView.model = newValue
  58. }
  59. }
  60. override func viewWillAppear() {
  61. super.viewWillAppear()
  62. /// 滚动到顶部
  63. DispatchQueue.main.async {
  64. let contentView = self.fontBox.enclosingScrollView!.contentView;
  65. contentView.scroll(to: NSMakePoint(0, NSHeight(self.fontBox.enclosingScrollView!.documentView!.frame)-NSHeight(contentView.frame)))
  66. }
  67. }
  68. override func viewDidLoad() {
  69. super.viewDidLoad()
  70. let fontView = self.fontView
  71. fontView.frame = self.fontBox.contentView!.bounds
  72. fontView.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
  73. self.fontBox.contentView?.addSubview(fontView)
  74. fontView.itemClick = { [weak self] (index: Int, value: Any) in
  75. if (index == 1) { /// 字体名称
  76. // switch self!.model.textFont {
  77. // case .font(name: _, size: let size):
  78. // self!.model.textFont = .font(name: value as! String, size: size)
  79. // default:
  80. // break
  81. // }
  82. //
  83. if (self!.delegate != nil) {
  84. self!.delegate.propertyInfoDidChange(model: self!.model)
  85. }
  86. } else if (index == 2) { /// 字体大小
  87. // switch self!.model.textFont {
  88. // case .font(name: let name, size: _):
  89. // self!.model.textFont = .font(name: name, size: CGFloat(value as! Int))
  90. // default:
  91. // break
  92. // }
  93. if (self!.delegate != nil) {
  94. self!.delegate.propertyInfoDidChange(model: self!.model)
  95. }
  96. } else if (index == 3) { /// 字体颜色
  97. let panel = NSColorPanel.shared
  98. panel.setTarget(self!)
  99. panel.setAction(#selector(self!.colorPanelAction))
  100. panel.orderFront(nil)
  101. }
  102. }
  103. let marginView = self.marginView
  104. marginView.frame = self.marginBox.contentView!.bounds
  105. marginView.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
  106. self.marginBox.contentView?.addSubview(marginView)
  107. marginView.itemClick = { [weak self] (index: Int, value: Any) in
  108. if (index == 1) { /// top
  109. self!.model.topMargin = value as! Int
  110. } else if (index == 2) { /// bottom
  111. self!.model.bottomMargin = value as! Int
  112. } else if (index == 3) { /// left
  113. self!.model.leftMargin = value as! Int
  114. } else if (index == 4) { /// right
  115. self!.model.rightMargin = value as! Int
  116. }
  117. if (self!.delegate != nil) {
  118. self!.delegate.propertyInfoDidChange(model: self!.model)
  119. }
  120. }
  121. let dateView = self.dateView
  122. dateView.frame = self.dateBox.contentView!.bounds
  123. dateView.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
  124. self.dateBox.contentView?.addSubview(dateView)
  125. dateView.itemClick = { [weak self] (index: Int, value: Any) in
  126. self!.model.dateFormatString = value as! String
  127. if (self!.delegate != nil) {
  128. self!.delegate.propertyInfoDidChange(model: self!.model)
  129. }
  130. }
  131. let pageView = self.pageView
  132. pageView.frame = self.pageBox.contentView!.bounds
  133. pageView.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
  134. self.pageBox.contentView?.addSubview(pageView)
  135. pageView.leftLabel.stringValue = NSLocalizedString("Page:", comment: "")
  136. pageView.itemClick = { [weak self] (index: Int, value: Any) in
  137. if (index == 1) { /// 页面
  138. self!.model.pageFormatString = KMWatermarkAdjectiveTools.getPageFormats()[value as! Int]
  139. } else if (index == 2) { /// 起始页
  140. self!.model.startString = "\(value as! Int+1)"
  141. }
  142. if (self!.delegate != nil) {
  143. self!.delegate.propertyInfoDidChange(model: self!.model)
  144. }
  145. }
  146. let contentView = self.contentView
  147. contentView.frame = self.contentBox.contentView!.bounds
  148. contentView.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
  149. self.contentBox.contentView?.addSubview(contentView)
  150. contentView.addAction = { [weak self]
  151. (index: Int, sender: NSButton) in
  152. let menu = NSMenu()
  153. let item = menu.addItem(withTitle: NSLocalizedString("Insert Page Number", comment: ""), action: #selector(self!.insertPageAction), keyEquivalent: "")
  154. item.target = self
  155. let item2 = menu.addItem(withTitle: NSLocalizedString("Insert Date", comment: ""), action: #selector(self!.insertDateAction), keyEquivalent: "")
  156. item2.target = self
  157. menu.popUp(positioning: nil, at: NSPoint(x: sender.bounds.midX, y: sender.bounds.maxY), in: sender)
  158. }
  159. contentView.itemClick = { [weak self] (index: Int, value: Any) in
  160. self!.updateModelForContentInfo(index: index, value: value as! String)
  161. }
  162. let pageRangeView = self.pagePageView
  163. pageRangeView?.frame = self.pageRangeBox.contentView!.bounds
  164. pageRangeView?.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
  165. self.pageRangeBox.contentView?.addSubview(pageRangeView!)
  166. pageRangeView!.pageSizeComboBox.removeAllItems()
  167. pageRangeView!.pageSizeComboBox.addItems(withObjectValues: [NSLocalizedString("All Pages", comment: ""), NSLocalizedString("Odd Pages", comment: ""), NSLocalizedString("Even Pages", comment: ""), NSLocalizedString("Customized", comment: "")])
  168. pageRangeView!.pageSizeComboBox.selectItem(at: 0)
  169. pageRangeView?.isTextDidEndCallback = true
  170. pageRangeView?.itemClick = { [unowned self] index, _ in
  171. // self.model.pageRangeType = KMWatermarkeModelPageRangeType(rawValue: index)!
  172. if (self.delegate != nil) {
  173. self.delegate.propertyInfoDidChange(model: self.model)
  174. }
  175. }
  176. pageRangeView?.textDidEndEditingCallback = { [weak self] (textString: String) in
  177. // let array = KMPageRangeTools.findSelectPage(pageRangeString: textString, pageCount: self!.model.pageCount)
  178. // if (array.count <= 0) {
  179. // let alert = NSAlert()
  180. // alert.alertStyle = .warning
  181. // alert.messageText = NSLocalizedString("Invalid page range or the page number is out of range. Please try again.", comment: "")
  182. // alert.runModal()
  183. // return
  184. // }
  185. // var pageString: String = ""
  186. // for i in 0 ..< array.count {
  187. // pageString.append("\(array[i]-1)")
  188. //
  189. // if (i != array.count-1) {
  190. // pageString.append(",")
  191. // }
  192. // }
  193. // self!.model.pageRangeString = pageString
  194. if (self!.delegate != nil) {
  195. self!.delegate.propertyInfoDidChange(model: self!.model)
  196. }
  197. }
  198. }
  199. private func updateModelForContentInfo(index: Int, value: String) {
  200. if (index == 1) {
  201. self.model.topLeftString = value
  202. } else if (index == 2) {
  203. self.model.topCenterString = value
  204. } else if (index == 3) {
  205. self.model.topRightString = value
  206. } else if (index == 4) {
  207. self.model.bottomLeftString = value
  208. } else if (index == 5) {
  209. self.model.bottomCenterString = value
  210. } else if (index == 6) {
  211. self.model.bottomRightString = value
  212. }
  213. if (self.delegate != nil) {
  214. self.delegate.propertyInfoDidChange(model: self.model)
  215. }
  216. }
  217. @objc func colorPanelAction(sender: NSColorPanel) {
  218. let color = KMWatermarkAdjectiveTools.parseColor(color: sender.color)
  219. // self.model.textColor = .color(red: color.red, green: color.green, blue: color.blue, alpha: color.alpha)
  220. self.fontView.colorView.layer?.backgroundColor = sender.color.cgColor
  221. if (self.delegate != nil) {
  222. self.delegate.propertyInfoDidChange(model: self.model)
  223. }
  224. }
  225. @objc private func insertPageAction(sender: NSMenuItem) {
  226. let string: String = "<<\(self.pageView.leftComboBox.stringValue)>>"
  227. self.contentView.textView.string = "\(self.contentView.textView.string)".appending(string)
  228. self.updateModelForContentInfo(index: self.contentView.indexForSelectedItem, value: self.contentView.textView.string)
  229. }
  230. @objc private func insertDateAction(sender: NSMenuItem) {
  231. let string: String = "<<\(self.myModel.dateFormatString)>>"
  232. self.contentView.textView.string = "\(self.contentView.textView.string)".appending(string)
  233. self.updateModelForContentInfo(index: self.contentView.indexForSelectedItem, value: self.contentView.textView.string)
  234. }
  235. }