KMGeneralPreferences.swift 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. //
  2. // KMGeneralPreferences.swift
  3. // PDF Master
  4. //
  5. // Created by tangchao on 2023/11/6.
  6. //
  7. import Cocoa
  8. class KMGeneralPreferences: NSViewController {
  9. /*
  10. #define @""
  11. #define AUTOMATICALLYCHECKSFORUPDATES_KEY @"automaticallyChecksForUpdates"
  12. #define UPDATECHECKINTERVAL_KEY @"updateCheckInterval"
  13. */
  14. private let UPDATEINTERVAL_KEY = "updateInterval"
  15. private let SUScheduledCheckIntervalKey = "SUScheduledCheckInterval"
  16. @IBOutlet var updateIntervalPopUpButton: NSPopUpButton!
  17. @IBOutlet var openFilesLabelField: NSTextField!
  18. @IBOutlet var openFilesMatrix: NSMatrix!
  19. @IBOutlet var updateIntervalLabelField: NSTextField!
  20. @IBOutlet var savePasswordsMatrix: NSMatrix!
  21. @IBOutlet var authorLabel: NSTextField!
  22. @IBOutlet var authorTextField: NSTextField!
  23. @IBOutlet var defaultOpenButton: NSButton!
  24. @IBOutlet var openTabLabel: NSTextField!
  25. @IBOutlet var openTabButton: NSPopUpButton!
  26. @IBOutlet var showConvertMenuButton: NSButton!
  27. @IBOutlet var autoSaveInfoBtn: NSButton!
  28. @IBOutlet var autoSaveSlider: NSSlider!
  29. @IBOutlet var autoSaveLbl: NSTextField!
  30. @IBOutlet weak var normalButton: NSButton!
  31. @IBOutlet weak var fullScreenButton: NSButton!
  32. var revertPDFSettingsButtons: [NSButton] = []
  33. var updateInterval: Int = 0 {
  34. didSet {
  35. }
  36. }
  37. /*
  38. @interface KMGeneralPreferences : NSViewController <SKPreferencePane> {
  39. NSInteger updateInterval;
  40. }
  41. - (IBAction)revertPDFViewSettings:(id)sender;
  42. - (IBAction)revertFullScreenPDFViewSettings:(id)sender;
  43. */
  44. /*
  45. static char KMGeneralPreferencesDefaultsObservationContext;
  46. static char KMGeneralPreferencesUpdaterObservationContext;
  47. @interface KMGeneralPreferences (Private)
  48. - (void)synchronizeUpdateInterval;
  49. - (void)updateRevertButtons;
  50. @end
  51. */
  52. deinit {
  53. KMPrint("KMGeneralPreferences deinit.")
  54. /*
  55. @try {
  56. [[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeys:[NSArray arrayWithObjects:SKStringConstants.defaultPDFDisplaySettingsKey, SKStringConstants.defaultFullScreenPDFDisplaySettingsKey, nil]];
  57. #if VERSION_DMG
  58. [[SUUpdater sharedUpdater] removeObserver:self forKeyPath:AUTOMATICALLYCHECKSFORUPDATES_KEY];
  59. [[SUUpdater sharedUpdater] removeObserver:self forKeyPath:UPDATECHECKINTERVAL_KEY];
  60. #endif
  61. }
  62. @catch(id e) {}
  63. */
  64. }
  65. override var nibName: NSNib.Name? {
  66. return "GeneralPreferences"
  67. }
  68. override func loadView() {
  69. super.loadView()
  70. let userName = UserDefaults.standard.string(forKey: "SKUserName")
  71. self.authorTextField.stringValue = userName != nil ? userName! : NSFullUserName()
  72. // self.defaultOpenButton.state = [[KMHomeWindowController homeWindow] isDefaultOpenForPDF] ? NSControlStateValueOn : NSControlStateValueOff;
  73. self.authorLabel.stringValue = KMLocalizedString("Author:", nil)
  74. self.defaultOpenButton.title = KMLocalizedString("Set PDF Reader Pro as the default PDF viewer", nil)
  75. self.openTabLabel.stringValue = String(format: "%@:", KMLocalizedString("Open a document in", nil))
  76. for item in self.openTabButton.itemArray {
  77. item.title = KMLocalizedString(item.title, nil)
  78. }
  79. self.showConvertMenuButton.title = KMLocalizedString("Show PDF Reader Pro in menu bar", nil)
  80. // self.showConvertMenuButton.state = [KMStatusBar systemStatusBar].isShow ? NSControlStateValueOn : NSControlStateValueOff;
  81. self.authorLabel.sizeToFit()
  82. var frame = self.authorTextField.frame
  83. frame.origin.x = CGRectGetMaxX(self.authorLabel.frame)+5
  84. self.authorTextField.frame = frame
  85. self.openTabLabel.sizeToFit()
  86. frame = self.openTabButton.frame
  87. frame.origin.x = CGRectGetMaxX(self.openTabLabel.frame)+5
  88. self.openTabButton.frame = frame
  89. self.openTabButton.isEnabled = true
  90. #if VERSION_FREE
  91. // if (![IAPProductsManager defaultManager].isAvailableAllFunction) {
  92. // [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"KMOpenDocumentInTab"];
  93. // }
  94. #endif
  95. self.revertPDFSettingsButtons = [self.normalButton, self.fullScreenButton]
  96. KMAutoSizeButtons(self.revertPDFSettingsButtons, rightAlign: false)
  97. _ = KMAutoSizeLabelFields([openFilesLabelField], [openFilesMatrix], false)
  98. let dw = KMAutoSizeLabelFields([updateIntervalLabelField], [updateIntervalPopUpButton], false)
  99. self.openFilesMatrix.sizeToFit()
  100. self.savePasswordsMatrix.sizeToFit()
  101. KMShiftAndResizeView(self.view, dx: 0.0, dw: dw)
  102. self._synchronizeUpdateInterval()
  103. self._updateRevertButtons()
  104. // [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeys:[NSArray arrayWithObjects:SKStringConstants.defaultPDFDisplaySettingsKey, SKStringConstants.defaultFullScreenPDFDisplaySettingsKey, nil] context:&KMGeneralPreferencesDefaultsObservationContext];
  105. // [NSUserDefaultsController sharedUserDefaultsController]
  106. #if VERSION_DMG
  107. // [[SUUpdater sharedUpdater] addObserver:self forKeyPath:AUTOMATICALLYCHECKSFORUPDATES_KEY options:0 context:&KMGeneralPreferencesUpdaterObservationContext];
  108. // [[SUUpdater sharedUpdater] addObserver:self forKeyPath:UPDATECHECKINTERVAL_KEY options:0 context:&KMGeneralPreferencesUpdaterObservationContext];
  109. #endif
  110. self.autoSaveInfoBtn.title = KMLocalizedString("Autosave Documents", nil)
  111. self.autoSaveInfoBtn.state = AutoSaveManager.manager.autoSaveEnabled ? .on : .off
  112. self.autoSaveSlider.isEnabled = AutoSaveManager.manager.autoSaveEnabled
  113. if (AutoSaveManager.manager.timeInterval > 1) {
  114. self.autoSaveSlider.floatValue = Float((AutoSaveManager.manager.timeInterval - 1) / 19)
  115. } else {
  116. self.autoSaveSlider.floatValue = 0;
  117. }
  118. self.autoSaveLbl.stringValue = String(format: "%.0f %@", AutoSaveManager.manager.timeInterval, KMLocalizedString("minute(s)", nil))
  119. }
  120. override func viewDidLoad() {
  121. super.viewDidLoad()
  122. // Do view setup here.
  123. }
  124. @IBAction func revertPDFViewSettings(_ sender: AnyObject?) {
  125. // [[NSUserDefaultsController sharedUserDefaultsController] revertToInitialValueForKey:SKStringConstants.defaultPDFDisplaySettingsKey];
  126. }
  127. @IBAction func revertFullScreenPDFViewSettings(_ sender: AnyObject?) {
  128. // [[NSUserDefaultsController sharedUserDefaultsController] revertToInitialValueForKey:SKStringConstants.defaultFullScreenPDFDisplaySettingsKey];
  129. }
  130. @IBAction func authorTextFieldAction(_ sender: AnyObject?) {
  131. // NSString *userName = self.authorTextField.stringValue.length > 0 ? self.authorTextField.stringValue : @"";
  132. // [[NSUserDefaults standardUserDefaults] setObject:userName forKey:@"SKUserName"];
  133. // [[NSUserDefaults standardUserDefaults] synchronize];
  134. }
  135. @IBAction func defaultOpenButtonAction(_ sender: AnyObject?) {
  136. // if ([self.defaultOpenButton state]) {
  137. // [[KMHomeWindowController homeWindow] setDefaultOpenForPDF:YES];
  138. // } else {
  139. // [[KMHomeWindowController homeWindow] setDefaultOpenForPDF:NO];
  140. // }
  141. }
  142. @IBAction func openTabButtonAction(_ sender: AnyObject?) {
  143. // if (@available(macOS 10.12, *)) {
  144. // NSWindowTabbingMode tabbingMode = NSWindowTabbingModeAutomatic;
  145. // if (self.openTabButton.indexOfSelectedItem == 0) {
  146. // #if VERSION_FREE
  147. // // if (![IAPProductsManager defaultManager].isAvailableAllFunction) {
  148. // // [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"KMOpenDocumentInTab"];
  149. // // [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
  150. // // return;
  151. // // }
  152. // #endif
  153. // tabbingMode = NSWindowTabbingModePreferred;
  154. // } else if (self.openTabButton.indexOfSelectedItem == 1) {
  155. // tabbingMode = NSWindowTabbingModeDisallowed;
  156. // }
  157. // for (NSDocument *document in [[NSDocumentController sharedDocumentController] documents]) {
  158. // // if ([document isKindOfClass:[SKMainDocument class]]) {
  159. // // for (NSWindowController *windowController in document.windowControllers) {
  160. // // windowController.window.tabbingMode = tabbingMode;
  161. // // }
  162. // // }
  163. // }
  164. // }
  165. }
  166. @IBAction func showConvertMenuButtonAction(_ sender: AnyObject?) {
  167. // if ([self.showConvertMenuButton state]) {
  168. // // [KMStatusBar systemStatusBar].isShow = YES;
  169. // } else {
  170. // // [KMStatusBar systemStatusBar].isShow = NO;
  171. // }
  172. }
  173. @IBAction func autoSaveButtonAction(_ sender: AnyObject?) {
  174. AutoSaveManager.manager.autoSaveEnabled = self.autoSaveInfoBtn.state == .on
  175. self.autoSaveSlider.isEnabled = AutoSaveManager.manager.autoSaveEnabled
  176. }
  177. @IBAction func autoSaveSliderAction(_ sender: AnyObject?) {
  178. let value = 1 + 19 * self.autoSaveSlider.floatValue
  179. AutoSaveManager.manager.timeInterval = CGFloat(value)
  180. self.autoSaveLbl.stringValue = String(format: "%.0f %@", AutoSaveManager.manager.timeInterval, KMLocalizedString("minute(s)", nil))
  181. Self.cancelPreviousPerformRequests(withTarget: self, selector: #selector(autoSaveSliderFinish), object: nil)
  182. self.perform(#selector(autoSaveSliderFinish), with: nil, afterDelay: 1)
  183. }
  184. @objc func autoSaveSliderFinish() {
  185. NotificationCenter.default.post(name: NSNotification.Name(rawValue: KAutoSaveTimeValueChangedNoti), object: nil)
  186. }
  187. /*
  188. #pragma mark Accessors
  189. - (void)setUpdateInterval:(NSInteger)interval {
  190. #if VERSION_DMG
  191. if (interval > 0)
  192. [[SUUpdater sharedUpdater] setUpdateCheckInterval:interval];
  193. [[SUUpdater sharedUpdater] setAutomaticallyChecksForUpdates:interval > 0];
  194. #endif
  195. updateInterval = interval;
  196. }
  197. #pragma mark Actions
  198. #pragma mark KVO
  199. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
  200. if (context == &KMGeneralPreferencesDefaultsObservationContext)
  201. [self updateRevertButtons];
  202. else if (context == &KMGeneralPreferencesUpdaterObservationContext)
  203. [self synchronizeUpdateInterval];
  204. else
  205. [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
  206. }
  207. @end
  208. */
  209. override var title: String? {
  210. set {
  211. super.title = newValue
  212. }
  213. get {
  214. return KMLocalizedString("General", "Preference pane label")
  215. }
  216. }
  217. override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
  218. super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
  219. }
  220. }
  221. // MARK: - Private Methods
  222. extension KMGeneralPreferences {
  223. private func _synchronizeUpdateInterval() {
  224. // self.willChangeValue(forKey: UPDATEINTERVAL_KEY)
  225. #if VERSION_DMG
  226. // updateInterval = [[SUUpdater sharedUpdater] automaticallyChecksForUpdates] ? [[SUUpdater sharedUpdater] updateCheckInterval] : 0;
  227. #endif
  228. // self.didChangeValue(forKey: UPDATEINTERVAL_KEY)
  229. }
  230. private func _updateRevertButtons() {
  231. let initialValues = NSUserDefaultsController.shared.initialValues
  232. let sud = UserDefaults.standard
  233. if let data = sud.dictionary(forKey: SKDefaultPDFDisplaySettingsKey) {
  234. self.normalButton.isEnabled = NSDictionary(dictionary: data).isEqual(initialValues?[SKDefaultPDFDisplaySettingsKey]) == false
  235. } else {
  236. self.normalButton.isEnabled = true
  237. }
  238. if let data = sud.dictionary(forKey: SKDefaultFullScreenPDFDisplaySettingsKey) {
  239. self.fullScreenButton.isEnabled = NSDictionary(dictionary: data).isEqual(initialValues?[SKDefaultFullScreenPDFDisplaySettingsKey]) == false
  240. } else {
  241. self.fullScreenButton.isEnabled = true
  242. }
  243. }
  244. }
  245. extension KMGeneralPreferences: KMPreferencePane {
  246. func defaultsDidRevert() {
  247. let interval = Bundle.main.object(forInfoDictionaryKey: SUScheduledCheckIntervalKey)
  248. #if VERSION_DMG
  249. // [[SUUpdater sharedUpdater] setUpdateCheckInterval:interval];
  250. // [[SUUpdater sharedUpdater] setAutomaticallyChecksForUpdates:interval > 0.0];
  251. #endif
  252. }
  253. }