KMProfileInfoWindowController.swift 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606
  1. //
  2. // KMProfileInfoWindowController.swift
  3. // PDF Master
  4. //
  5. // Created by tangchao on 2023/11/9.
  6. //
  7. import Cocoa
  8. class KMProfileInfoWindowController: NSWindowController {
  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. deinit {
  20. KMPrint("KMProfileInfoWindowController deinit.")
  21. DistributedNotificationCenter.default().removeObserver(self)
  22. }
  23. override func windowDidLoad() {
  24. super.windowDidLoad()
  25. self._configuViews()
  26. self._fetchDisplayKeys()
  27. self.tableView.reloadData()
  28. DistributedNotificationCenter.default().addObserver(self, selector: #selector(_themeChanged), name: NSNotification.Name("AppleInterfaceThemeChangedNotification"), object: nil)
  29. }
  30. @IBAction func addFileName_Add(_ sender: NSButton) {
  31. self.window?.makeFirstResponder(nil)
  32. let tag = sender.tag
  33. let cellView = self.tableView.view(atColumn: 0, row: tag, makeIfNecessary: false) as? KMProfileCellView
  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", nil)) ?? 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", nil)) ?? 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", nil)
  161. //Button Part
  162. self.backButton.title = KMLocalizedString("Cancel", nil)
  163. self.addButton.title = KMLocalizedString("Add to Doc", nil)
  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", nil)
  171. addItem?.title = KMLocalizedString("Add to Doc", nil)
  172. deleteItem?.title = KMLocalizedString("Delete", nil)
  173. }
  174. private func _fetchDisplayKeys() {
  175. self.tableContents = []
  176. self.tableContents.append(KMLocalizedString("Name", nil))
  177. self.tableContents.append(KMLocalizedString("Full Name", nil))
  178. self.tableContents.append(KMLocalizedString("First Name", nil))
  179. self.tableContents.append(KMLocalizedString("Middle Name", nil))
  180. self.tableContents.append(KMLocalizedString("Last Name", nil))
  181. self.tableContents.append(KMLocalizedString("Address", nil))
  182. self.tableContents.append(KMLocalizedString("Street 1", nil))
  183. self.tableContents.append(KMLocalizedString("Street 2", nil))
  184. self.tableContents.append(KMLocalizedString("City", nil))
  185. self.tableContents.append(KMLocalizedString("State", nil))
  186. self.tableContents.append(KMLocalizedString("Zip", nil))
  187. self.tableContents.append(KMLocalizedString("Country", nil))
  188. self.tableContents.append(KMLocalizedString("Contact Information", nil))
  189. self.tableContents.append(KMLocalizedString("Email", nil))
  190. self.tableContents.append(KMLocalizedString("Tel", nil))
  191. self.tableContents.append(KMLocalizedString("Dates", nil))
  192. self.tableContents.append(KMLocalizedString("Date", nil))
  193. self.tableContents.append(KMLocalizedString("Birth Date", nil))
  194. if (KMProfileInfo.shared().customInfoArray.count > 0) {
  195. self.tableContents.append(KMLocalizedString("Custom", nil))
  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. @objc private func _themeChanged(_ notification: NSNotification) {
  204. DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
  205. self._updateViewColor()
  206. }
  207. }
  208. private func _updateViewColor() {
  209. self.tableView.reloadData()
  210. }
  211. private func _configuTextField(_ cellView: KMProfileCellView?) {
  212. let textField = cellView?.detailtextField
  213. let tag = textField?.tag ?? 0
  214. var placeHoldString: String = ""
  215. var nameString: String = ""
  216. if (tag == 1) {
  217. placeHoldString = KMLocalizedString("Add Full Name", nil)
  218. nameString = KMProfileInfo.shared().fullName
  219. } else if (tag == 2) {
  220. placeHoldString = KMLocalizedString("Add First Name", nil)
  221. nameString = KMProfileInfo.shared().firstName
  222. } else if (tag == 3) {
  223. placeHoldString = KMLocalizedString("Add Middle Name", nil)
  224. nameString = KMProfileInfo.shared().middleName
  225. } else if (tag == 4) {
  226. placeHoldString = KMLocalizedString("Add Last Name", nil)
  227. nameString = KMProfileInfo.shared().lastName
  228. } else if (tag == 6) {
  229. placeHoldString = KMLocalizedString("Add Street 1", nil)
  230. nameString = KMProfileInfo.shared().street1
  231. } else if (tag == 7) {
  232. placeHoldString = KMLocalizedString("Add Street 2", nil)
  233. nameString = KMProfileInfo.shared().street2
  234. } else if (tag == 8) {
  235. placeHoldString = KMLocalizedString("Add City", nil)
  236. nameString = KMProfileInfo.shared().city
  237. } else if (tag == 9) {
  238. placeHoldString = KMLocalizedString("Add State", nil)
  239. nameString = KMProfileInfo.shared().state
  240. } else if (tag == 10) {
  241. placeHoldString = KMLocalizedString("Add Zip", nil)
  242. nameString = KMProfileInfo.shared().zip
  243. } else if (tag == 11) {
  244. placeHoldString = KMLocalizedString("Add Country", nil)
  245. nameString = KMProfileInfo.shared().country
  246. } else if (tag == 13) {
  247. placeHoldString = KMLocalizedString("Add Email", nil)
  248. nameString = KMProfileInfo.shared().email
  249. } else if (tag == 14) {
  250. placeHoldString = KMLocalizedString("Add Tel", nil)
  251. nameString = KMProfileInfo.shared().tel
  252. } else if (tag == 16) {
  253. placeHoldString = KMLocalizedString("Add Date", nil)
  254. let date = Date()
  255. let formatter = DateFormatter()
  256. formatter.dateFormat = "YYYY/MM/dd"
  257. nameString = formatter.string(from: date)
  258. } else if (tag == 17) {
  259. placeHoldString = KMLocalizedString("Add Birth Date", nil)
  260. nameString = KMProfileInfo.shared().birthDate
  261. }
  262. textField?.stringValue = nameString
  263. if (nameString.isEmpty == false) {
  264. textField?.isHidden = false
  265. cellView?.addButton.isHidden = true
  266. } else {
  267. cellView?.addButton.title = placeHoldString
  268. textField?.placeholderString = placeHoldString
  269. textField?.isHidden = true
  270. cellView?.addButton.tag = tag
  271. cellView?.addButton.target = self
  272. cellView?.addButton.action = #selector(addFileName_Add)
  273. cellView?.addButton.setTitleColor(NSColor.systemBlue)
  274. cellView?.addButton.isHidden = false
  275. }
  276. }
  277. }
  278. extension KMProfileInfoWindowController: NSTableViewDelegate, NSTableViewDataSource {
  279. func numberOfRows(in tableView: NSTableView) -> Int {
  280. self.tableContents.count
  281. }
  282. func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
  283. let addingString = self.tableContents[row]
  284. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom", nil)) ?? NSNotFound
  285. if (addingString == KMLocalizedString("Name", nil) || addingString == KMLocalizedString("Address", nil) || addingString == KMLocalizedString("Contact Information", nil) || addingString == KMLocalizedString("Dates", nil) || addingString == KMLocalizedString("Custom", nil)) && row <= customIndex {
  286. return 24.0
  287. }
  288. return 36.0
  289. }
  290. func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
  291. let addingString = self.tableContents[row]
  292. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom", nil)) ?? NSNotFound
  293. var tableCellView: NSTableCellView?
  294. if (addingString == KMLocalizedString("Name", nil) || addingString == KMLocalizedString("Address", nil) || addingString == KMLocalizedString("Contact Information", nil) || addingString == KMLocalizedString("Dates", nil) || addingString == KMLocalizedString("Custom", nil)) && row <= customIndex {
  295. tableCellView = (tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: TitleCellIdentifier), owner: tableColumn) as! NSTableCellView)
  296. let cellView = tableCellView as! KMProfileTitleCellView
  297. cellView.textField?.stringValue = addingString
  298. cellView.textField?.isEditable = false
  299. cellView.wantsLayer = true
  300. if (KMAppearance.isSupportNewColor()) {
  301. if (KMAppearance.isDarkMode()) {
  302. cellView.layer?.backgroundColor = NSColor(red: 73/255.0, green: 75/255.0, blue: 77/255.0, alpha: 1).cgColor
  303. } else {
  304. cellView.layer?.backgroundColor = NSColor(red: 219/255.0, green: 219/255.0, blue: 219/255.0, alpha: 1).cgColor
  305. }
  306. } else {
  307. cellView.layer?.backgroundColor = NSColor(red: 235.0/255.0, green: 235.0/255.0, blue: 235.0/255.0, alpha: 1).cgColor
  308. }
  309. } else {
  310. tableCellView = (tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: NormalCellIdentifier), owner: tableColumn) as! NSTableCellView)
  311. let cellView = tableCellView as? KMProfileCellView
  312. cellView?.textField?.stringValue = addingString
  313. if let data = cellView?.isKind(of: KMProfileCellView.self), data {
  314. cellView?.detailtextField.isHidden = false
  315. }
  316. cellView?.textField?.textColor = KMAppearance.Layout.h0Color()
  317. if (customIndex > row) {
  318. cellView?.detailtextField.tag = row
  319. // [self configuTextField:cellView];
  320. self._configuTextField(cellView)
  321. cellView?.textField?.isEditable = false
  322. cellView?.textField?.isSelectable = false
  323. if addingString == KMLocalizedString("Date", nil) {
  324. cellView?.detailtextField.isEditable = false
  325. cellView?.detailtextField.isSelectable = false
  326. }
  327. cellView?.detailtextField.delegate = self
  328. } else {
  329. let index = row - customIndex - 1
  330. let dict = KMProfileInfo.shared().customInfoArray[index] as? [String : Any]
  331. cellView?.addButton.isHidden = true
  332. cellView?.detailtextField.stringValue = dict?.values.first as? String ?? ""
  333. cellView?.detailtextField.placeholderString = KMLocalizedString("Type Value Here", nil)
  334. cellView?.textField?.placeholderString = KMLocalizedString("Type Label Here", nil)
  335. cellView?.textField?.isEditable = true
  336. cellView?.textField?.isSelectable = true
  337. cellView?.detailtextField.isEditable = true
  338. cellView?.detailtextField.isSelectable = true
  339. cellView?.textField?.delegate = self
  340. cellView?.detailtextField.delegate = self
  341. }
  342. }
  343. return tableCellView;
  344. }
  345. func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
  346. let addingString = self.tableContents[row]
  347. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom", nil)) ?? NSNotFound
  348. if (addingString == KMLocalizedString("Name", nil) || addingString == KMLocalizedString("Address", nil) || addingString == KMLocalizedString("Contact Information", nil) || addingString == KMLocalizedString("Dates", nil) || addingString == KMLocalizedString("Custom", nil)) && row <= customIndex {
  349. return false
  350. }
  351. return true
  352. }
  353. func tableViewSelectionDidChange(_ notification: Notification) {
  354. if (self.tableView.selectedRow == NSNotFound || self.tableView.selectedRow == -1) {
  355. return;
  356. }
  357. let cellView = self.tableView.view(atColumn: 0, row: self.tableView.selectedRow, makeIfNecessary: false) as? KMProfileCellView
  358. self.addButton.isEnabled = cellView?.detailtextField.stringValue.isEmpty == false
  359. for i in 0 ..< self.tableView.numberOfRows {
  360. let cellView = self.tableView.view(atColumn: 0, row: i, makeIfNecessary: false) as? NSTableCellView
  361. if let data = cellView?.isKind(of: KMProfileCellView.self), data {
  362. let cellView1 = cellView as! KMProfileCellView
  363. if (i == self.tableView.selectedRow) {
  364. cellView1.detailtextField.textColor = .white
  365. cellView1.addButton.setTitleColor(NSColor.white)
  366. } else {
  367. cellView1.detailtextField.textColor = NSColor.secondaryLabelColor
  368. cellView1.addButton.setTitleColor(NSColor.systemBlue)
  369. }
  370. }
  371. }
  372. let customIndex = self.tableContents.index(of: KMLocalizedString("Custom", nil)) ?? NSNotFound
  373. if (self.tableView.selectedRow > customIndex) {
  374. self.removeNewInfoButton.isEnabled = true
  375. } else {
  376. self.removeNewInfoButton.isEnabled = false
  377. }
  378. }
  379. }
  380. extension KMProfileInfoWindowController: NSTextFieldDelegate {
  381. func controlTextDidChange(_ obj: Notification) {
  382. let currentRow = self.tableView.selectedRow
  383. if (currentRow == -1) {
  384. return
  385. }
  386. guard let textField = obj.object as? NSTextField else {
  387. return
  388. }
  389. let cellView = self.tableView.view(atColumn: 0, row: currentRow, makeIfNecessary: false) as? KMProfileCellView
  390. if (currentRow == 1) {
  391. KMProfileInfo.shared().fullName = textField.stringValue;
  392. } else if (currentRow == 2) {
  393. KMProfileInfo.shared().firstName = textField.stringValue;
  394. } else if (currentRow == 3) {
  395. KMProfileInfo.shared().middleName = textField.stringValue;
  396. } else if (currentRow == 4) {
  397. KMProfileInfo.shared().lastName = textField.stringValue;
  398. } else if (currentRow == 6) {
  399. KMProfileInfo.shared().street1 = textField.stringValue;
  400. } else if (currentRow == 7) {
  401. KMProfileInfo.shared().street2 = textField.stringValue;
  402. } else if (currentRow == 8) {
  403. KMProfileInfo.shared().city = textField.stringValue;
  404. } else if (currentRow == 9) {
  405. KMProfileInfo.shared().state = textField.stringValue;
  406. } else if (currentRow == 10) {
  407. KMProfileInfo.shared().zip = textField.stringValue;
  408. } else if (currentRow == 11) {
  409. KMProfileInfo.shared().country = textField.stringValue;
  410. } else if (currentRow == 13) {
  411. KMProfileInfo.shared().email = textField.stringValue;
  412. } else if (currentRow == 14) {
  413. KMProfileInfo.shared().tel = textField.stringValue;
  414. } else if (currentRow == 16) {
  415. // [KMProfileInfo.shared().date = textField.stringValue;
  416. } else if (currentRow == 17) {
  417. KMProfileInfo.shared().birthDate = textField.stringValue;
  418. } else if (currentRow >= 19 ) {
  419. let customIndex = currentRow - 19
  420. if (cellView != nil) {
  421. let dict = KMProfileInfo.shared().customInfoArray[customIndex] as? [String : Any]
  422. let originalKey = dict?.keys.first!
  423. let originalValue = dict?.values.first as! String
  424. if textField.isEqual(cellView?.textField) {
  425. let newDict = [textField.stringValue : originalValue]
  426. KMProfileInfo.shared().replaceObjectInCustomInfoArray(at: customIndex, with: newDict)
  427. } else if textField.isEqual(cellView?.detailtextField) {
  428. let newDict = [originalKey : textField.stringValue]
  429. KMProfileInfo.shared().replaceObjectInCustomInfoArray(at: customIndex, with: newDict)
  430. }
  431. }
  432. }
  433. if cellView?.detailtextField.stringValue.isEmpty == false {
  434. self.addButton.isEnabled = true
  435. } else {
  436. self.addButton.isEnabled = false
  437. }
  438. }
  439. func controlTextDidBeginEditing(_ obj: Notification) {
  440. let textField = obj.object as? NSTextField
  441. // BOOL isDarkMode = NO;
  442. // if (@available(macOS 10.14, *)) {
  443. // if ([[NSApplication sharedApplication].effectiveAppearance isEqual: [NSAppearance appearanceNamed:NSAppearanceNameDarkAqua]]) {
  444. // isDarkMode =YES;
  445. // }
  446. // }
  447. textField?.textColor = NSColor.labelColor
  448. }
  449. func controlTextDidEndEditing(_ obj: Notification) {
  450. let textField = obj.object as? NSTextField
  451. let tag = textField?.tag ?? 0
  452. let cellView = self.tableView.view(atColumn: 0, row: tag, makeIfNecessary: false) as? KMProfileCellView
  453. if let data = cellView?.isKind(of: KMProfileCellView.self), data, tag > 0 {
  454. var placeHoldString = ""
  455. if (tag == 1) {
  456. placeHoldString = KMLocalizedString("Add Full Name", nil)
  457. } else if (tag == 2) {
  458. placeHoldString = KMLocalizedString("Add First Name", nil)
  459. } else if (tag == 3) {
  460. placeHoldString = KMLocalizedString("Add Middle Name", nil)
  461. } else if (tag == 4) {
  462. placeHoldString = KMLocalizedString("Add Last Name", nil)
  463. } else if (tag == 6) {
  464. placeHoldString = KMLocalizedString("Add Street 1", nil)
  465. } else if (tag == 7) {
  466. placeHoldString = KMLocalizedString("Add Street 2", nil)
  467. } else if (tag == 8) {
  468. placeHoldString = KMLocalizedString("Add City", nil)
  469. } else if (tag == 9) {
  470. placeHoldString = KMLocalizedString("Add State", nil)
  471. } else if (tag == 10) {
  472. placeHoldString = KMLocalizedString("Add Zip", nil)
  473. } else if (tag == 11) {
  474. placeHoldString = KMLocalizedString("Add Country", nil)
  475. } else if (tag == 13) {
  476. placeHoldString = KMLocalizedString("Add Email", nil)
  477. } else if (tag == 14) {
  478. placeHoldString = KMLocalizedString("Add Tel", nil)
  479. } else if (tag == 16) {
  480. placeHoldString = KMLocalizedString("Add Date", nil)
  481. } else if (tag == 17) {
  482. placeHoldString = KMLocalizedString("Add Birth Date", nil)
  483. }
  484. if (textField?.stringValue.isEmpty == false) {
  485. textField?.textColor = NSColor.secondaryLabelColor
  486. textField?.isHidden = false
  487. cellView?.addButton.isHidden = true
  488. } else {
  489. // textField.hidden = YES; //自定义新增,输入Label后,value为空时推出编辑,就无法填写了
  490. textField?.placeholderString = ""
  491. cellView?.addButton.isHidden = false
  492. cellView?.addButton.tag = tag
  493. cellView?.addButton.target = self
  494. cellView?.addButton.action = #selector(addFileName_Add)
  495. cellView?.addButton.title = placeHoldString
  496. cellView?.addButton.setTitleColor(NSColor.systemBlue)
  497. }
  498. }
  499. }
  500. }
  501. extension KMProfileInfoWindowController: NSMenuItemValidation {
  502. func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
  503. let cellView = self.tableView.view(atColumn: 0, row: self.tableView.clickedRow, makeIfNecessary: false) as? NSTableCellView
  504. if (menuItem.action == #selector(menuItemClicked_Edit)) {
  505. if let data = cellView?.isKind(of: KMProfileTitleCellView.self), data {
  506. return false
  507. } else {
  508. let cellView1 = cellView as? KMProfileCellView
  509. if (cellView1?.textField?.stringValue == KMLocalizedString("Date", nil)) {
  510. return false
  511. }
  512. return true
  513. }
  514. } else if (menuItem.action == #selector(menuItemClicked_Add)) {
  515. // if ([cellView isKindOfClass:[KMProfileTitleCellView class]]) {
  516. // return NO;
  517. // } else {
  518. // KMProfileCellView *cell = (KMProfileCellView *)cellView;
  519. // return cell.detailtextField.stringValue.length > 0;
  520. // }
  521. if let data = cellView?.isKind(of: KMProfileTitleCellView.self), data {
  522. return false
  523. } else {
  524. let cellView1 = cellView as? KMProfileCellView
  525. if let data = cellView1?.detailtextField?.stringValue.isEmpty, data {
  526. return false
  527. }
  528. return true
  529. }
  530. } else if (menuItem.action == #selector(menuItemClicked_Delete)) {
  531. // if ([cellView isKindOfClass:[KMProfileTitleCellView class]]) {
  532. // return NO;
  533. // } else {
  534. // KMProfileCellView *cellView1 = (KMProfileCellView *)cellView;
  535. // if ([cellView1.textField.stringValue isEqualToString:NSLocalizedString(@"Date", nil)]) {
  536. // return NO;
  537. // }
  538. // return YES;
  539. // }
  540. if let data = cellView?.isKind(of: KMProfileTitleCellView.self), data {
  541. return false
  542. } else {
  543. let cellView1 = cellView as? KMProfileCellView
  544. if (cellView1?.textField?.stringValue == KMLocalizedString("Date", nil)) {
  545. return false
  546. }
  547. return true
  548. }
  549. }
  550. return false
  551. }
  552. }