Create Sketch
This commit is contained in:
parent
1e94a7d351
commit
43a9dbfb02
|
@ -153,6 +153,23 @@ class ASApplication: NSObject, NSApplicationDelegate, NSMenuDelegate {
|
||||||
openTemplate(url.URLByDeletingLastPathComponent!)
|
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) -> ()) {
|
class func newProjectLocation(documentWindow: NSWindow?, message: String, completion: (NSURL) -> ()) {
|
||||||
let savePanel = NSSavePanel()
|
let savePanel = NSSavePanel()
|
||||||
savePanel.allowedFileTypes = [kUTTypeFolder]
|
savePanel.allowedFileTypes = [kUTTypeFolder]
|
||||||
|
|
|
@ -151,6 +151,11 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
|
||||||
return NSPropertyListSerialization.dataFromPropertyList(data, format: .XMLFormat_v1_0, errorDescription: nil)
|
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 {
|
func importProject(url: NSURL, error outError: NSErrorPointer) -> Bool {
|
||||||
let existingProject = url.URLByAppendingPathComponent(url.lastPathComponent+".avrsackproj")
|
let existingProject = url.URLByAppendingPathComponent(url.lastPathComponent+".avrsackproj")
|
||||||
if existingProject.checkResourceIsReachableAndReturnError(nil) {
|
if existingProject.checkResourceIsReachableAndReturnError(nil) {
|
||||||
|
@ -160,7 +165,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
|
||||||
let filesInProject =
|
let filesInProject =
|
||||||
NSFileManager.defaultManager().contentsOfDirectoryAtURL(url, includingPropertiesForKeys: nil,
|
NSFileManager.defaultManager().contentsOfDirectoryAtURL(url, includingPropertiesForKeys: nil,
|
||||||
options: .SkipsHiddenFiles, error: nil)!
|
options: .SkipsHiddenFiles, error: nil)!
|
||||||
files.setProjectURL(fileURL!)
|
updateProjectURL()
|
||||||
for file in filesInProject {
|
for file in filesInProject {
|
||||||
files.addFileURL(file as NSURL)
|
files.addFileURL(file as NSURL)
|
||||||
}
|
}
|
||||||
|
@ -173,8 +178,6 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
|
||||||
let projectURL = url.URLByDeletingPathExtension!.URLByAppendingPathExtension("avrsackproj")
|
let projectURL = url.URLByDeletingPathExtension!.URLByAppendingPathExtension("avrsackproj")
|
||||||
success = importProject(url.URLByDeletingLastPathComponent!, error: outError)
|
success = importProject(url.URLByDeletingLastPathComponent!, error: outError)
|
||||||
if success {
|
if success {
|
||||||
files.setProjectURL(projectURL)
|
|
||||||
builder.setProjectURL(projectURL)
|
|
||||||
fileURL = projectURL
|
fileURL = projectURL
|
||||||
success = writeToURL(projectURL, ofType: "Project", forSaveOperation: .SaveAsOperation, originalContentsURL: nil, error: outError)
|
success = writeToURL(projectURL, ofType: "Project", forSaveOperation: .SaveAsOperation, originalContentsURL: nil, error: outError)
|
||||||
}
|
}
|
||||||
|
@ -187,8 +190,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
|
||||||
if typeName != "Project" {
|
if typeName != "Project" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
files.setProjectURL(fileURL!)
|
updateProjectURL()
|
||||||
builder.setProjectURL(fileURL!)
|
|
||||||
let projectData : NSDictionary = NSPropertyListSerialization.propertyListFromData(data, mutabilityOption: .Immutable, format: nil, errorDescription: nil) as NSDictionary
|
let projectData : NSDictionary = NSPropertyListSerialization.propertyListFromData(data, mutabilityOption: .Immutable, format: nil, errorDescription: nil) as NSDictionary
|
||||||
let projectVersion = projectData[kVersionKey] as Double
|
let projectVersion = projectData[kVersionKey] as Double
|
||||||
assert(projectVersion <= floor(kCurVersion+1.0), "Project version too new for this app")
|
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
|
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 = "<!---"
|
||||||
|
prefix = " "
|
||||||
|
lastPfx = " -->"
|
||||||
|
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
|
// MARK: Editor configuration
|
||||||
|
|
||||||
@IBAction func changeTheme(item: NSMenuItem) {
|
@IBAction func changeTheme(item: NSMenuItem) {
|
||||||
|
|
|
@ -74,10 +74,22 @@
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<menu key="submenu" title="File" id="bib-Uj-vzu">
|
<menu key="submenu" title="File" id="bib-Uj-vzu">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="New" keyEquivalent="n" id="Was-JA-tGl">
|
<menuItem title="New" id="PfG-L0-KCU">
|
||||||
<connections>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<action selector="newDocument:" target="-1" id="4Si-XN-c54"/>
|
<menu key="submenu" title="New" id="sLm-rV-8LL">
|
||||||
</connections>
|
<items>
|
||||||
|
<menuItem title="File" keyEquivalent="n" id="Was-JA-tGl">
|
||||||
|
<connections>
|
||||||
|
<action selector="newDocument:" target="-1" id="4Si-XN-c54"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Sketch" keyEquivalent="N" id="2hE-2e-TSR">
|
||||||
|
<connections>
|
||||||
|
<action selector="createSketch:" target="Voe-Tx-rLC" id="L9a-gX-ioC"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
|
<menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
|
||||||
<connections>
|
<connections>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user