// // SettingsWindowController.swift // PDF Reader Pro // // Created by Niehaoyu on 2024/9/26. // import Cocoa import KMComponentLibrary @objcMembers class SettingsWindowController: KMNBaseWindowController { @IBOutlet weak var typeContendBox: NSBox! @IBOutlet weak var generalView: ComponentNavBarItem! @IBOutlet weak var displayView: ComponentNavBarItem! @IBOutlet weak var typeDivider: ComponentDivider! @IBOutlet weak var infoContendBox: NSBox! @IBOutlet weak var scrollView: KMScrollView! @IBOutlet weak var resetContendBox: NSBox! @IBOutlet weak var resetButton: ComponentButton! @IBOutlet weak var resetAllButton: ComponentButton! @IBOutlet weak var resetButtonWidthConst: NSLayoutConstraint! @IBOutlet weak var resetAllButtonWidthConst: NSLayoutConstraint! static let shared = SettingsWindowController(windowNibName: "SettingsWindowController") var generalContendView: SettingsGeneralView = SettingsGeneralView(frame: CGRectMake(0, 0, 640, 526)) var displayContendView: SettingsDisplayView = SettingsDisplayView(frame: CGRectMake(0, 0, 640, 624)) var generalProperty: ComponentNavbarItemProperty = ComponentNavbarItemProperty(state: .normal, text: KMLocalizedString("General", comment: ""), iconImage: nil) var displayProperty: ComponentNavbarItemProperty = ComponentNavbarItemProperty(state: .normal, text: KMLocalizedString("Page Display", comment: ""), iconImage: nil) //MARK: - Func deinit { } override func windowWillLoad() { super.windowWillLoad() } override func windowDidLoad() { super.windowDidLoad() // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. self.window?.delegate = self scrollView.scrollerStyle = .overlay self.setUpTypeView() self.settingTypeChoosed(generalView) self.setUpResetButton() } func setUpTypeView() { if let value = ComponentLibrary.shared.getComponentValueFromKey("colorBg/layout-middle") { let currentValue = value as! [String : Any] typeContendBox.fillColor = ComponentLibrary.shared.getColor(rgbaDict: currentValue) } generalView.properties = generalProperty generalView.setTarget(self, action: #selector(settingTypeChoosed(_:))) displayView.properties = displayProperty displayView.setTarget(self, action: #selector(settingTypeChoosed(_:))) typeDivider.properties = ComponentDividerProperty(type: .vertical, dash: false) } func setUpResetButton() { if let value = ComponentLibrary.shared.getComponentValueFromKey("colorBg/layout-low") { let currentValue = value as! [String : Any] infoContendBox.fillColor = ComponentLibrary.shared.getColor(rgbaDict: currentValue) resetContendBox.fillColor = ComponentLibrary.shared.getColor(rgbaDict: currentValue) } resetButton.properties = ComponentButtonProperty(type: .gray, size: .xxs, state: .normal, isDisable: false, onlyIcon: false, showLeftIcon: false, showRightIcon: false, buttonText: KMLocalizedString("Reset"), keepPressState: false) resetButtonWidthConst.constant = resetButton.properties.propertyInfo.viewWidth resetAllButton.properties = ComponentButtonProperty(type: .gray, size: .xxs, state: .normal, isDisable: false, onlyIcon: false, showLeftIcon: false, showRightIcon: false, buttonText: KMLocalizedString("Reset All"), keepPressState: false) resetAllButtonWidthConst.constant = resetAllButton.properties.propertyInfo.viewWidth resetButton.setTarget(self, action: #selector(resetButtonClicked(_:))) resetAllButton.setTarget(self, action: #selector(resetButtonClicked(_:))) } override func updateUILanguage() { super.updateUILanguage() generalProperty.text = KMLocalizedString("General", comment: "") generalView.reloadData() displayProperty.text = KMLocalizedString("Page Display", comment: "") displayView.reloadData() resetButton.properties.buttonText = KMLocalizedString("Reset") resetButton.reloadData() resetButtonWidthConst.constant = resetButton.properties.propertyInfo.viewWidth resetAllButton.properties.buttonText = KMLocalizedString("Reset All") resetAllButton.reloadData() resetAllButtonWidthConst.constant = resetAllButton.properties.propertyInfo.viewWidth generalContendView.setUp() generalContendView.reloadData() displayContendView.setup() generalContendView.reloadData() } override func updateUIThemeColor() { super.updateUIThemeColor() } //MARK: - Action @objc func resetButtonClicked(_ sender: NSView) { let alert = NSAlert() alert.alertStyle = .critical alert.messageText = KMLocalizedString("Reset data?", comment: "") if sender == resetAllButton { alert.messageText = KMLocalizedString("Reset all data?", comment: "") } alert.addButton(withTitle: KMLocalizedString("Reset", comment: "")) alert.addButton(withTitle: KMLocalizedString("Cancel", comment: "")) let response = alert.runModal() if response.rawValue == 1000 { if sender == resetButton { if scrollView.documentView == generalContendView { SettingsManager.sharedInstance.resetGeneralData() generalContendView.reloadData() } else if scrollView.documentView == displayContendView { SettingsManager.sharedInstance.resetPageDisplayData() displayContendView.reloadData() } } else if sender == resetAllButton { SettingsManager.sharedInstance.resetDefaultData() generalContendView.reloadData() displayContendView.reloadData() } } } @objc func settingTypeChoosed(_ sender: ComponentNavBarItem) { if sender == generalView { generalProperty.state = .pressed displayProperty.state = .normal scrollView.contentViewSize = CGSizeMake(640, 526) scrollView.documentView = generalContendView scrollView.layout() } else if sender == displayView { generalProperty.state = .normal displayProperty.state = .pressed scrollView.contentViewSize = CGSizeMake(640, 682) scrollView.documentView = displayContendView scrollView.layout() } generalView.reloadData() displayView.reloadData() let rect = scrollView.documentView?.bounds ?? CGRectZero scrollView.documentView?.scroll(CGPoint(x: 0, y: rect.size.height)) } } //MARK: - Extension-NSWindowDelegate extension SettingsWindowController: NSWindowDelegate { func windowWillClose(_ notification: Notification) { SettingsManager.sharedInstance.saveData() self.removeNotification() } override func showWindow(_ sender: Any?) { super.showWindow(sender) self.initNotification() } }