KMProfileInfoWindowController.swift 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. //
  2. // KMProfileInfoWindowController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2023/11/9.
  6. //
  7. import Cocoa
  8. class KMProfileInfoWindowController: KMNBaseWindowController {
  9. var callBack: ((String) -> Void)?
  10. @IBOutlet var titleLabel: NSTextField!
  11. @IBOutlet var tableView: NSTableView!
  12. @IBOutlet var backButton: NSButton!
  13. @IBOutlet var addButton: NSButton!
  14. @IBOutlet var addNewInfoButton: NSButton!
  15. @IBOutlet var removeNewInfoButton: NSButton!
  16. var tableContents: [String] = []
  17. private let TitleCellIdentifier = "TitleCell"
  18. private let NormalCellIdentifier = "Normal"
  19. override func windowDidLoad() {
  20. super.windowDidLoad()
  21. self._configuViews()
  22. self._fetchDisplayKeys()
  23. self.tableView.reloadData()
  24. }
  25. @IBAction func addFileName_Add(_ sender: NSButton) {
  26. self.window?.makeFirstResponder(nil)
  27. let tag = sender.tag
  28. let cellView = self.tableView.view(atColumn: 0, row: tag, makeIfNecessary: false) as? KMProfileCellView
  29. if let _ = cellView {
  30. if let rowV = self.tableView.rowView(atRow: tag, makeIfNecessary: false), rowV.isSelected == false {
  31. self.tableView.km_safe_selectRowIndexes(.init(integer: tag), byExtendingSelection: false)
  32. }
  33. }
  34. if let data = cellView?.isKind(of: KMProfileCellView.self), data {
  35. cellView?.addButton.isHidden = true
  36. cellView?.detailtextField.isHidden = false
  37. cellView?.detailtextField.becomeFirstResponder()
  38. }
  39. }
  40. @IBAction func buttonClicked_back(_ sender: AnyObject?) {
  41. guard let block = self.callBack else {
  42. return
  43. }
  44. block("")
  45. }
  46. @IBAction func buttonClicked_add(_ sender: AnyObject?) {
  47. let selectRow = self.tableView.selectedRow
  48. if (selectRow >= 0) {
  49. if (self.callBack != nil) {
  50. let cellView = self.tableView.view(atColumn: 0, row: selectRow, makeIfNecessary: false) as? KMProfileCellView
  51. self.callBack!(cellView?.detailtextField.stringValue ?? "")
  52. }
  53. }
  54. }
  55. @IBAction func buttonClicked_addNewInfo(_ sender: AnyObject?) {
  56. let dict: [String : String] = ["" : ""]
  57. KMProfileInfo.shared().insertObject(dict, inCustomInfoArrayAt: KMProfileInfo.shared().customInfoArray.count)
  58. self._fetchDisplayKeys()
  59. self.tableView.reloadData()
  60. if (self.tableView.numberOfRows > 1) {
  61. self.tableView.scrollRowToVisible(self.tableView.numberOfRows - 1)
  62. let set = NSIndexSet(index: self.tableView.numberOfRows - 1)
  63. self.tableView.selectRowIndexes(set as IndexSet, byExtendingSelection: false)
  64. let cellView = self.tableView.view(atColumn: 0, row: self.tableView.selectedRow, makeIfNecessary: false) as? KMProfileCellView
  65. cellView?.addButton.isHidden = true
  66. cellView?.textField?.becomeFirstResponder()
  67. }
  68. }
  69. @IBAction func buttonClicked_RemoveNewInfo(_ sender: AnyObject?) {
  70. let editIndex = self.tableView.selectedRow
  71. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom")) ?? NSNotFound
  72. if (editIndex - customIndex - 1 < KMProfileInfo.shared().customInfoArray.count) {
  73. KMProfileInfo.shared().removeObjectFromCustomInfoArray(at: editIndex - customIndex - 1)
  74. self._fetchDisplayKeys()
  75. self.tableView.reloadData()
  76. self.removeNewInfoButton.isEnabled = false
  77. }
  78. }
  79. // MARK: - NSMenu Action
  80. @IBAction func menuItemClicked_Edit(_ sender: AnyObject?) {
  81. let cellView = self.tableView.view(atColumn: 0, row: self.tableView.clickedRow, makeIfNecessary: false) as? KMProfileCellView
  82. let set = IndexSet(integer: self.tableView.clickedRow)
  83. self.tableView.selectRowIndexes(set, byExtendingSelection: false)
  84. if let data = cellView?.textField?.isEditable, data {
  85. if let data = cellView?.textField?.stringValue.isEmpty, data {
  86. cellView?.textField?.becomeFirstResponder()
  87. }else {
  88. cellView?.detailtextField.becomeFirstResponder()
  89. }
  90. } else {
  91. cellView?.detailtextField.becomeFirstResponder()
  92. }
  93. }
  94. @IBAction func menuItemClicked_Add(_ sender: AnyObject?) {
  95. let cellView = self.tableView.view(atColumn: 0, row: self.tableView.clickedRow, makeIfNecessary: false) as? KMProfileCellView
  96. if (self.callBack != nil) {
  97. self.callBack!(cellView?.detailtextField.stringValue ?? "")
  98. }
  99. }
  100. @IBAction func menuItemClicked_Delete(_ sender: AnyObject?) {
  101. let editIndex = self.tableView.clickedRow
  102. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom")) ?? NSNotFound
  103. if (editIndex < customIndex) {
  104. switch (editIndex) {
  105. case 1:
  106. KMProfileInfo.shared().fullName = ""
  107. break;
  108. case 2:
  109. KMProfileInfo.shared().firstName = ""
  110. break;
  111. case 3:
  112. KMProfileInfo.shared().middleName = ""
  113. break;
  114. case 4:
  115. KMProfileInfo.shared().lastName = ""
  116. break;
  117. case 6:
  118. KMProfileInfo.shared().street1 = ""
  119. break;
  120. case 7:
  121. KMProfileInfo.shared().street2 = ""
  122. break;
  123. case 8:
  124. KMProfileInfo.shared().city = ""
  125. break;
  126. case 9:
  127. KMProfileInfo.shared().state = ""
  128. break;
  129. case 10:
  130. KMProfileInfo.shared().zip = ""
  131. break;
  132. case 11:
  133. KMProfileInfo.shared().country = ""
  134. break;
  135. case 13:
  136. KMProfileInfo.shared().email = ""
  137. break;
  138. case 14:
  139. KMProfileInfo.shared().tel = ""
  140. break;
  141. case 16:
  142. // [KMProfileInfo.shared().date = @"";
  143. break;
  144. case 17:
  145. KMProfileInfo.shared().birthDate = ""
  146. break;
  147. default:
  148. break;
  149. }
  150. } else {
  151. KMProfileInfo.shared().removeObjectFromCustomInfoArray(at: editIndex - customIndex - 1)
  152. }
  153. self._fetchDisplayKeys()
  154. self.tableView.reloadData()
  155. }
  156. }
  157. // MARK: - Private Methods
  158. extension KMProfileInfoWindowController {
  159. private func _configuViews() {
  160. self.titleLabel.stringValue = KMLocalizedString("My Profile")
  161. //Button Part
  162. self.backButton.title = KMLocalizedString("Cancel")
  163. self.addButton.title = KMLocalizedString("Add to Doc")
  164. self.addButton.isEnabled = false
  165. self.removeNewInfoButton.isEnabled = false
  166. //NSMenu Part
  167. let editItem = self.tableView.menu?.item(at: 0)
  168. let addItem = self.tableView.menu?.item(at: 1)
  169. let deleteItem = self.tableView.menu?.item(at: 2)
  170. editItem?.title = KMLocalizedString("Edit")
  171. addItem?.title = KMLocalizedString("Add to Doc")
  172. deleteItem?.title = KMLocalizedString("Delete")
  173. }
  174. private func _fetchDisplayKeys() {
  175. self.tableContents = []
  176. self.tableContents.append(KMLocalizedString("Name"))
  177. self.tableContents.append(KMLocalizedString("Full Name"))
  178. self.tableContents.append(KMLocalizedString("First Name"))
  179. self.tableContents.append(KMLocalizedString("Middle Name"))
  180. self.tableContents.append(KMLocalizedString("Last Name"))
  181. self.tableContents.append(KMLocalizedString("Address"))
  182. self.tableContents.append(KMLocalizedString("Street 1"))
  183. self.tableContents.append(KMLocalizedString("Street 2"))
  184. self.tableContents.append(KMLocalizedString("City"))
  185. self.tableContents.append(KMLocalizedString("State"))
  186. self.tableContents.append(KMLocalizedString("Zip"))
  187. self.tableContents.append(KMLocalizedString("Country"))
  188. self.tableContents.append(KMLocalizedString("Contact Information"))
  189. self.tableContents.append(KMLocalizedString("Email"))
  190. self.tableContents.append(KMLocalizedString("Tel"))
  191. self.tableContents.append(KMLocalizedString("Dates"))
  192. self.tableContents.append(KMLocalizedString("Date"))
  193. self.tableContents.append(KMLocalizedString("Birth Date"))
  194. if (KMProfileInfo.shared().customInfoArray.count > 0) {
  195. self.tableContents.append(KMLocalizedString("Custom"))
  196. for i in 0 ..< KMProfileInfo.shared().customInfoArray.count {
  197. if let dict: [String : Any] = KMProfileInfo.shared().customInfoArray[i] as? [String : Any], dict.isEmpty == false {
  198. self.tableContents.append(dict.keys.first!)
  199. }
  200. }
  201. }
  202. }
  203. private func _updateViewColor() {
  204. self.tableView.reloadData()
  205. }
  206. private func _configuTextField(_ cellView: KMProfileCellView?) {
  207. let textField = cellView?.detailtextField
  208. let tag = textField?.tag ?? 0
  209. var placeHoldString: String = ""
  210. var nameString: String = ""
  211. if (tag == 1) {
  212. placeHoldString = KMLocalizedString("Add Full Name")
  213. nameString = KMProfileInfo.shared().fullName
  214. } else if (tag == 2) {
  215. placeHoldString = KMLocalizedString("Add First Name")
  216. nameString = KMProfileInfo.shared().firstName
  217. } else if (tag == 3) {
  218. placeHoldString = KMLocalizedString("Add Middle Name")
  219. nameString = KMProfileInfo.shared().middleName
  220. } else if (tag == 4) {
  221. placeHoldString = KMLocalizedString("Add Last Name")
  222. nameString = KMProfileInfo.shared().lastName
  223. } else if (tag == 6) {
  224. placeHoldString = KMLocalizedString("Add Street 1")
  225. nameString = KMProfileInfo.shared().street1
  226. } else if (tag == 7) {
  227. placeHoldString = KMLocalizedString("Add Street 2")
  228. nameString = KMProfileInfo.shared().street2
  229. } else if (tag == 8) {
  230. placeHoldString = KMLocalizedString("Add City")
  231. nameString = KMProfileInfo.shared().city
  232. } else if (tag == 9) {
  233. placeHoldString = KMLocalizedString("Add State")
  234. nameString = KMProfileInfo.shared().state
  235. } else if (tag == 10) {
  236. placeHoldString = KMLocalizedString("Add Zip")
  237. nameString = KMProfileInfo.shared().zip
  238. } else if (tag == 11) {
  239. placeHoldString = KMLocalizedString("Add Country")
  240. nameString = KMProfileInfo.shared().country
  241. } else if (tag == 13) {
  242. placeHoldString = KMLocalizedString("Add Email")
  243. nameString = KMProfileInfo.shared().email
  244. } else if (tag == 14) {
  245. placeHoldString = KMLocalizedString("Add Tel")
  246. nameString = KMProfileInfo.shared().tel
  247. } else if (tag == 16) {
  248. placeHoldString = KMLocalizedString("Add Date")
  249. let date = Date()
  250. let formatter = DateFormatter()
  251. formatter.dateFormat = "YYYY/MM/dd"
  252. nameString = formatter.string(from: date)
  253. } else if (tag == 17) {
  254. placeHoldString = KMLocalizedString("Add Birth Date")
  255. nameString = KMProfileInfo.shared().birthDate
  256. }
  257. textField?.stringValue = nameString
  258. if (nameString.isEmpty == false) {
  259. textField?.isHidden = false
  260. cellView?.addButton.isHidden = true
  261. } else {
  262. cellView?.addButton.title = placeHoldString
  263. textField?.placeholderString = placeHoldString
  264. textField?.isHidden = true
  265. cellView?.addButton.tag = tag
  266. cellView?.addButton.target = self
  267. cellView?.addButton.action = #selector(addFileName_Add)
  268. cellView?.addButton.setTitleColor(NSColor.systemBlue)
  269. cellView?.addButton.isHidden = false
  270. }
  271. }
  272. }
  273. extension KMProfileInfoWindowController: NSTableViewDelegate, NSTableViewDataSource {
  274. func numberOfRows(in tableView: NSTableView) -> Int {
  275. self.tableContents.count
  276. }
  277. func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
  278. let addingString = self.tableContents[row]
  279. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom")) ?? NSNotFound
  280. if (addingString == KMLocalizedString("Name") || addingString == KMLocalizedString("Address") || addingString == KMLocalizedString("Contact Information") || addingString == KMLocalizedString("Dates") || addingString == KMLocalizedString("Custom")) && row <= customIndex {
  281. return 24.0
  282. }
  283. return 36.0
  284. }
  285. func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
  286. let addingString = self.tableContents[row]
  287. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom")) ?? NSNotFound
  288. var tableCellView: NSTableCellView?
  289. if (addingString == KMLocalizedString("Name") || addingString == KMLocalizedString("Address") || addingString == KMLocalizedString("Contact Information") || addingString == KMLocalizedString("Dates") || addingString == KMLocalizedString("Custom")) && row <= customIndex {
  290. tableCellView = (tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: TitleCellIdentifier), owner: tableColumn) as! NSTableCellView)
  291. let cellView = tableCellView as! KMProfileTitleCellView
  292. cellView.textField?.stringValue = addingString
  293. cellView.textField?.isEditable = false
  294. cellView.wantsLayer = true
  295. if (KMAppearance.isSupportNewColor()) {
  296. if (KMAppearance.isDarkMode()) {
  297. cellView.layer?.backgroundColor = NSColor(red: 73/255.0, green: 75/255.0, blue: 77/255.0, alpha: 1).cgColor
  298. } else {
  299. cellView.layer?.backgroundColor = NSColor(red: 219/255.0, green: 219/255.0, blue: 219/255.0, alpha: 1).cgColor
  300. }
  301. } else {
  302. cellView.layer?.backgroundColor = NSColor(red: 235.0/255.0, green: 235.0/255.0, blue: 235.0/255.0, alpha: 1).cgColor
  303. }
  304. } else {
  305. tableCellView = (tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: NormalCellIdentifier), owner: tableColumn) as! NSTableCellView)
  306. let cellView = tableCellView as? KMProfileCellView
  307. cellView?.textField?.stringValue = addingString
  308. if let data = cellView?.isKind(of: KMProfileCellView.self), data {
  309. cellView?.detailtextField.isHidden = false
  310. }
  311. cellView?.textField?.textColor = KMAppearance.Layout.h0Color()
  312. if (customIndex > row) {
  313. cellView?.detailtextField.tag = row
  314. self._configuTextField(cellView)
  315. cellView?.textField?.isEditable = false
  316. cellView?.textField?.isSelectable = false
  317. if addingString == KMLocalizedString("Date") {
  318. cellView?.detailtextField.isEditable = false
  319. cellView?.detailtextField.isSelectable = false
  320. } else {
  321. cellView?.detailtextField.isEditable = true
  322. cellView?.detailtextField.isSelectable = true
  323. }
  324. cellView?.detailtextField.delegate = self
  325. } else {
  326. let index = row - customIndex - 1
  327. let dict = KMProfileInfo.shared().customInfoArray[index] as? [String : Any]
  328. cellView?.addButton.isHidden = true
  329. cellView?.detailtextField.stringValue = dict?.values.first as? String ?? ""
  330. cellView?.detailtextField.placeholderString = KMLocalizedString("Type Value Here")
  331. cellView?.textField?.placeholderString = KMLocalizedString("Type Label Here")
  332. cellView?.textField?.isEditable = true
  333. cellView?.textField?.isSelectable = true
  334. cellView?.detailtextField.isEditable = true
  335. cellView?.detailtextField.isSelectable = true
  336. cellView?.textField?.delegate = self
  337. cellView?.detailtextField.delegate = self
  338. }
  339. }
  340. return tableCellView;
  341. }
  342. func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
  343. let addingString = self.tableContents[row]
  344. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom")) ?? NSNotFound
  345. if (addingString == KMLocalizedString("Name") || addingString == KMLocalizedString("Address") || addingString == KMLocalizedString("Contact Information") || addingString == KMLocalizedString("Dates") || addingString == KMLocalizedString("Custom")) && row <= customIndex {
  346. return false
  347. }
  348. return true
  349. }
  350. func tableViewSelectionDidChange(_ notification: Notification) {
  351. if (self.tableView.selectedRow == NSNotFound || self.tableView.selectedRow == -1) {
  352. return
  353. }
  354. let cellView = self.tableView.view(atColumn: 0, row: self.tableView.selectedRow, makeIfNecessary: false) as? KMProfileCellView
  355. self.addButton.isEnabled = cellView?.detailtextField.stringValue.isEmpty == false
  356. for i in 0 ..< self.tableView.numberOfRows {
  357. let cellView = self.tableView.view(atColumn: 0, row: i, makeIfNecessary: false) as? NSTableCellView
  358. if let data = cellView?.isKind(of: KMProfileCellView.self), data {
  359. let cellView1 = cellView as! KMProfileCellView
  360. if (i == self.tableView.selectedRow) {
  361. // cellView1.detailtextField.textColor = .white
  362. cellView1.addButton.setTitleColor(NSColor.white)
  363. } else {
  364. // cellView1.detailtextField.textColor = NSColor.secondaryLabelColor
  365. cellView1.addButton.setTitleColor(NSColor.systemBlue)
  366. }
  367. }
  368. }
  369. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom")) ?? NSNotFound
  370. if (self.tableView.selectedRow > customIndex) {
  371. self.removeNewInfoButton.isEnabled = true
  372. } else {
  373. self.removeNewInfoButton.isEnabled = false
  374. }
  375. }
  376. }
  377. extension KMProfileInfoWindowController: NSTextFieldDelegate {
  378. func controlTextDidChange(_ obj: Notification) {
  379. let currentRow = self.tableView.selectedRow
  380. if (currentRow == -1) {
  381. return
  382. }
  383. guard let textField = obj.object as? NSTextField else {
  384. return
  385. }
  386. let cellView = self.tableView.view(atColumn: 0, row: currentRow, makeIfNecessary: false) as? KMProfileCellView
  387. if (currentRow == 1) {
  388. KMProfileInfo.shared().fullName = textField.stringValue
  389. } else if (currentRow == 2) {
  390. KMProfileInfo.shared().firstName = textField.stringValue
  391. } else if (currentRow == 3) {
  392. KMProfileInfo.shared().middleName = textField.stringValue
  393. } else if (currentRow == 4) {
  394. KMProfileInfo.shared().lastName = textField.stringValue
  395. } else if (currentRow == 6) {
  396. KMProfileInfo.shared().street1 = textField.stringValue
  397. } else if (currentRow == 7) {
  398. KMProfileInfo.shared().street2 = textField.stringValue
  399. } else if (currentRow == 8) {
  400. KMProfileInfo.shared().city = textField.stringValue
  401. } else if (currentRow == 9) {
  402. KMProfileInfo.shared().state = textField.stringValue
  403. } else if (currentRow == 10) {
  404. KMProfileInfo.shared().zip = textField.stringValue
  405. } else if (currentRow == 11) {
  406. KMProfileInfo.shared().country = textField.stringValue
  407. } else if (currentRow == 13) {
  408. KMProfileInfo.shared().email = textField.stringValue
  409. } else if (currentRow == 14) {
  410. KMProfileInfo.shared().tel = textField.stringValue
  411. } else if (currentRow == 16) {
  412. // [KMProfileInfo.shared().date = textField.stringValue;
  413. } else if (currentRow == 17) {
  414. KMProfileInfo.shared().birthDate = textField.stringValue
  415. } else if (currentRow >= 19 ) {
  416. let customIndex = currentRow - 19
  417. if (cellView != nil) {
  418. let dict = KMProfileInfo.shared().customInfoArray[customIndex] as? [String : Any]
  419. let originalKey = dict?.keys.first ?? ""
  420. let originalValue = dict?.values.first as? String ?? ""
  421. if textField.isEqual(cellView?.textField) {
  422. let newDict = [textField.stringValue : originalValue]
  423. KMProfileInfo.shared().replaceObjectInCustomInfoArray(at: customIndex, with: newDict)
  424. } else if textField.isEqual(cellView?.detailtextField) {
  425. let newDict = [originalKey : textField.stringValue]
  426. KMProfileInfo.shared().replaceObjectInCustomInfoArray(at: customIndex, with: newDict)
  427. }
  428. }
  429. }
  430. if cellView?.detailtextField.stringValue.isEmpty == false {
  431. self.addButton.isEnabled = true
  432. } else {
  433. self.addButton.isEnabled = false
  434. }
  435. }
  436. func controlTextDidBeginEditing(_ obj: Notification) {
  437. let textField = obj.object as? NSTextField
  438. textField?.textColor = NSColor.labelColor
  439. }
  440. func controlTextDidEndEditing(_ obj: Notification) {
  441. let textField = obj.object as? NSTextField
  442. let tag = textField?.tag ?? 0
  443. let cellView = self.tableView.view(atColumn: 0, row: tag, makeIfNecessary: false) as? KMProfileCellView
  444. if let data = cellView?.isKind(of: KMProfileCellView.self), data, tag > 0 {
  445. var placeHoldString = ""
  446. if (tag == 1) {
  447. placeHoldString = KMLocalizedString("Add Full Name")
  448. } else if (tag == 2) {
  449. placeHoldString = KMLocalizedString("Add First Name")
  450. } else if (tag == 3) {
  451. placeHoldString = KMLocalizedString("Add Middle Name")
  452. } else if (tag == 4) {
  453. placeHoldString = KMLocalizedString("Add Last Name")
  454. } else if (tag == 6) {
  455. placeHoldString = KMLocalizedString("Add Street 1")
  456. } else if (tag == 7) {
  457. placeHoldString = KMLocalizedString("Add Street 2")
  458. } else if (tag == 8) {
  459. placeHoldString = KMLocalizedString("Add City")
  460. } else if (tag == 9) {
  461. placeHoldString = KMLocalizedString("Add State")
  462. } else if (tag == 10) {
  463. placeHoldString = KMLocalizedString("Add Zip")
  464. } else if (tag == 11) {
  465. placeHoldString = KMLocalizedString("Add Country")
  466. } else if (tag == 13) {
  467. placeHoldString = KMLocalizedString("Add Email")
  468. } else if (tag == 14) {
  469. placeHoldString = KMLocalizedString("Add Tel")
  470. } else if (tag == 16) {
  471. placeHoldString = KMLocalizedString("Add Date")
  472. } else if (tag == 17) {
  473. placeHoldString = KMLocalizedString("Add Birth Date")
  474. }
  475. if (textField?.stringValue.isEmpty == false) {
  476. textField?.textColor = NSColor.secondaryLabelColor
  477. textField?.isHidden = false
  478. cellView?.addButton.isHidden = true
  479. } else {
  480. // textField.hidden = YES; //自定义新增,输入Label后,value为空时推出编辑,就无法填写了
  481. textField?.placeholderString = ""
  482. cellView?.addButton.isHidden = false
  483. cellView?.addButton.tag = tag
  484. cellView?.addButton.target = self
  485. cellView?.addButton.action = #selector(addFileName_Add)
  486. cellView?.addButton.title = placeHoldString
  487. cellView?.addButton.setTitleColor(NSColor.systemBlue)
  488. }
  489. }
  490. }
  491. }
  492. extension KMProfileInfoWindowController: NSMenuItemValidation {
  493. func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
  494. let cellView = self.tableView.view(atColumn: 0, row: self.tableView.clickedRow, makeIfNecessary: false) as? NSTableCellView
  495. if (menuItem.action == #selector(menuItemClicked_Edit)) {
  496. if let data = cellView?.isKind(of: KMProfileTitleCellView.self), data {
  497. return false
  498. } else {
  499. let cellView1 = cellView as? KMProfileCellView
  500. if (cellView1?.textField?.stringValue == KMLocalizedString("Date")) {
  501. return false
  502. }
  503. return true
  504. }
  505. } else if (menuItem.action == #selector(menuItemClicked_Add)) {
  506. // if ([cellView isKindOfClass:[KMProfileTitleCellView class]]) {
  507. // return NO;
  508. // } else {
  509. // KMProfileCellView *cell = (KMProfileCellView *)cellView;
  510. // return cell.detailtextField.stringValue.length > 0;
  511. // }
  512. if let data = cellView?.isKind(of: KMProfileTitleCellView.self), data {
  513. return false
  514. } else {
  515. let cellView1 = cellView as? KMProfileCellView
  516. if let data = cellView1?.detailtextField?.stringValue.isEmpty, data {
  517. return false
  518. }
  519. return true
  520. }
  521. } else if (menuItem.action == #selector(menuItemClicked_Delete)) {
  522. // if ([cellView isKindOfClass:[KMProfileTitleCellView class]]) {
  523. // return NO;
  524. // } else {
  525. // KMProfileCellView *cellView1 = (KMProfileCellView *)cellView;
  526. // if ([cellView1.textField.stringValue isEqualToString:NSLocalizedString(@"Date")]) {
  527. // return NO;
  528. // }
  529. // return YES;
  530. // }
  531. if let data = cellView?.isKind(of: KMProfileTitleCellView.self), data {
  532. return false
  533. } else {
  534. let cellView1 = cellView as? KMProfileCellView
  535. if (cellView1?.textField?.stringValue == KMLocalizedString("Date")) {
  536. return false
  537. }
  538. return true
  539. }
  540. }
  541. return false
  542. }
  543. }