// // SettingsWindowController.swift // PDF Reader Pro // // Created by Niehaoyu on 2024/9/26. // import Cocoa import KMComponentLibrary @objcMembers class SettingsWindowController: NSWindowController { @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 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", comment: "")) resetAllButton.properties = ComponentButtonProperty(type: .gray, size: .xxs, state: .normal, isDisable: false, onlyIcon: false, showLeftIcon: false, showRightIcon: false, buttonText: KMLocalizedString("Reset All", comment: "")) resetButtonWidthConst.constant = resetButton.properties.propertyInfo.viewWidth resetAllButtonWidthConst.constant = resetAllButton.properties.propertyInfo.viewWidth resetButton.setTarget(self, action: #selector(resetButtonClicked(_:))) resetAllButton.setTarget(self, action: #selector(resetButtonClicked(_:))) } //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() } }