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 {
return NSUserDefaults.standardUserDefaults().objectForKey("Toolchain") as String
}
set(newToolchain) {
NSUserDefaults.standardUserDefaults().setObject(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 {
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")
}
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!)
}
}