123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- //
- // KMPreferenceGeneralController.swift
- // PDF Master
- //
- // Created by tangchao on 2023/2/3.
- //
- import Cocoa
- /// 偏好设置 通用控制器
- class KMPreferenceGeneralController: NSViewController {
- @IBOutlet weak var filesTitleLabel: NSTextField!
- @IBOutlet weak var filesBox: NSBox!
- @IBOutlet weak var openLastUnCloseedDocumentCheck: NSButton!
- @IBOutlet weak var openLastUnlockedDocumentCheck: NSButton!
- @IBOutlet weak var maxDisplayNumberLabel: NSTextField!
- @IBOutlet weak var maxDisplayNumberStepper: NSView!
- private var maxDisplayNumberStepperView = KMPreferenceStepper()
- @IBOutlet weak var maxDisplayNumberDespLabel: NSTextField!
- @IBOutlet weak var saveFilesCheck: NSButton!
- @IBOutlet weak var saveFileStepper: KMPreferenceStepper!
- @IBOutlet weak var saveFilesDespLabl: NSTextField!
- @IBOutlet weak var closeFileLabel: NSTextField!
- @IBOutlet weak var closeFilePopupPromptRadio: NSButton!
- @IBOutlet weak var closeFileNoPromptRadio: NSButton!
-
- @IBOutlet weak var openImageFileLabel: NSTextField!
- @IBOutlet weak var openImageFileBox: NSBox!
- @IBOutlet weak var openImageFileAutoRadio: NSButton!
- @IBOutlet weak var openImageFilePromptRadio: NSButton!
-
- @IBOutlet weak var setDefaultPDFReaderCheck: NSButton!
-
- @IBOutlet weak var savePasswordLabel: NSTextField!
- @IBOutlet weak var savePasswordAlwaysRadio: NSButton!
- @IBOutlet weak var savePasswordNeverRadio: NSButton!
- @IBOutlet weak var savePasswordAskRadio: NSButton!
-
- @IBOutlet weak var authorLabel: NSTextField!
- @IBOutlet weak var authorTextField: NSTextField!
-
- convenience init() {
- self.init(nibName: "KMPreferenceGeneralController", bundle: nil)
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- self.filesTitleLabel.stringValue = NSLocalizedString("Files", comment: "")
- self.openLastUnCloseedDocumentCheck.title = NSLocalizedString("Open the last unclosed document when the APP starts", comment: "")
- self.openLastUnlockedDocumentCheck.title = NSLocalizedString("Restore the last view setting when opening a file", comment: "")
- self.maxDisplayNumberLabel.stringValue = NSLocalizedString("Maximum number of documents displayed in recently opened files", comment: "")
- self.maxDisplayNumberDespLabel.stringValue = NSLocalizedString("(10 to 50)", comment: "")
- self.saveFilesCheck.title = NSLocalizedString("Save files automatically, every", comment: "")
- self.closeFileLabel.stringValue = NSLocalizedString("Close File:", comment: "")
- self.closeFilePopupPromptRadio.title = NSLocalizedString("Prompt to \"save/don't save\"", comment: "")
- self.closeFileNoPromptRadio.title = NSLocalizedString("No prompt, save directly", comment: "")
-
- self.openImageFileLabel.stringValue = NSLocalizedString("Open Image File", comment: "")
- self.openImageFileAutoRadio.title = NSLocalizedString("Automatically scan and recognize text", comment: "")
- self.openImageFilePromptRadio.title = NSLocalizedString("Prompt to scan and recognize text", comment: "")
-
- self.setDefaultPDFReaderCheck.title = NSLocalizedString("Set as default PDF reader", comment: "")
- self.savePasswordLabel.stringValue = NSLocalizedString("Save the password in Keychain:", comment: "")
- self.savePasswordAlwaysRadio.title = NSLocalizedString("Always", comment: "")
- self.savePasswordNeverRadio.title = NSLocalizedString("Never", comment: "")
- self.savePasswordAskRadio.title = NSLocalizedString("Ask", comment: "")
-
- self.authorLabel.stringValue = NSLocalizedString("Author:", comment: "")
-
- self.initUIProperty()
- /// 设置数据
- self.initData()
-
- for radio in [self.closeFilePopupPromptRadio, self.closeFileNoPromptRadio,
- self.openImageFileAutoRadio, self.openImageFilePromptRadio,
- self.savePasswordAlwaysRadio, self.savePasswordNeverRadio, self.savePasswordAskRadio] {
- radio?.target = self
- radio?.action = #selector(radioAction)
- }
-
- self.openLastUnlockedDocumentCheck.target = self
- self.openLastUnlockedDocumentCheck.action = #selector(checkAction)
- self.openLastUnCloseedDocumentCheck.target = self
- self.openLastUnCloseedDocumentCheck.action = #selector(checkAction)
- self.saveFilesCheck.target = self
- self.saveFilesCheck.action = #selector(checkAction)
- self.setDefaultPDFReaderCheck.target = self
- self.setDefaultPDFReaderCheck.action = #selector(checkAction)
- let maxDisplayNumberStepperView = self.maxDisplayNumberStepperView
- self.maxDisplayNumberStepper.addSubview(maxDisplayNumberStepperView)
- maxDisplayNumberStepperView.frame = self.maxDisplayNumberStepper.bounds
- maxDisplayNumberStepperView.autoresizingMask = [.width, .height]
-
- maxDisplayNumberStepperView.stepper.minValue = 10
- maxDisplayNumberStepperView.stepper.maxValue = 50
- maxDisplayNumberStepperView.valueDidChange = { value in
- KMPreferenceManager.shared.documentMaximunDisplayNumber = Int(value)
- }
- self.saveFileStepper.stepper.minValue = 5
- self.saveFileStepper.stepper.maxValue = 99
- self.saveFileStepper.valueDidChange = { value in
- KMPreferenceManager.shared.autoSavePerNumberMinute = Int(value )
- }
- self.authorTextField.delegate = self
- }
-
- private func initUIProperty() {
- self.filesBox.borderColor = NSColor(white: 0, alpha: 0.05)
- self.filesBox.fillColor = NSColor(white: 0, alpha: 0.05)
-
- self.openImageFileBox.borderColor = NSColor(white: 0, alpha: 0.05)
- self.openImageFileBox.fillColor = NSColor(white: 0, alpha: 0.05)
-
- self.filesTitleLabel.textColor = NSColor.km_init(hex: "#252629")
- self.openLastUnCloseedDocumentCheck.setTitleColor(NSColor.km_init(hex: "#000000D9"))
- self.openLastUnlockedDocumentCheck.setTitleColor(NSColor.km_init(hex: "#000000D9"))
- self.maxDisplayNumberLabel.textColor = NSColor.km_init(hex: "#000000D9")
- self.saveFilesCheck.setTitleColor(NSColor.km_init(hex: "#000000D9"))
- self.closeFileLabel.textColor = NSColor.km_init(hex: "#000000D9")
- self.closeFilePopupPromptRadio.setTitleColor(NSColor.km_init(hex: "#000000D9"))
- self.closeFileNoPromptRadio.setTitleColor(NSColor.km_init(hex: "#000000D9"))
-
- self.openImageFileLabel.textColor = NSColor.km_init(hex: "#252629")
- self.openImageFileAutoRadio.setTitleColor(NSColor.km_init(hex: "#000000D9"))
- self.openImageFilePromptRadio.setTitleColor(NSColor.km_init(hex: "#000000D9"))
-
- self.setDefaultPDFReaderCheck.setTitleColor(NSColor.km_init(hex: "#000000D9"))
- self.savePasswordLabel.textColor = NSColor.km_init(hex: "#000000D9")
- self.savePasswordAlwaysRadio.setTitleColor(NSColor.km_init(hex: "#000000D9"))
- self.savePasswordNeverRadio.setTitleColor(NSColor.km_init(hex: "#000000D9"))
- self.savePasswordAskRadio.setTitleColor(NSColor.km_init(hex: "#000000D9"))
-
- self.authorLabel.textColor = NSColor.km_init(hex: "#000000D9")
-
- self.maxDisplayNumberDespLabel.textColor = NSColor(white: 0, alpha: 0.5)
- self.updateSaveFilesDespLabl(enabled: true)
- }
-
- private func initData() {
- if (KMPreferenceManager.shared.openLastUnclosedDocumentWhenAppStart) {
- self.openLastUnCloseedDocumentCheck.state = .on
- } else {
- self.openLastUnCloseedDocumentCheck.state = .off
- }
-
- if (KMPreferenceManager.shared.openLastUnlockedDocumentWhenAppStart) {
- self.openLastUnlockedDocumentCheck.state = .on
- } else {
- self.openLastUnlockedDocumentCheck.state = .off
- }
-
- self.maxDisplayNumberStepperView.value = Double(KMPreferenceManager.shared.documentMaximunDisplayNumber)
-
- if (KMPreferenceManager.shared.autoSave) {
- self.saveFilesCheck.state = .on
- } else {
- self.saveFilesCheck.state = .off
- }
-
- self.saveFileStepper.value = Double(KMPreferenceManager.shared.autoSavePerNumberMinute)
-
- if (KMPreferenceManager.shared.closeFilePromptType == .promp) {
- self.selectCloseFileRadio(self.closeFilePopupPromptRadio)
- } else {
- self.selectCloseFileRadio(self.closeFileNoPromptRadio)
- }
-
- if (KMPreferenceManager.shared.openImageFileType == 0) {
- self.selectOpenImageFileRadio(self.openImageFileAutoRadio)
- } else {
- self.selectOpenImageFileRadio(self.openImageFilePromptRadio)
- }
-
- if (KMPreferenceManager.shared.setDefaultPDFReader) {
- self.setDefaultPDFReaderCheck.state = .on
- } else {
- self.setDefaultPDFReaderCheck.state = .off
- }
-
- let value = KMPreferenceManager.shared.savePasswordType
- if (value == .always) {
- self.selectSavePasswordRadio(self.savePasswordAlwaysRadio)
- } else if (value == .never) {
- self.selectSavePasswordRadio(self.savePasswordNeverRadio)
- } else if (value == .ask) {
- self.selectSavePasswordRadio(self.savePasswordAskRadio)
- }
-
- self.authorTextField.stringValue = KMPreferenceManager.shared.author
- }
-
- override func viewWillAppear() {
- super.viewWillAppear()
-
- Task { @MainActor in
- if await KMLightMemberManager.manager.canPayFunction() == false {
- self.saveFilesCheck.isEnabled = false
- self.saveFileStepper.enabled = false
- self.saveFilesDespLabl.isEnabled = false
- self.updateSaveFilesDespLabl(enabled: false)
- } else {
- self.saveFilesCheck.isEnabled = true
- self.saveFileStepper.enabled = true
- self.saveFilesDespLabl.isEnabled = true
- self.updateSaveFilesDespLabl(enabled: true)
- }
- }
- }
-
- // MARK: User Actions
- @objc private func radioAction(sender: NSButton) {
- if (sender.isEqual(to: self.closeFilePopupPromptRadio)) {
- self.selectCloseFileRadio(sender)
-
- KMPreferenceManager.shared.closeFilePromptType = .promp
- } else if (sender.isEqual(to: self.closeFileNoPromptRadio)) {
- self.selectCloseFileRadio(sender)
-
- KMPreferenceManager.shared.closeFilePromptType = .noPromp
- } else if (sender.isEqual(to: self.openImageFileAutoRadio)) {
- self.selectOpenImageFileRadio(sender)
-
- KMPreferenceManager.shared.openImageFileType = 0
- } else if (sender.isEqual(to: self.openImageFilePromptRadio)) {
- self.selectOpenImageFileRadio(sender)
-
- KMPreferenceManager.shared.openImageFileType = 1
- } else if (sender.isEqual(to: self.savePasswordAlwaysRadio)) {
- self.selectSavePasswordRadio(sender)
-
- KMPreferenceManager.shared.savePasswordType = .always
- } else if (sender.isEqual(to: self.savePasswordNeverRadio)) {
- self.selectSavePasswordRadio(sender)
-
- KMPreferenceManager.shared.savePasswordType = .never
- } else if (sender.isEqual(to: self.savePasswordAskRadio)) {
- self.selectSavePasswordRadio(sender)
-
- KMPreferenceManager.shared.savePasswordType = .ask
- }
- }
-
- @objc private func checkAction(sender: NSButton) {
- if (sender.isEqual(to: self.openLastUnCloseedDocumentCheck)) {
- KMPreferenceManager.shared.openLastUnclosedDocumentWhenAppStart = sender.state == .on
- } else if (sender.isEqual(to: self.openLastUnlockedDocumentCheck)) {
- KMPreferenceManager.shared.openLastUnlockedDocumentWhenAppStart = sender.state == .on
- } else if (sender.isEqual(to: self.saveFilesCheck)) {
- KMPreferenceManager.shared.autoSave = sender.state == .on
- } else if (sender.isEqual(to: self.setDefaultPDFReaderCheck)) {
- KMPreferenceManager.shared.setDefaultPDFReader = sender.state == .on
- }
- }
-
- private func selectCloseFileRadio(_ sender: NSButton) {
- for radio in [self.closeFilePopupPromptRadio, self.closeFileNoPromptRadio] {
- if (sender.isEqual(to: radio)) {
- radio?.state = .on
- } else {
- radio?.state = .off
- }
- }
- }
-
- private func selectOpenImageFileRadio(_ sender: NSButton) {
- for radio in [self.openImageFileAutoRadio, self.openImageFilePromptRadio] {
- if (sender.isEqual(to: radio)) {
- radio?.state = .on
- } else {
- radio?.state = .off
- }
- }
- }
-
- private func selectSavePasswordRadio(_ sender: NSButton) {
- for radio in [self.savePasswordAlwaysRadio, self.savePasswordNeverRadio, self.savePasswordAskRadio] {
- if (sender.isEqual(to: radio)) {
- radio?.state = .on
- } else {
- radio?.state = .off
- }
- }
- }
-
- private func updateSaveFilesDespLabl(enabled: Bool) {
- let _block = {
- if (enabled) {
- let string = "\(NSLocalizedString("minutes", comment: "")) "
- let attriText = NSMutableAttributedString(attributedString: NSAttributedString(string: string,attributes: [.foregroundColor : NSColor(white: 0, alpha: 0.85)]))
- attriText.append(NSAttributedString(string: NSLocalizedString("(5 to 99)", comment: ""),attributes: [.foregroundColor : NSColor(white: 0, alpha: 0.5)]))
- self.saveFilesDespLabl.attributedStringValue = attriText
- } else {
- let string = "\(NSLocalizedString("minutes", comment: "")) "
- let attriText = NSMutableAttributedString(attributedString: NSAttributedString(string: string,attributes: [.foregroundColor : NSColor.lightGray]))
- attriText.append(NSAttributedString(string: NSLocalizedString("(5 to 99)", comment: ""),attributes: [.foregroundColor : NSColor.lightGray]))
- self.saveFilesDespLabl.attributedStringValue = attriText
- }
- }
- if (Thread.isMainThread) {
- _block()
- } else {
- DispatchQueue.main.async {
- _block()
- }
- }
- }
- }
- extension KMPreferenceGeneralController: KMPreferenceDealDataChangeProtocol {
- func refreshUI() {
- DispatchQueue.main.async {
- self.initData()
- }
- }
- }
- extension KMPreferenceGeneralController: NSTextFieldDelegate {
- func controlTextDidChange(_ obj: Notification) {
- if (self.authorTextField.isEqual(to: obj.object)) {
- let author = self.authorTextField.stringValue
- KMPreferenceManager.shared.author = author
- }
- }
- }
-
|