KMEditPDFTextPropertyViewController.swift 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  1. //
  2. // KMEditPDFTextPropertyViewController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lxy on 2022/12/27.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. class KMEditPDFTextPropertyViewController: NSViewController {
  10. @IBOutlet weak var contentView: NSClipView!
  11. @IBOutlet weak var backgroundView: NSView!
  12. @IBOutlet var fontBGView: NSView!
  13. @IBOutlet var fontLabel: NSTextField!
  14. @IBOutlet var fontTitleSelect: ComponentSelect!
  15. @IBOutlet var fontTitleButton: ComponentButton!
  16. @IBOutlet var fontNameSelect: ComponentSelect!
  17. @IBOutlet var fontStyleSelect: ComponentSelect!
  18. @IBOutlet var fontSizeSelect: ComponentSelect!
  19. @IBOutlet var fontStyleGroup: ComponentCSelectorGroup!
  20. @IBOutlet var fontAlignmentGroup: ComponentCSelectorGroup!
  21. @IBOutlet var colorBGView: NSView!
  22. @IBOutlet var colorLabel: NSTextField!
  23. @IBOutlet var colorGroup: ComponentCColorGroup!
  24. @IBOutlet var colorSlider: ComponentSlider!
  25. @IBOutlet var colorOpacitySelect: ComponentSelect!
  26. @IBOutlet var alignmentBGView: NSView!
  27. private var fontTitleGroup: ComponentGroup?
  28. private var alignmentController: KMNAlignmentController?
  29. private var familyNames = CPDFFont.familyNames
  30. private let fontStyle_boldItem: ComponentCSelectorProperty = ComponentCSelectorProperty.init(size: .m, state: .normal, iconImage: NSImage(named: "fontStyle_bold"), identifier: "fontStyle_bold")
  31. private let fontStyle_ItalityItem: ComponentCSelectorProperty = ComponentCSelectorProperty.init(size: .m, state: .normal, iconImage: NSImage(named: "fontStyle_Itality"), identifier: "fontStyle_Itality")
  32. private let fontStyle_CenterItem: ComponentCSelectorProperty = ComponentCSelectorProperty.init(size: .m, state: .normal, iconImage: NSImage(named: "fontStyle_Center"), identifier: "fontStyle_Center")
  33. private let fontStyle_Underline: ComponentCSelectorProperty = ComponentCSelectorProperty.init(size: .m, state: .normal, iconImage: NSImage(named: "fontStyle_Underline"), identifier: "fontStyle_Underline")
  34. private let fontAlign_leftItem: ComponentCSelectorProperty = ComponentCSelectorProperty.init(size: .m, state: .normal, iconImage: NSImage(named: "fontAlign_left"), identifier: "fontAlign_left")
  35. private let fontAlign_centerItem: ComponentCSelectorProperty = ComponentCSelectorProperty.init(size: .m, state: .normal, iconImage: NSImage(named: "fontAlign_center"), identifier: "fontAlign_center")
  36. private let fontAlign_rightItem: ComponentCSelectorProperty = ComponentCSelectorProperty.init(size: .m, state: .normal, iconImage: NSImage(named: "fontAlign_right"), identifier: "fontAlign_right")
  37. private let fontAlign_justifyItem: ComponentCSelectorProperty = ComponentCSelectorProperty.init(size: .m, state: .normal, iconImage: NSImage(named: "fontAlign_justify"), identifier: "fontAlign_justify")
  38. var pdfView: CPDFListView?
  39. private var currentArea: CPDFEditTextArea?
  40. //自定义
  41. private var customTextModel: KMEditPDFTextFontModel = KMEditPDFTextFontModel()
  42. private var selCustomFontType: KMEditPDFTextFontType = .customize
  43. //MARK: - func
  44. override func viewDidAppear() {
  45. super.viewDidAppear()
  46. colorSlider.reloadData()
  47. }
  48. override func viewDidLoad() {
  49. super.viewDidLoad()
  50. setupProperty()
  51. }
  52. func setupProperty() {
  53. //Font
  54. fontLabel.stringValue = KMLocalizedString("Font")
  55. fontLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
  56. fontLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
  57. fontTitleSelect.properties = ComponentSelectProperties(size: .s,
  58. state: .normal,
  59. text: "")
  60. if true {
  61. var menuItemArr: [ComponentMenuitemProperty] = []
  62. var ids = [Customize_USERDEFAULTS, H1_USERDEFAULTS,
  63. H2_USERDEFAULTS, H3_USERDEFAULTS,
  64. B1_USERDEFAULTS, B2_USERDEFAULTS,
  65. B3_USERDEFAULTS]
  66. var strings = KMEditPDFTextFontTypeWrapper.allValues()
  67. for i in 0...strings.count - 1 {
  68. let string = strings[i]
  69. var id = string
  70. if i < ids.count {
  71. id = ids[i]
  72. }
  73. let item = ComponentMenuitemProperty(type: .normal, text: string, identifier: id)
  74. menuItemArr.append(item)
  75. }
  76. fontTitleSelect.updateMenuItemsArr(menuItemArr)
  77. }
  78. fontTitleSelect.delegate = self
  79. fontTitleButton.properties = ComponentButtonProperty(type: .text_gray, size: .s, onlyIcon: true, icon: NSImage(named: "toolbar_more"), keepPressState: false)
  80. fontTitleButton.setTarget(self, action: #selector(buttonClicked(_:)))
  81. fontNameSelect.properties = ComponentSelectProperties(size: .s,
  82. state: .normal,
  83. text: "")
  84. if true {
  85. var menuItemArr: [ComponentMenuitemProperty] = []
  86. for string in familyNames {
  87. let item = ComponentMenuitemProperty(type: .normal, text: string, identifier: string)
  88. menuItemArr.append(item)
  89. }
  90. fontNameSelect.updateMenuItemsArr(menuItemArr)
  91. }
  92. fontNameSelect.delegate = self
  93. fontStyleSelect.properties = ComponentSelectProperties(size: .s,
  94. state: .normal,
  95. text: "")
  96. fontStyleSelect.delegate = self
  97. fontSizeSelect.properties = ComponentSelectProperties(size: .s,
  98. state: .normal,
  99. creatable: true,
  100. text: "12 pt",
  101. textUnit: " pt",
  102. regexString: "0123456789")
  103. if true {
  104. var sizeItemArr: [ComponentMenuitemProperty] = []
  105. for string in KMHeaderFooterManager.getFontSize() {
  106. let item = ComponentMenuitemProperty(type: .normal, text: string + " pt", identifier: string)
  107. sizeItemArr.append(item)
  108. }
  109. fontSizeSelect.updateMenuItemsArr(sizeItemArr)
  110. }
  111. fontSizeSelect.delegate = self
  112. if true {
  113. let itemArr: [ComponentCSelectorProperty] = [fontStyle_boldItem, fontStyle_ItalityItem]
  114. fontStyleGroup.updateItemProperty(itemArr)
  115. fontStyleGroup.delegate = self
  116. }
  117. if true {
  118. let itemArr: [ComponentCSelectorProperty] = [fontAlign_leftItem, fontAlign_centerItem, fontAlign_rightItem, fontAlign_justifyItem]
  119. fontAlignmentGroup.updateItemProperty(itemArr)
  120. fontAlignmentGroup.delegate = self
  121. }
  122. //Color
  123. colorLabel.stringValue = KMLocalizedString("Font")
  124. colorLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
  125. colorLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
  126. let colorAProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMAnnotationPropertiesColorManager.manager.edit_Text_Colors[0])
  127. let colorBProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMAnnotationPropertiesColorManager.manager.edit_Text_Colors[1])
  128. let colorCProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMAnnotationPropertiesColorManager.manager.edit_Text_Colors[2])
  129. let colorDProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMAnnotationPropertiesColorManager.manager.edit_Text_Colors[3])
  130. let colorEProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: true, color: KMAnnotationPropertiesColorManager.manager.edit_Text_Colors[4])
  131. colorGroup.setUpWithColorPropertys([colorAProperty, colorBProperty, colorCProperty, colorDProperty], customItemProperty: colorEProperty)
  132. colorGroup.delegate = self
  133. colorSlider.properties = ComponentSliderProperty(size: .m, percent: 1)
  134. colorSlider.delegate = self
  135. colorOpacitySelect.properties = ComponentSelectProperties(size: .s,
  136. state: .normal,
  137. creatable: true,
  138. text: "100%",
  139. textUnit: "%",
  140. regexString: "0123456789%")
  141. if true {
  142. var opacityItems: [ComponentMenuitemProperty] = []
  143. for string in ["25%", "50%", "75%", "100%"] {
  144. let item = ComponentMenuitemProperty(type: .normal, text: string)
  145. opacityItems.append(item)
  146. }
  147. colorOpacitySelect.updateMenuItemsArr(opacityItems)
  148. }
  149. colorOpacitySelect.delegate = self
  150. if alignmentController == nil {
  151. alignmentController = KMNAlignmentController.init()
  152. }
  153. alignmentController?.view.frame = alignmentBGView.bounds
  154. alignmentController?.view.autoresizingMask = [.width, .height]
  155. alignmentController?.delegate = self
  156. alignmentBGView.addSubview(alignmentController!.view)
  157. }
  158. //文字块变化时调用
  159. func currentAreaChanged() {
  160. fontTitleSelect.selectItemAtIndex(0)
  161. fontTitleButton.properties.isDisabled = true
  162. fontTitleButton.reloadData()
  163. selCustomFontType = .customize
  164. }
  165. func reloadData() {
  166. let areas = pdfView?.km_editingTextAreas() ?? []
  167. if areas.count == 0 {
  168. if let _ = currentArea {
  169. currentArea = nil
  170. currentAreaChanged()
  171. }
  172. } else if areas.count == 1 {
  173. if let area = areas.first, currentArea != area {
  174. currentArea = area
  175. currentAreaChanged()
  176. }
  177. alignmentBGView.isHidden = true
  178. } else if areas.count > 1 {
  179. alignmentBGView.isHidden = false
  180. if areas.count == 2 {
  181. alignmentController?.updateMulti(false)
  182. } else {
  183. alignmentController?.updateMulti(true)
  184. }
  185. if let area = areas.first, currentArea != area {
  186. currentArea = area
  187. currentAreaChanged()
  188. }
  189. }
  190. var fontName: String?
  191. var fontStyle: String?
  192. var fontSize: CGFloat?
  193. var isBold: Bool = false
  194. var isItality: Bool = false
  195. var alignment: NSTextAlignment?
  196. var color: NSColor?
  197. var opacity: CGFloat?
  198. if let currentArea = self.currentArea {
  199. //Font
  200. if let value = pdfView?.editingSelectionCFont(with: currentArea)?.familyName {
  201. fontName = value
  202. if let value = pdfView?.editingSelectionCFont(with: currentArea)?.styleName {
  203. fontStyle = value.count > 0 ? value : "Regular"
  204. }
  205. }
  206. if let value = pdfView?.editingSelectionFontSize(byRangeEdit: currentArea) {
  207. fontSize = value
  208. }
  209. isBold = pdfView?.isBoldCurrentSelection(byRangeEdit: currentArea) ?? false
  210. isItality = pdfView?.isItalicCurrentSelection(byRangeEdit: currentArea) ?? false
  211. if let value = pdfView?.currentSelectionAlignment(byRangeEdit: currentArea) {
  212. alignment = value
  213. }
  214. //Color
  215. if let colors = pdfView?.km_editTextAreasFontColors([currentArea]) {
  216. color = colors.first
  217. }
  218. if let opacitys = pdfView?.km_editAreasOpacitys([currentArea]) {
  219. if var value = opacitys.first {
  220. value = min(1, value)
  221. value = max(0, value)
  222. opacity = value
  223. }
  224. }
  225. }
  226. if areas.count > 1 {
  227. if CPDFEditArea.isMultiFontFamilyNames(areas, inPDFView: pdfView) {
  228. fontName = nil
  229. }
  230. if CPDFEditArea.isMultiFontStyles(areas, inPDFView: pdfView) {
  231. fontStyle = nil
  232. }
  233. if CPDFEditArea.isMultiFontSizes(areas, inPDFView: pdfView) {
  234. fontSize = nil
  235. }
  236. if CPDFEditArea.isMultiFontBolds(areas, inPDFView: pdfView) {
  237. isBold = false
  238. }
  239. if CPDFEditArea.isMultiFontItalitys(areas, inPDFView: pdfView) {
  240. isItality = false
  241. }
  242. if CPDFEditArea.isMultiFontAlignment(areas, inPDFView: pdfView) {
  243. alignment = nil
  244. }
  245. if CPDFEditArea.isMultiColors(areas, inPDFView: pdfView) {
  246. color = nil
  247. }
  248. if CPDFEditArea.isMultiOpacity(areas, inPDFView: pdfView) {
  249. opacity = nil
  250. }
  251. }
  252. //Font
  253. if let value = fontName {
  254. fontNameSelect.properties.text = value
  255. var styles: [String] = CPDFFont.fontNames(forFamilyName: value)
  256. if styles.isEmpty == true {
  257. styles.append("Regular")
  258. }
  259. var menuItemArr: [ComponentMenuitemProperty] = []
  260. for string in styles {
  261. let item = ComponentMenuitemProperty(type: .normal, text: string, identifier: string)
  262. menuItemArr.append(item)
  263. }
  264. fontStyleSelect.updateMenuItemsArr(menuItemArr)
  265. } else {
  266. fontNameSelect.properties.text = "-"
  267. fontStyleSelect.updateMenuItemsArr([])
  268. }
  269. fontNameSelect.reloadData()
  270. if let value = fontStyle {
  271. fontStyleSelect.properties.text = value
  272. } else {
  273. fontStyleSelect.properties.text = "Regular"
  274. fontStyleSelect.updateMenuItemsArr([])
  275. }
  276. fontStyleSelect.reloadData()
  277. if let value = fontSize {
  278. fontSizeSelect.properties.text = String(format: "%.0f", value)
  279. } else {
  280. fontSizeSelect.properties.text = "-"
  281. }
  282. fontSizeSelect.reloadData()
  283. fontStyle_boldItem.state = isBold ? .pressed : .normal
  284. fontStyle_ItalityItem.state = isItality ? .pressed : .normal
  285. fontStyle_CenterItem.state = .normal
  286. fontStyle_Underline.state = .normal
  287. fontStyleGroup.reloadData()
  288. fontAlign_leftItem.state = .normal
  289. fontAlign_centerItem.state = .normal
  290. fontAlign_rightItem.state = .normal
  291. fontAlign_justifyItem.state = .normal
  292. if let value = alignment {
  293. if value == .left {
  294. fontAlign_leftItem.state = .pressed
  295. } else if value == .center {
  296. fontAlign_centerItem.state = .pressed
  297. } else if value == .right {
  298. fontAlign_rightItem.state = .pressed
  299. } else if value == .justified {
  300. fontAlign_justifyItem.state = .pressed
  301. }
  302. }
  303. fontAlignmentGroup.reloadData()
  304. //Color
  305. colorGroup.currentColor = color
  306. colorGroup.refreshUI()
  307. if var value = opacity {
  308. value = min(1, value)
  309. value = max(0, value)
  310. colorOpacitySelect.properties.text = String(format: "%.0f", value*100)
  311. colorSlider.properties.percent = value
  312. } else {
  313. colorSlider.properties.percent = 0
  314. colorOpacitySelect.properties.text = "-"
  315. }
  316. colorSlider.reloadData()
  317. colorOpacitySelect.reloadData()
  318. self.checkFontTitleInfo()
  319. }
  320. func checkFontTitleInfo() {
  321. if self.fontTitleSelect.indexOfSelect() == 0 {
  322. return
  323. }
  324. var type: KMEditPDFTextFontType = .customize
  325. if self.fontTitleSelect.indexOfSelect() == 1 {
  326. type = .h1
  327. } else if self.fontTitleSelect.indexOfSelect() == 2 {
  328. type = .h2
  329. } else if self.fontTitleSelect.indexOfSelect() == 3 {
  330. type = .h3
  331. } else if self.fontTitleSelect.indexOfSelect() == 4 {
  332. type = .b1
  333. } else if self.fontTitleSelect.indexOfSelect() == 5 {
  334. type = .b2
  335. } else if self.fontTitleSelect.indexOfSelect() == 6 {
  336. type = .b3
  337. }
  338. if type == .customize {
  339. return
  340. }
  341. let fontName = fontNameSelect.properties.text ?? ""
  342. let fontStyle = fontStyleSelect.properties.text ?? ""
  343. var fontSize = 12.0
  344. let bold = fontStyle_boldItem.state == .pressed
  345. let italic = fontStyle_ItalityItem.state == .pressed
  346. var alignment: NSTextAlignment = .left
  347. if fontAlign_centerItem.state == .pressed {
  348. alignment = .center
  349. } else if fontAlign_rightItem.state == .pressed {
  350. alignment = .right
  351. } else if fontAlign_justifyItem.state == .pressed {
  352. alignment = .justified
  353. }
  354. if let text = fontSizeSelect.properties.text, let textUnit = fontSizeSelect.properties.textUnit {
  355. let result = text.stringByDeleteCharString(textUnit)
  356. fontSize = result.stringToCGFloat()
  357. }
  358. let isChanged = KMEditPDFTextManager.manager.isModelChanged(type: type,
  359. fontName: fontName,
  360. fontStyle: fontStyle,
  361. fontSize: fontSize,
  362. bold: bold,
  363. italic: italic,
  364. alignment: alignment)
  365. var fontTitleText = fontTitleSelect.properties.text ?? ""
  366. if isChanged {
  367. if fontTitleText.hasPrefix("* ") == false {
  368. fontTitleText = "* " + fontTitleText
  369. }
  370. } else {
  371. if fontTitleText.hasPrefix("* ") == true {
  372. fontTitleText = fontTitleText.substring(form: 2)
  373. }
  374. }
  375. fontTitleSelect.properties.text = fontTitleText
  376. fontTitleSelect.reloadData()
  377. }
  378. func updateAreaInfoWithCustomType(type: KMEditPDFTextFontType) {
  379. var selModel: KMEditPDFTextFontModel?
  380. if type != .customize {
  381. selModel = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
  382. }
  383. if let model = selModel {
  384. let fontName = model.fontName
  385. let fontStyle = model.fontStyle
  386. let fontSize = model.fontSize
  387. let bold = model.bold
  388. let italic = model.italic
  389. let alignment = model.alignment
  390. let font = CPDFFont(familyName: fontName, fontStyle: fontStyle)
  391. pdfView?.setEditingTextarea_font(font: font)
  392. pdfView?.setEditingTextarea_FontSize(size: fontSize)
  393. pdfView?.setEditingTextarea(isBold: bold)
  394. pdfView?.setEditingTextarea(isItalic: italic)
  395. pdfView?.setEditingTextarea_Alignment(align: alignment)
  396. }
  397. }
  398. //MARK: - Action
  399. @objc func buttonClicked(_ sender: ComponentButton) {
  400. if sender == fontTitleButton {
  401. var viewHeight: CGFloat = 8
  402. var menuItemArr: [ComponentMenuitemProperty] = []
  403. for i in ["Redefine", "Reset"] {
  404. let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  405. itemSelected: false,
  406. isDisabled: false,
  407. keyEquivalent: nil,
  408. text: KMLocalizedString(i),
  409. identifier: i)
  410. menuItemArr.append(properties_Menuitem)
  411. viewHeight += 36
  412. }
  413. if fontTitleGroup == nil {
  414. fontTitleGroup = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
  415. }
  416. fontTitleGroup?.groupDelegate = self
  417. fontTitleGroup?.frame = CGRectMake(310, 0, 140, viewHeight)
  418. fontTitleGroup?.updateGroupInfo(menuItemArr)
  419. var point = fontTitleButton.superview?.convert(fontTitleButton.frame.origin, to: nil) ?? CGPointZero
  420. point.y -= viewHeight
  421. fontTitleGroup?.showWithPoint(point, relativeTo: fontTitleButton)
  422. }
  423. }
  424. override func mouseDown(with event: NSEvent) {
  425. super.mouseDown(with: event)
  426. view.window?.makeFirstResponder(nil)
  427. }
  428. }
  429. //MARK: - ComponentSelectDelegate
  430. extension KMEditPDFTextPropertyViewController: ComponentSelectDelegate {
  431. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  432. if var result = menuItemProperty?.text {
  433. if let textUnit = view?.properties.textUnit {
  434. result = result.stringByDeleteCharString(textUnit)
  435. }
  436. if view == fontTitleSelect {
  437. if menuItemProperty?.identifier == Customize_USERDEFAULTS {
  438. fontTitleButton.properties.isDisabled = true
  439. selCustomFontType = .customize
  440. } else {
  441. fontTitleButton.properties.isDisabled = false
  442. var type: KMEditPDFTextFontType = .customize
  443. if menuItemProperty?.identifier == H1_USERDEFAULTS {
  444. type = .h1
  445. } else if menuItemProperty?.identifier == H2_USERDEFAULTS {
  446. type = .h2
  447. } else if menuItemProperty?.identifier == H3_USERDEFAULTS {
  448. type = .h3
  449. } else if menuItemProperty?.identifier == B1_USERDEFAULTS {
  450. type = .b1
  451. } else if menuItemProperty?.identifier == B2_USERDEFAULTS {
  452. type = .b2
  453. } else if menuItemProperty?.identifier == B3_USERDEFAULTS {
  454. type = .b3
  455. }
  456. selCustomFontType = type
  457. self.updateAreaInfoWithCustomType(type: type)
  458. }
  459. fontTitleButton.reloadData()
  460. } else if view == fontNameSelect {
  461. var styleName = "Regular"
  462. let styleNames = CPDFFont.fontNames(forFamilyName: result)
  463. if let first = styleNames.first {
  464. styleName = first
  465. }
  466. pdfView?.setEditingTextarea_font(font: CPDFFont(familyName: result, fontStyle: styleName))
  467. } else if view == fontStyleSelect {
  468. let fontName = fontNameSelect.properties.text ?? "Helvetica"
  469. pdfView?.setEditingTextarea_font(font: CPDFFont.init(familyName: fontName, fontStyle: result))
  470. } else if view == fontSizeSelect {
  471. if let text = menuItemProperty?.text {
  472. let fontSize = result.stringToCGFloat()
  473. pdfView?.setEditingTextarea_FontSize(size: fontSize)
  474. }
  475. } else if view == colorOpacitySelect {
  476. let opacity = max(0, min(1, result.stringToCGFloat()/100))
  477. pdfView?.setEditingAreasOpacity(opacity)
  478. }
  479. }
  480. reloadData()
  481. }
  482. func componentSelectTextDidEndEditing(_ view: ComponentSelect) {
  483. if var result = view.properties.text {
  484. if let textUnit = view.properties.textUnit {
  485. result = result.stringByDeleteCharString(textUnit)
  486. }
  487. if view == fontSizeSelect {
  488. let size = result.stringToCGFloat()
  489. let fontSize = min(size, 100)
  490. pdfView?.setEditingTextarea_FontSize(size: fontSize)
  491. } else if view == colorOpacitySelect {
  492. let opacity = max(0, min(1, result.stringToCGFloat()/100))
  493. pdfView?.setEditingAreasOpacity(opacity)
  494. }
  495. }
  496. reloadData()
  497. }
  498. }
  499. //MARK: - ComponentCColorDelegate
  500. extension KMEditPDFTextPropertyViewController: ComponentCColorDelegate {
  501. func componentCColorDidChooseColor(_ view: NSView, _ color: NSColor?) {
  502. if view == colorGroup {
  503. pdfView?.changeEditingTextarea_Color(color: color)
  504. }
  505. }
  506. }
  507. //MARK: - ComponentSliderDelegate
  508. extension KMEditPDFTextPropertyViewController: ComponentSliderDelegate {
  509. func componentSliderDidUpdate(_ view: ComponentSlider) {
  510. let percent = view.properties.percent
  511. self.pdfView?.setEditingAreasOpacity(percent)
  512. reloadData()
  513. }
  514. }
  515. //MARK: - ComponentCSelectorGroupDelegate
  516. extension KMEditPDFTextPropertyViewController: ComponentCSelectorGroupDelegate {
  517. func componentCSelectorGroupDidChoose(_ view: ComponentCSelectorGroup, _ item: ComponentCSelectorItem) {
  518. if view == fontStyleGroup {
  519. if item.properties.identifier == "fontStyle_bold" {
  520. pdfView?.setEditingTextarea_Bold()
  521. } else if item.properties.identifier == "fontStyle_Itality" {
  522. pdfView?.setEditingTextarea_Italic()
  523. } else if item.properties.identifier == "fontStyle_Center" {
  524. } else if item.properties.identifier == "fontStyle_Underline" {
  525. }
  526. } else if view == fontAlignmentGroup {
  527. if item.properties.identifier == "fontAlign_left" {
  528. pdfView?.setEditingTextarea_Alignment(align: .left)
  529. } else if item.properties.identifier == "fontAlign_center" {
  530. pdfView?.setEditingTextarea_Alignment(align: .center)
  531. } else if item.properties.identifier == "fontAlign_right" {
  532. pdfView?.setEditingTextarea_Alignment(align: .right)
  533. } else if item.properties.identifier == "fontAlign_justify" {
  534. pdfView?.setEditingTextarea_Alignment(align: .justified)
  535. }
  536. }
  537. reloadData()
  538. }
  539. }
  540. //MARK: - KMNAlignmentControllerDelegate
  541. extension KMEditPDFTextPropertyViewController: KMNAlignmentControllerDelegate {
  542. func alignmentControllerDidClick(_ controller: KMNAlignmentController, _ alignmentType: KMPDFActiveFormsAlignType) {
  543. pdfView?.changeEditingAreas(alignmentType)
  544. }
  545. }
  546. //MARK: - ComponentGroupDelegate
  547. extension KMEditPDFTextPropertyViewController: ComponentGroupDelegate {
  548. func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
  549. if menuItemProperty?.identifier == "Redefine" {
  550. self.redefineCustomFontType()
  551. } else if menuItemProperty?.identifier == "Reset" {
  552. if selCustomFontType != .customize {
  553. KMEditPDFTextManager.manager.resetTextPresupposition(type: selCustomFontType)
  554. self.updateAreaInfoWithCustomType(type: selCustomFontType)
  555. }
  556. }
  557. reloadData()
  558. }
  559. func redefineCustomFontType() {
  560. if selCustomFontType == .customize {
  561. return
  562. }
  563. let fontName = fontNameSelect.properties.text ?? ""
  564. let fontStyle = fontStyleSelect.properties.text ?? ""
  565. var fontSize = 12.0
  566. let bold = fontStyle_boldItem.state == .pressed
  567. let italic = fontStyle_ItalityItem.state == .pressed
  568. var alignment: NSTextAlignment = .left
  569. if fontAlign_centerItem.state == .pressed {
  570. alignment = .center
  571. } else if fontAlign_rightItem.state == .pressed {
  572. alignment = .right
  573. } else if fontAlign_justifyItem.state == .pressed {
  574. alignment = .justified
  575. }
  576. if let text = fontSizeSelect.properties.text, let textUnit = fontSizeSelect.properties.textUnit {
  577. let result = text.stringByDeleteCharString(textUnit)
  578. fontSize = result.stringToCGFloat()
  579. }
  580. KMEditPDFTextManager.manager.reDefineTextPresupposition(type: selCustomFontType, fontName: fontName, fontStyle: fontStyle, fontSize: fontSize, bold: bold, italic: italic, alignment: alignment)
  581. }
  582. }