macos/writeas/AppDelegate.swift

148 lines
4.4 KiB
Swift

//
// 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)
}
}