2014-11-15 03:39:10 +00:00
|
|
|
//
|
2014-11-15 22:47:46 +00:00
|
|
|
// ASProjDoc.swift
|
2014-11-15 03:39:10 +00:00
|
|
|
// AVRsack
|
|
|
|
//
|
|
|
|
// Created by Matthias Neeracher on 11/15/14.
|
|
|
|
// Copyright (c) 2014 Aere Perennius. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Cocoa
|
|
|
|
|
2014-11-16 18:39:32 +00:00
|
|
|
class ASProjDoc: NSDocument, NSOutlineViewDelegate {
|
|
|
|
@IBOutlet weak var editor : ACEView!
|
|
|
|
@IBOutlet weak var outline : NSOutlineView!
|
|
|
|
let files : ASFileTree = ASFileTree()
|
|
|
|
var mainEditor : ASFileNode?
|
2014-11-15 22:47:46 +00:00
|
|
|
|
2014-11-15 03:39:10 +00:00
|
|
|
override init() {
|
|
|
|
super.init()
|
|
|
|
// Add your subclass-specific initialization here.
|
|
|
|
}
|
2014-11-16 20:10:04 +00:00
|
|
|
override func finalize() {
|
|
|
|
saveCurEditor()
|
|
|
|
}
|
|
|
|
|
|
|
|
func saveCurEditor() {
|
|
|
|
if let file = (mainEditor as? ASFileItem) {
|
|
|
|
editor.string().writeToURL(file.url, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-11-15 03:39:10 +00:00
|
|
|
override func windowControllerDidLoadNib(aController: NSWindowController) {
|
|
|
|
super.windowControllerDidLoadNib(aController)
|
2014-11-16 18:39:32 +00:00
|
|
|
outline.setDataSource(files)
|
2014-11-16 20:10:04 +00:00
|
|
|
files.apply() { node in
|
|
|
|
if let group = node as? ASFileGroup {
|
|
|
|
if group.expanded {
|
|
|
|
self.outline.expandItem(node)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-11-15 03:39:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override class func autosavesInPlace() -> Bool {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
override var windowNibName: String? {
|
|
|
|
// Returns the nib file name of the document
|
|
|
|
// If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this property and override -makeWindowControllers instead.
|
2014-11-15 22:47:46 +00:00
|
|
|
return "ASProjDoc"
|
2014-11-15 03:39:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override func dataOfType(typeName: String, error outError: NSErrorPointer) -> NSData? {
|
|
|
|
outError.memory = NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2014-11-16 18:39:32 +00:00
|
|
|
func importProject(url: NSURL, error outError: NSErrorPointer) -> Bool {
|
|
|
|
let existingProject = url.URLByAppendingPathComponent(url.lastPathComponent+".avrsackproj")
|
|
|
|
if existingProject.checkResourceIsReachableAndReturnError(nil) {
|
|
|
|
fileURL = existingProject
|
|
|
|
return readFromURL(existingProject, ofType:"Project", error:outError)
|
|
|
|
}
|
|
|
|
let filesInProject =
|
|
|
|
NSFileManager.defaultManager().contentsOfDirectoryAtURL(url, includingPropertiesForKeys: nil,
|
|
|
|
options: .SkipsHiddenFiles, error: nil)!
|
|
|
|
for file in filesInProject {
|
|
|
|
files.addFileURL(file as NSURL)
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
override func readFromURL(url: NSURL, ofType typeName: String, error outError: NSErrorPointer) -> Bool {
|
|
|
|
var success : Bool = false
|
|
|
|
if typeName == "Arduino Source File" {
|
|
|
|
let projectURL = url.URLByDeletingPathExtension!.URLByAppendingPathExtension("avrsackproj")
|
|
|
|
fileURL = projectURL
|
|
|
|
success = importProject(url.URLByDeletingLastPathComponent!, error: outError)
|
|
|
|
} else {
|
|
|
|
success = true
|
|
|
|
}
|
2014-11-16 20:10:04 +00:00
|
|
|
if success {
|
|
|
|
files.setProjectURL(fileURL!)
|
|
|
|
}
|
2014-11-16 18:39:32 +00:00
|
|
|
return success
|
|
|
|
}
|
|
|
|
|
|
|
|
func outlineViewSelectionDidChange(notification: NSNotification) {
|
|
|
|
let selection = outline.itemAtRow(outline.selectedRow) as ASFileNode?
|
|
|
|
if selection !== mainEditor {
|
|
|
|
saveCurEditor()
|
|
|
|
}
|
|
|
|
if let file = (selection as? ASFileItem) {
|
|
|
|
var enc : UInt = 0
|
|
|
|
editor.setString(NSString(contentsOfURL:file.url, usedEncoding:&enc, error:nil))
|
|
|
|
editor.setMode(UInt(file.type.aceMode))
|
|
|
|
}
|
|
|
|
}
|
2014-11-16 20:10:04 +00:00
|
|
|
func outlineViewItemDidExpand(notification: NSNotification) {
|
|
|
|
let group = notification.userInfo!["NSObject"] as ASFileGroup
|
|
|
|
group.expanded = true
|
|
|
|
}
|
|
|
|
func outlineViewItemDidCollapse(notification: NSNotification) {
|
|
|
|
let group = notification.userInfo!["NSObject"] as ASFileGroup
|
|
|
|
group.expanded = false
|
2014-11-15 03:39:10 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|