KMBatchBatesNumberView.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. //
  2. // KMBatchBatesNumberView.swift
  3. // PDF Master
  4. //
  5. // Created by lizhe on 2023/1/16.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. class KMBatchBatesNumberView: KMBatchSettingItemView {
  10. @IBOutlet weak var itemContentView: NSView!
  11. @IBOutlet var saveTemplateButton: ComponentButton!
  12. @IBOutlet var applyButton: ComponentButton!
  13. @IBOutlet var applyBtnLeftConst: NSLayoutConstraint!
  14. var propertyController: KMBatesPropertyController = KMBatesPropertyController.init()
  15. var templatesController: KMBatesTemplateController = KMBatesTemplateController()
  16. var saveTemplateMessage: ComponentMessage = ComponentMessage()
  17. var totalPDFCount: Int = 1
  18. var batesModel: KMBatesModel? {
  19. get {
  20. if editSubType == .template {
  21. return templatesController.selectedDataModel
  22. } else if editSubType == .add ||
  23. editSubType == .edit {
  24. return propertyController.batesModel
  25. }
  26. return nil
  27. }
  28. }
  29. var editSubType: KMPDFEditSubModeType = .template {
  30. didSet {
  31. resetUI()
  32. }
  33. }
  34. //MARK: - func
  35. override func draw(_ dirtyRect: NSRect) {
  36. super.draw(dirtyRect)
  37. // Drawing code here.
  38. }
  39. override func setup() {
  40. super.setup()
  41. propertyController.view.frame = itemContentView.bounds
  42. propertyController.view.autoresizingMask = [.width, .height]
  43. propertyController.delegate = self
  44. propertyController.view.isHidden = true
  45. propertyController.isInBatchMode = true
  46. itemContentView.addSubview(propertyController.view)
  47. templatesController.view.frame = itemContentView.bounds
  48. templatesController.view.autoresizingMask = [.width, .height]
  49. templatesController.delegate = self
  50. templatesController.view.isHidden = true
  51. itemContentView.addSubview(templatesController.view)
  52. setupProperty()
  53. reloadInfoView()
  54. }
  55. override func reloadData() {
  56. super.reloadData()
  57. var applyEnable = true
  58. if let model = self.batesModel {
  59. if model.topLeftString.count == 0 && model.topCenterString.count == 0 && model.topRightString.count == 0 &&
  60. model.bottomLeftString.count == 0 && model.bottomCenterString.count == 0 && model.bottomRightString.count == 0 {
  61. applyEnable = false
  62. }
  63. } else {
  64. applyEnable = false
  65. }
  66. saveTemplateButton.properties.isDisabled = !applyEnable
  67. saveTemplateButton.reloadData()
  68. if self.filesData.count == 0 {
  69. applyEnable = false
  70. }
  71. applyButton.properties.isDisabled = !applyEnable
  72. applyButton.reloadData()
  73. propertyController.totalPDFCount = totalPDFCount
  74. }
  75. func reloadInfoView() {
  76. if editSubType == .template {
  77. templatesController.reloadData()
  78. } else if editSubType == .add {
  79. propertyController.editSubType = editSubType
  80. propertyController.reloadData()
  81. } else if editSubType == .edit {
  82. propertyController.editSubType = editSubType
  83. propertyController.reloadData()
  84. }
  85. }
  86. func setupProperty() {
  87. saveTemplateMessage.properties = ComponentMessageProperty(messageType: .success, title: KMLocalizedString("Saved Template"))
  88. saveTemplateButton.properties = ComponentButtonProperty(type: .default_tertiary,
  89. size: .m,
  90. state: .normal,
  91. onlyIcon: true,
  92. icon: NSImage(named: "icon_wm_template_save"),
  93. keepPressState: false)
  94. saveTemplateButton.setTarget(self, action: #selector(saveTemplateButtonAction(_:)))
  95. saveTemplateButton.reloadData()
  96. applyButton.properties = ComponentButtonProperty(type: .primary,
  97. size: .m,
  98. state: .normal,
  99. buttonText: KMLocalizedString("Apply"),
  100. keepPressState: false)
  101. applyButton.setTarget(self, action: #selector(applyButtonAction(_:)))
  102. applyButton.reloadData()
  103. }
  104. func resetUI() {
  105. propertyController.view.isHidden = true
  106. templatesController.view.isHidden = true
  107. if editSubType == .template {
  108. templatesController.view.isHidden = false
  109. applyBtnLeftConst.constant = 16
  110. saveTemplateButton.isHidden = true
  111. } else if editSubType == .add {
  112. propertyController.view.isHidden = false
  113. propertyController.editSubType = editSubType
  114. applyBtnLeftConst.constant = 68
  115. saveTemplateButton.isHidden = false
  116. } else if editSubType == .edit {
  117. propertyController.view.isHidden = false
  118. propertyController.editSubType = editSubType
  119. applyBtnLeftConst.constant = 68
  120. saveTemplateButton.isHidden = false
  121. }
  122. saveTemplateButton.reloadData()
  123. }
  124. func getValidCPDFBates() -> CPDFBates? {
  125. if let data = batesModel {
  126. let cPDFBates = CPDFBates()
  127. cPDFBates.pageString = "0"
  128. let fontSize = data.fontsize
  129. let fontName: String = data.fontName
  130. let font = NSFont.boldSystemFont(ofSize:fontSize)
  131. let style = NSMutableParagraphStyle()
  132. style.alignment = .center
  133. style.lineBreakMode = .byCharWrapping
  134. let size: NSSize = "text".boundingRect(with: NSSize(width: 1000, height: 1000), options: NSString.DrawingOptions(rawValue: 3), attributes: [NSAttributedString.Key.font : font, NSAttributedString.Key.paragraphStyle : style]).size
  135. cPDFBates.margin = NSEdgeInsetsMake(max(CGFloat(data.topMargin)-size.height, 0), CGFloat(data.leftMargin), max(CGFloat(data.bottomMargin)-size.height, 0), CGFloat(data.rightMargin))
  136. let strings = KMBatesManager.parseModel(model: data, UInt(totalPDFCount))
  137. var count: Int = 0
  138. let color = data.color
  139. for text in strings {
  140. cPDFBates.setText(text, at: UInt(count))
  141. cPDFBates.setTextColor(color, at: UInt(count))
  142. cPDFBates.setFontSize(fontSize, at: UInt(count))
  143. cPDFBates.setFontName(fontName, at: UInt(count))
  144. count += 1
  145. }
  146. return cPDFBates
  147. }
  148. return nil
  149. }
  150. @objc func saveTemplateButtonAction(_ sender: NSButton) {
  151. propertyController.saveAction()
  152. }
  153. @objc func applyButtonAction(_ sender: NSButton) {
  154. }
  155. }
  156. //MARK: - KMHeaderPropertyControllerDelegate
  157. extension KMBatchBatesNumberView: KMBatesPropertyControllerDelegate {
  158. func batesPropertyControllerDidUpdate(_ controller: KMBatesPropertyController) {
  159. reloadData()
  160. }
  161. func batesPropertyControllerDidChangetoTemplate(_ controller: KMBatesPropertyController) {
  162. editSubType = .template
  163. templatesController.selectedDataModel = nil
  164. templatesController.reloadData()
  165. reloadData()
  166. }
  167. func batesPropertyControllerSaveTemplateSuccess(_ controller: KMBatesPropertyController, _ data: KMBatesModel) {
  168. saveTemplateMessage.frame = CGRectMake((CGRectGetWidth(self.frame) - saveTemplateMessage.properties.propertyInfo.viewWidth)/2,
  169. CGRectGetHeight(self.frame) - saveTemplateMessage.properties.propertyInfo.viewHeight - 8,
  170. saveTemplateMessage.properties.propertyInfo.viewWidth,
  171. saveTemplateMessage.properties.propertyInfo.viewHeight)
  172. saveTemplateMessage.reloadData()
  173. saveTemplateMessage.show(inView: self, autoHideSeconde: 2)
  174. editSubType = .template
  175. templatesController.selectedDataModel = data
  176. templatesController.reloadData()
  177. KMBatesManager.defaultManager.defaultModel = KMBatesModel()
  178. }
  179. func batesPropertyControllerCancelTemplateEdit(_ controller: KMBatesPropertyController) {
  180. editSubType = .template
  181. templatesController.selectedDataModel = controller.batesModel
  182. templatesController.reloadData()
  183. }
  184. func batesPropertyControllerFinishTemplateEdit(_ controller: KMBatesPropertyController) {
  185. editSubType = .template
  186. templatesController.selectedDataModel = controller.batesModel
  187. templatesController.reloadData()
  188. }
  189. }
  190. //MARK: - KMHFTemplateControllerDelegate
  191. extension KMBatchBatesNumberView: KMBatesTemplateControllerDelegate {
  192. func templateControllerDidSelectedChanged(_ controller: KMBatesTemplateController) {
  193. reloadData()
  194. }
  195. func templateControllerDidAddData(_ controller: KMBatesTemplateController) {
  196. editSubType = .add
  197. propertyController.clearData()
  198. propertyController.batesModel = KMBatesManager.defaultManager.defaultModel
  199. propertyController.reloadData()
  200. templatesController.selectedDataModel = nil
  201. templatesController.reloadData()
  202. }
  203. func templateControllerDidEditData(_ controller: KMBatesTemplateController, _ data: KMBatesModel) {
  204. editSubType = .edit
  205. if data.bottomLeftString.count > 0 {
  206. propertyController.positionSelRow = 0
  207. propertyController.positionSelColumn = 0
  208. } else if data.bottomCenterString.count > 0 {
  209. propertyController.positionSelRow = 0
  210. propertyController.positionSelColumn = 1
  211. } else if data.bottomRightString.count > 0 {
  212. propertyController.positionSelRow = 0
  213. propertyController.positionSelColumn = 2
  214. } else if data.topLeftString.count > 0 {
  215. propertyController.positionSelRow = 1
  216. propertyController.positionSelColumn = 0
  217. } else if data.topCenterString.count > 0 {
  218. propertyController.positionSelRow = 1
  219. propertyController.positionSelColumn = 1
  220. } else if data.topRightString.count > 0 {
  221. propertyController.positionSelRow = 1
  222. propertyController.positionSelColumn = 2
  223. }
  224. propertyController.batesModel = data
  225. propertyController.originalDataDict = KMBatesManager.defaultManager.parseModel(model: data)
  226. propertyController.reloadData()
  227. templatesController.selectedDataModel = nil
  228. templatesController.reloadData()
  229. }
  230. }