AVRSack/AVRsack/ASProjDoc.swift

109 lines
3.8 KiB
Swift
Raw Normal View History

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