// // AppDelegate.swift // writeas // // Created by Matt Baer on 12/29/15. // Copyright © 2015 A Bunch Tell. All rights reserved. // import Cocoa import Foundation @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { var vc: ViewController? @IBOutlet weak var filePublishItem: NSMenuItem! @IBOutlet weak var nightModeItem: NSMenuItem! @IBOutlet weak var formatFontSerifItem: NSMenuItem! @IBOutlet weak var formatFontSansItem: NSMenuItem! @IBOutlet weak var formatFontMonoItem: NSMenuItem! struct GlobalSettings { var isNight = false } var globalSettings = GlobalSettings() func applicationDidFinishLaunching(_ aNotification: Notification) { // Set night mode state let nightModeState = Int(UserDefaults.standard.string(forKey: "night_mode_state") ?? String(NSOffState))! globalSettings.isNight = nightModeState == NSOnState if globalSettings.isNight { // Toggle Night Mode menu item on toggleNightMode(nightModeItem) } // Set font let font = Preferences.getFont() if font == Preferences.PostFont.serif { formatFontSerifItem.state = NSOnState } else if font == Preferences.PostFont.sans { formatFontSansItem.state = NSOnState } else if font == Preferences.PostFont.mono { formatFontMonoItem.state = NSOnState } } func applicationWillTerminate(_ aNotification: Notification) { vc?.saveDocument() } func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } func applicationDidBecomeActive(_ notification: Notification) { if vc == nil { vc = NSApplication.shared().mainWindow?.contentViewController as? ViewController } DispatchQueue.global(qos: .background).async { if !FileManager.default.fileExists(atPath: Constants.draftDir, isDirectory: nil) { do { try FileManager.default.createDirectory(atPath: Constants.draftDir, withIntermediateDirectories: false, attributes: nil) } catch let error as NSError { print(error.localizedDescription); } } } } @IBAction func fileClose(_ sender: Any) { NSApplication.shared().mainWindow!.close() } @IBAction func toggleNightMode(_ sender: NSMenuItem) { let isOff = sender.state == NSOffState for w in NSApplication.shared().windows { let wc = w.windowController as? WindowController wc?.toggle(isNight: isOff) } sender.state = isOff ? NSOnState : NSOffState globalSettings.isNight = isOff UserDefaults.standard.set(String(sender.state), forKey: "night_mode_state") } @IBAction func formatStrong(_ sender: Any) { let wc = NSApplication.shared().mainWindow?.windowController as? WindowController wc?.embolden() } @IBAction func formatEmphasis(_ sender: Any) { let wc = NSApplication.shared().mainWindow?.windowController as? WindowController wc?.emphasize() } @IBAction func formatAddLink(_ sender: Any) { let wc = NSApplication.shared().mainWindow?.windowController as? WindowController wc?.addLink() } @IBAction func setFontSerif(_ sender: NSMenuItem) { deselectAllFonts() sender.state = NSOnState vc?.setFont(.serif) Preferences.setFont(.serif) } @IBAction func setFontSans(_ sender: NSMenuItem) { deselectAllFonts() sender.state = NSOnState vc?.setFont(.sans) Preferences.setFont(.sans) } @IBAction func setFontMono(_ sender: NSMenuItem) { deselectAllFonts() sender.state = NSOnState vc?.setFont(.mono) Preferences.setFont(.mono) } func deselectAllFonts() { formatFontSerifItem.state = NSOffState formatFontSansItem.state = NSOffState formatFontMonoItem.state = NSOffState } @IBAction func saveDocument(_ sender: AnyObject) { vc?.saveDocument() } @IBAction func publishDoc(_ sender: Any) { filePublishItem.isEnabled = false vc?.publish() } @IBAction func viewIncTextSize(_ sender: Any) { vc?.adjustTextSize(increment: true) } @IBAction func viewDecTextSize(_ sender: Any) { vc?.adjustTextSize(increment: false) } }