KMSyncPreferences.swift 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. //
  2. // KMSyncPreferences.swift
  3. // PDF Master
  4. //
  5. // Created by tangchao on 2023/11/6.
  6. //
  7. import Cocoa
  8. class KMSyncPreferences: NSViewController {
  9. var customTeXEditor = false
  10. /*
  11. + (BOOL)getTeXEditorCommand:(NSString **)command arguments:(NSString **)arguments forPreset:(NSString *)name;
  12. */
  13. @IBOutlet weak var textEditorLabel1: NSTextField!
  14. @IBOutlet weak var texEditorLabel2: NSTextField!
  15. @IBOutlet weak var texEditorLabel3: NSTextField!
  16. var texEditorLabels: [NSTextField] = []
  17. @IBOutlet weak var texEditorControl1: NSPopUpButton!
  18. @IBOutlet weak var texEditorControl2: NSTextField!
  19. @IBOutlet weak var texEditorControl3: NSTextField!
  20. var texEditorControls: [NSControl] = []
  21. var TeXEditors: [[String : Any]] = []
  22. var NAME_KEY = "name"
  23. var INITIALUSERDEFAULTS_KEY = "InitialUserDefaults"
  24. var TEXEDITORS_KEY = "TeXEditors"
  25. var COMMAND_KEY = "command"
  26. var ARGUMENTS_KEY = "arguments"
  27. override var nibName: NSNib.Name? {
  28. return "SyncPreferences"
  29. }
  30. override func loadView() {
  31. super.loadView()
  32. let initialUserDefaultsURL: URL = Bundle.main.url(forResource: INITIALUSERDEFAULTS_KEY, withExtension: "plist")!
  33. TeXEditors = NSDictionary(contentsOf: initialUserDefaultsURL)?.object(forKey: TEXEDITORS_KEY) as! [[String : Any]]
  34. self.texEditorLabels = [self.textEditorLabel1, self.texEditorLabel2, self.texEditorLabel3]
  35. self.texEditorControls = [self.texEditorControl1, self.texEditorControl2, self.texEditorControl3]
  36. _ = KMAutoSizeLabelFields(self.texEditorLabels, self.texEditorControls, true)
  37. let editorPreset = UserDefaults.standard.string(forKey: SKTeXEditorPresetKey)
  38. var i = self.TeXEditors.count
  39. var idx = -1
  40. let texEditorPopUpButton = self.texEditorControl1
  41. let ws = NSWorkspace.shared
  42. while i > 0 {
  43. i -= 1
  44. let name = TeXEditors[i][NAME_KEY]
  45. let path = ws.fullPath(forApplication: name as! String)
  46. let image = path != nil ? ws.icon(forFile: path!) : ws.icon(forFileType: NSFileTypeForHFSTypeCode(OSType(kGenericApplicationIcon)))
  47. texEditorPopUpButton?.insertItem(withTitle: name as! String, at: 0)
  48. texEditorPopUpButton?.item(at: 0)?.setImageAndSize(image)
  49. if (name as! String) == editorPreset {
  50. idx = i;
  51. }
  52. }
  53. self.customTeXEditor = idx == -1
  54. if (idx == -1) {
  55. texEditorPopUpButton?.select(texEditorPopUpButton!.lastItem)
  56. } else {
  57. texEditorPopUpButton?.selectItem(at: idx)
  58. }
  59. }
  60. override var title: String? {
  61. set {
  62. super.title = newValue
  63. }
  64. get {
  65. return KMLocalizedString("Sync", "Preference pane label")
  66. }
  67. }
  68. override func viewDidLoad() {
  69. super.viewDidLoad()
  70. // Do view setup here.
  71. }
  72. /*
  73. + (BOOL)getTeXEditorCommand:(NSString **)command arguments:(NSString **)arguments forPreset:(NSString *)name {
  74. for (NSDictionary *editor in TeXEditors) {
  75. if ([[editor objectForKey:NAME_KEY] isEqualToString:name]) {
  76. if (command) *command = [editor objectForKey:COMMAND_KEY];
  77. if (arguments) *arguments = [editor objectForKey:ARGUMENTS_KEY];
  78. return YES;
  79. }
  80. }
  81. return NO;
  82. }
  83. */
  84. @IBAction func changeTeXEditorPreset(_ sender: AnyObject) {
  85. let sudc = NSUserDefaultsController.shared
  86. let idx = sender.indexOfSelectedItem()
  87. if (idx < sender.numberOfItems - 1) {
  88. let editor = TeXEditors[idx]
  89. (sudc.values as? NSMutableDictionary)?.setValue(sender.titleOfSelectedItem, forKey: SKTeXEditorPresetKey)
  90. (sudc.values as? NSMutableDictionary)?.setValue(editor[COMMAND_KEY], forKey: SKTeXEditorCommandKey)
  91. (sudc.values as? NSMutableDictionary)?.setValue(editor[ARGUMENTS_KEY], forKey: SKTeXEditorArgumentsKey)
  92. self.customTeXEditor = false
  93. } else {
  94. (sudc.values as? NSMutableDictionary)?.setValue("", forKey: SKTeXEditorPresetKey)
  95. self.customTeXEditor = true
  96. }
  97. }
  98. }
  99. extension KMSyncPreferences: KMPreferencePane {
  100. func defaultsDidRevert() {
  101. let editorPreset = UserDefaults.standard.string(forKey: SKTeXEditorPresetKey)
  102. let texEditorPopUpButton = self.texEditorControl1
  103. if let data = editorPreset?.isEmpty, data {
  104. texEditorPopUpButton?.select(texEditorPopUpButton!.lastItem)
  105. self.customTeXEditor = true
  106. } else {
  107. texEditorPopUpButton?.selectItem(withTitle: editorPreset ?? "")
  108. self.customTeXEditor = false
  109. }
  110. }
  111. }