// // KMSyncPreferences.swift // PDF Master // // Created by tangchao on 2023/11/6. // import Cocoa class KMSyncPreferences: NSViewController { var customTeXEditor = false /* + (BOOL)getTeXEditorCommand:(NSString **)command arguments:(NSString **)arguments forPreset:(NSString *)name; */ @IBOutlet weak var textEditorLabel1: NSTextField! @IBOutlet weak var texEditorLabel2: NSTextField! @IBOutlet weak var texEditorLabel3: NSTextField! var texEditorLabels: [NSTextField] = [] @IBOutlet weak var texEditorControl1: NSPopUpButton! @IBOutlet weak var texEditorControl2: NSTextField! @IBOutlet weak var texEditorControl3: NSTextField! var texEditorControls: [NSControl] = [] var TeXEditors: [[String : Any]] = [] var NAME_KEY = "name" var INITIALUSERDEFAULTS_KEY = "InitialUserDefaults" var TEXEDITORS_KEY = "TeXEditors" var COMMAND_KEY = "command" var ARGUMENTS_KEY = "arguments" override var nibName: NSNib.Name? { return "SyncPreferences" } override func loadView() { super.loadView() let initialUserDefaultsURL: URL = Bundle.main.url(forResource: INITIALUSERDEFAULTS_KEY, withExtension: "plist")! TeXEditors = NSDictionary(contentsOf: initialUserDefaultsURL)?.object(forKey: TEXEDITORS_KEY) as! [[String : Any]] self.texEditorLabels = [self.textEditorLabel1, self.texEditorLabel2, self.texEditorLabel3] self.texEditorControls = [self.texEditorControl1, self.texEditorControl2, self.texEditorControl3] _ = KMAutoSizeLabelFields(self.texEditorLabels, self.texEditorControls, true) let editorPreset = UserDefaults.standard.string(forKey: SKTeXEditorPresetKey) var i = self.TeXEditors.count var idx = -1 let texEditorPopUpButton = self.texEditorControl1 let ws = NSWorkspace.shared while i > 0 { i -= 1 let name = TeXEditors[i][NAME_KEY] let path = ws.fullPath(forApplication: name as! String) let image = path != nil ? ws.icon(forFile: path!) : ws.icon(forFileType: NSFileTypeForHFSTypeCode(OSType(kGenericApplicationIcon))) texEditorPopUpButton?.insertItem(withTitle: name as! String, at: 0) texEditorPopUpButton?.item(at: 0)?.setImageAndSize(image) if (name as! String) == editorPreset { idx = i; } } self.customTeXEditor = idx == -1 if (idx == -1) { texEditorPopUpButton?.select(texEditorPopUpButton!.lastItem) } else { texEditorPopUpButton?.selectItem(at: idx) } } override var title: String? { set { super.title = newValue } get { return KMLocalizedString("Sync", "Preference pane label") } } override func viewDidLoad() { super.viewDidLoad() // Do view setup here. } /* + (BOOL)getTeXEditorCommand:(NSString **)command arguments:(NSString **)arguments forPreset:(NSString *)name { for (NSDictionary *editor in TeXEditors) { if ([[editor objectForKey:NAME_KEY] isEqualToString:name]) { if (command) *command = [editor objectForKey:COMMAND_KEY]; if (arguments) *arguments = [editor objectForKey:ARGUMENTS_KEY]; return YES; } } return NO; } */ @IBAction func changeTeXEditorPreset(_ sender: AnyObject) { let sudc = NSUserDefaultsController.shared let idx = sender.indexOfSelectedItem() if (idx < sender.numberOfItems - 1) { let editor = TeXEditors[idx] (sudc.values as? NSMutableDictionary)?.setValue(sender.titleOfSelectedItem, forKey: SKTeXEditorPresetKey) (sudc.values as? NSMutableDictionary)?.setValue(editor[COMMAND_KEY], forKey: SKTeXEditorCommandKey) (sudc.values as? NSMutableDictionary)?.setValue(editor[ARGUMENTS_KEY], forKey: SKTeXEditorArgumentsKey) self.customTeXEditor = false } else { (sudc.values as? NSMutableDictionary)?.setValue("", forKey: SKTeXEditorPresetKey) self.customTeXEditor = true } } } extension KMSyncPreferences: KMPreferencePane { func defaultsDidRevert() { let editorPreset = UserDefaults.standard.string(forKey: SKTeXEditorPresetKey) let texEditorPopUpButton = self.texEditorControl1 if let data = editorPreset?.isEmpty, data { texEditorPopUpButton?.select(texEditorPopUpButton!.lastItem) self.customTeXEditor = true } else { texEditorPopUpButton?.selectItem(withTitle: editorPreset ?? "") self.customTeXEditor = false } } }