KMProfileInfoWindowController.swift 27 KB

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