diff --git a/AVRsack/ASApplication.swift b/AVRsack/ASApplication.swift
index a1fcfd7..049b567 100644
--- a/AVRsack/ASApplication.swift
+++ b/AVRsack/ASApplication.swift
@@ -152,6 +152,23 @@ class ASApplication: NSObject, NSApplicationDelegate, NSMenuDelegate {
let url = NSURL(fileURLWithPath: examples[item.tag])!
openTemplate(url.URLByDeletingLastPathComponent!)
}
+
+ @IBAction func createSketch(AnyObject) {
+ ASApplication.newProjectLocation(nil,
+ message: "Create Project")
+ { (saveTo) -> Void in
+ let fileManager = NSFileManager.defaultManager()
+ fileManager.createDirectoryAtURL(saveTo, withIntermediateDirectories:false, attributes:nil, error:nil)
+ let proj = saveTo.URLByAppendingPathComponent(saveTo.lastPathComponent+".avrsackproj")
+ let docController = NSDocumentController.sharedDocumentController() as NSDocumentController
+ if let doc = docController.openUntitledDocumentAndDisplay(true, error:nil) as? ASProjDoc {
+ doc.fileURL = proj
+ doc.updateProjectURL()
+ doc.createFileAtURL(saveTo.URLByAppendingPathComponent(saveTo.lastPathComponent+".ino"))
+ doc.writeToURL(proj, ofType: "Project", forSaveOperation: .SaveAsOperation, originalContentsURL: nil, error: nil)
+ }
+ }
+ }
class func newProjectLocation(documentWindow: NSWindow?, message: String, completion: (NSURL) -> ()) {
let savePanel = NSSavePanel()
diff --git a/AVRsack/ASProjDoc.swift b/AVRsack/ASProjDoc.swift
index 6de436c..2d34b71 100644
--- a/AVRsack/ASProjDoc.swift
+++ b/AVRsack/ASProjDoc.swift
@@ -151,6 +151,11 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
return NSPropertyListSerialization.dataFromPropertyList(data, format: .XMLFormat_v1_0, errorDescription: nil)
}
+ func updateProjectURL() {
+ files.setProjectURL(fileURL!)
+ builder.setProjectURL(fileURL!)
+ }
+
func importProject(url: NSURL, error outError: NSErrorPointer) -> Bool {
let existingProject = url.URLByAppendingPathComponent(url.lastPathComponent+".avrsackproj")
if existingProject.checkResourceIsReachableAndReturnError(nil) {
@@ -160,7 +165,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
let filesInProject =
NSFileManager.defaultManager().contentsOfDirectoryAtURL(url, includingPropertiesForKeys: nil,
options: .SkipsHiddenFiles, error: nil)!
- files.setProjectURL(fileURL!)
+ updateProjectURL()
for file in filesInProject {
files.addFileURL(file as NSURL)
}
@@ -173,8 +178,6 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
let projectURL = url.URLByDeletingPathExtension!.URLByAppendingPathExtension("avrsackproj")
success = importProject(url.URLByDeletingLastPathComponent!, error: outError)
if success {
- files.setProjectURL(projectURL)
- builder.setProjectURL(projectURL)
fileURL = projectURL
success = writeToURL(projectURL, ofType: "Project", forSaveOperation: .SaveAsOperation, originalContentsURL: nil, error: outError)
}
@@ -187,8 +190,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
if typeName != "Project" {
return false
}
- files.setProjectURL(fileURL!)
- builder.setProjectURL(fileURL!)
+ updateProjectURL()
let projectData : NSDictionary = NSPropertyListSerialization.propertyListFromData(data, mutabilityOption: .Immutable, format: nil, errorDescription: nil) as NSDictionary
let projectVersion = projectData[kVersionKey] as Double
assert(projectVersion <= floor(kCurVersion+1.0), "Project version too new for this app")
@@ -390,6 +392,48 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
return selectedFiles().count > 0
}
+ func createFileAtURL(url:NSURL) {
+ let type = ASFileType.guessForURL(url)
+ var firstPfx = ""
+ var prefix = ""
+ var lastPfx = ""
+ switch type {
+ case .Header, .CFile:
+ firstPfx = "/*"
+ prefix = " *"
+ lastPfx = " */"
+ case .CppFile, .Arduino:
+ prefix = "//"
+ case .AsmFile:
+ prefix = ";"
+ case .Markdown:
+ firstPfx = ""
+ default:
+ break
+ }
+ var header = ""
+ if prefix != "" {
+ if firstPfx == "" {
+ firstPfx = prefix
+ }
+ if lastPfx == "" {
+ lastPfx = prefix
+ }
+ let dateFmt = NSDateFormatter()
+ dateFmt.dateFormat = "yyyy-MM-dd"
+ header = firstPfx + "\n" +
+ prefix + " Project: " + fileURL!.URLByDeletingLastPathComponent!.lastPathComponent + "\n" +
+ prefix + " File: " + url.lastPathComponent + "\n" +
+ prefix + " Created: " + dateFmt.stringFromDate(NSDate()) + "\n" +
+ lastPfx + "\n\n"
+ }
+ header.writeToURL(url, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
+ files.addFileURL(url)
+ outline.reloadData()
+ }
+
// MARK: Editor configuration
@IBAction func changeTheme(item: NSMenuItem) {
diff --git a/AVRsack/Base.lproj/MainMenu.xib b/AVRsack/Base.lproj/MainMenu.xib
index b07b68b..fe4d80d 100644
--- a/AVRsack/Base.lproj/MainMenu.xib
+++ b/AVRsack/Base.lproj/MainMenu.xib
@@ -74,10 +74,22 @@