AVRSack/AVRsack/ASPreferences.swift

94 lines
2.9 KiB
Swift
Raw Normal View History

//
// ASPreferences.swift
// AVRsack
//
// Created by Matthias Neeracher on 12/10/14.
// Copyright © 2014 Aere Perennius. All rights reserved.
//
import Cocoa
private let kASToolchainCrosspack = 0
private let kASToolchainArduino = 1
private let kASToolchainOther = 2
class ASPreferences: NSWindowController, NSOpenSavePanelDelegate {
2014-12-27 01:20:55 +00:00
var toolchainPref : String {
get {
2016-11-13 11:03:51 +00:00
return UserDefaults.standard.object(forKey: "Toolchain") as! String
2014-12-27 01:20:55 +00:00
}
set(newToolchain) {
2016-11-13 11:03:51 +00:00
UserDefaults.standard.set(newToolchain, forKey: "Toolchain")
}
}
var toolchainType : Int {
get {
switch toolchainPref {
case "/usr/local/CrossPack-AVR":
return kASToolchainCrosspack
case "":
return kASToolchainArduino
default:
return kASToolchainOther
}
}
set (toolchain) {
switch toolchain {
case kASToolchainCrosspack:
toolchainPref = "/usr/local/CrossPack-AVR"
case kASToolchainArduino:
toolchainPref = ""
default:
otherToolchainDialog()
}
}
}
class func keyPathsForValuesAffectingToolchainType() -> NSSet {
return NSSet(objects: "toolchainPref")
}
var toolchainPath : String {
get {
2015-02-14 16:43:20 +00:00
if toolchainPref != ("" as String) {
return toolchainPref
} else {
2016-11-13 11:03:51 +00:00
return NSWorkspace.shared().urlForApplication(withBundleIdentifier: "cc.arduino.Arduino")!.path +
"/Contents/Resources/Java/hardware/tools/avr"
}
}
}
class func keyPathsForValuesAffectingToolchainPath() -> NSSet {
return NSSet(objects: "toolchainPref")
}
2015-03-14 20:15:27 +00:00
convenience init() {
self.init(windowNibName:"ASPreferences")
}
var hasCrossPackAVR : Bool {
get {
2016-11-13 11:03:51 +00:00
return FileManager.default.fileExists(atPath: "/usr/local/CrossPack-AVR/bin")
}
}
func otherToolchainDialog() {
let openPanel = NSOpenPanel()
openPanel.delegate = self
openPanel.canChooseFiles = false
openPanel.canChooseDirectories = true
openPanel.allowsMultipleSelection = false
openPanel.resolvesAliases = true
2016-11-13 11:03:51 +00:00
openPanel.beginSheetModal(for: window!, completionHandler: { (returnCode: Int) -> Void in
if returnCode == NSFileHandlingPanelOKButton {
2016-11-13 11:03:51 +00:00
self.toolchainPref = openPanel.url!.path
}
})
}
2016-11-13 11:03:51 +00:00
func panel(_ sender: AnyObject, shouldEnable url: URL) -> Bool {
let gccPath = url.URLByAppendingPathComponent("bin/avr-gcc")
2016-11-13 11:03:51 +00:00
return FileManager.defaultManager().fileExistsAtPath(gccPath.path!)
}
}