KMSyncPreferences.swift 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. //
  2. // KMSyncPreferences.swift
  3. // PDF Reader Pro
  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 checkButton: NSButton!
  14. @IBOutlet weak var checkTipLabel: NSTextField!
  15. @IBOutlet weak var pdfTexTitleLabel: NSTextField!
  16. @IBOutlet weak var presetLabel: NSTextField!
  17. @IBOutlet weak var commandLabel: NSTextField!
  18. @IBOutlet weak var argumentsLabel: NSTextField!
  19. @IBOutlet weak var presetButton: NSPopUpButton!
  20. @IBOutlet weak var commandTextField: NSTextField!
  21. @IBOutlet weak var argumentsTextField: NSTextField!
  22. var texEditorLabels: [NSTextField] = []
  23. var texEditorControls: [NSControl] = []
  24. var TeXEditors: [[String : Any]] = []
  25. var NAME_KEY = "name"
  26. var INITIALUSERDEFAULTS_KEY = "InitialUserDefaults"
  27. var TEXEDITORS_KEY = "TeXEditors"
  28. var COMMAND_KEY = "command"
  29. var ARGUMENTS_KEY = "arguments"
  30. override var nibName: NSNib.Name? {
  31. return "SyncPreferences"
  32. }
  33. override func loadView() {
  34. super.loadView()
  35. let initialUserDefaultsURL: URL = Bundle.main.url(forResource: INITIALUSERDEFAULTS_KEY, withExtension: "plist")!
  36. TeXEditors = NSDictionary(contentsOf: initialUserDefaultsURL)?.object(forKey: TEXEDITORS_KEY) as! [[String : Any]]
  37. self.texEditorLabels = [self.presetLabel, self.commandLabel, self.argumentsLabel]
  38. self.texEditorControls = [self.presetButton, self.commandTextField, self.argumentsTextField]
  39. _ = KMAutoSizeLabelFields(self.texEditorLabels, self.texEditorControls, true)
  40. let editorPreset = UserDefaults.standard.string(forKey: SKTeXEditorPresetKey)
  41. var i = self.TeXEditors.count
  42. var idx = -1
  43. let texEditorPopUpButton = self.presetButton
  44. let ws = NSWorkspace.shared
  45. while i > 0 {
  46. i -= 1
  47. let name = TeXEditors[i][NAME_KEY]
  48. let path = ws.fullPath(forApplication: name as! String)
  49. let image = path != nil ? ws.icon(forFile: path!) : ws.icon(forFileType: NSFileTypeForHFSTypeCode(OSType(kGenericApplicationIcon)))
  50. texEditorPopUpButton?.insertItem(withTitle: name as! String, at: 0)
  51. texEditorPopUpButton?.item(at: 0)?.setImageAndSize(image)
  52. if (name as! String) == editorPreset {
  53. idx = i;
  54. }
  55. }
  56. self.customTeXEditor = idx == -1
  57. if (idx == -1) {
  58. texEditorPopUpButton?.select(texEditorPopUpButton!.lastItem)
  59. } else {
  60. texEditorPopUpButton?.selectItem(at: idx)
  61. }
  62. }
  63. override var title: String? {
  64. set {
  65. super.title = newValue
  66. }
  67. get {
  68. return KMLocalizedString("Sync", "Preference pane label")
  69. }
  70. }
  71. override func viewDidLoad() {
  72. super.viewDidLoad()
  73. // SKAutoCheckFileUpdate
  74. // SKTeXEditorPresetKey
  75. // SKTeXEditorCommandKey
  76. // SKTeXEditorArgumentsKey
  77. // Scripting definition file name PDF Reader Pro Edition.sdef
  78. }
  79. /*
  80. + (BOOL)getTeXEditorCommand:(NSString **)command arguments:(NSString **)arguments forPreset:(NSString *)name {
  81. for (NSDictionary *editor in TeXEditors) {
  82. if ([[editor objectForKey:NAME_KEY] isEqualToString:name]) {
  83. if (command) *command = [editor objectForKey:COMMAND_KEY];
  84. if (arguments) *arguments = [editor objectForKey:ARGUMENTS_KEY];
  85. return YES;
  86. }
  87. }
  88. return NO;
  89. }
  90. */
  91. @IBAction func changeTeXEditorPreset(_ sender: AnyObject) {
  92. let sudc = NSUserDefaultsController.shared.defaults
  93. let idx = sender.indexOfSelectedItem()
  94. if (idx < sender.numberOfItems - 1) {
  95. let editor = TeXEditors[idx]
  96. sudc.setValue(sender.titleOfSelectedItem as Any?, forKey: SKTeXEditorPresetKey)
  97. sudc.setValue(editor[COMMAND_KEY], forKey: SKTeXEditorCommandKey)
  98. sudc.setValue(editor[ARGUMENTS_KEY], forKey: SKTeXEditorArgumentsKey)
  99. self.customTeXEditor = false
  100. } else {
  101. sudc.setValue("", forKey: SKTeXEditorPresetKey)
  102. self.customTeXEditor = true
  103. }
  104. }
  105. }
  106. extension KMSyncPreferences: KMPreferencePane {
  107. func defaultsDidRevert() {
  108. let editorPreset = UserDefaults.standard.string(forKey: SKTeXEditorPresetKey)
  109. let texEditorPopUpButton = self.presetButton
  110. if let data = editorPreset?.isEmpty, data {
  111. texEditorPopUpButton?.select(texEditorPopUpButton!.lastItem)
  112. self.customTeXEditor = true
  113. } else {
  114. texEditorPopUpButton?.selectItem(withTitle: editorPreset ?? "")
  115. self.customTeXEditor = false
  116. }
  117. }
  118. }