AVRSack/AVRsack/ASPreferences.swift

96 lines
3.0 KiB
Swift

//
// 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 {
dynamic var toolchainPref : String = "" {
didSet(oldPref) {
NSUserDefaults.standardUserDefaults().setObject(toolchainPref, 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 {
if toolchainPref != "" {
return toolchainPref
} else {
return NSWorkspace.sharedWorkspace().URLForApplicationWithBundleIdentifier("cc.arduino.Arduino")!.path! +
"/Contents/Resources/Java/hardware/tools/avr"
}
}
}
class func keyPathsForValuesAffectingToolchainPath() -> NSSet {
return NSSet(objects: "toolchainPref")
}
override convenience init() {
self.init(windowNibName:"ASPreferences")
}
override func awakeFromNib() {
super.awakeFromNib()
toolchainPref = NSUserDefaults.standardUserDefaults().objectForKey("Toolchain") as String
}
var hasCrossPackAVR : Bool {
get {
return NSFileManager.defaultManager().fileExistsAtPath("/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
openPanel.beginSheetModalForWindow(window!, completionHandler: { (returnCode: Int) -> Void in
if returnCode == NSFileHandlingPanelOKButton {
self.toolchainPref = openPanel.URL!.path!
}
})
}
func panel(sender: AnyObject, shouldEnableURL url: NSURL) -> Bool {
let gccPath = url.URLByAppendingPathComponent("bin/avr-gcc")
return NSFileManager.defaultManager().fileExistsAtPath(gccPath.path!)
}
}