From feb2f578f2659b833a756dfdd66909d21745349e Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Mon, 8 Dec 2014 04:42:45 +0100 Subject: [PATCH] Conditionalize upload button on port and programmer availability --- AVRsack/ASProjDoc.swift | 32 ++++++++++++++++++++++++++------ AVRsack/Base.lproj/ASProjDoc.xib | 3 ++- AVRsack/Defaults.plist | 2 +- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/AVRsack/ASProjDoc.swift b/AVRsack/ASProjDoc.swift index 29f7d2c..4286570 100644 --- a/AVRsack/ASProjDoc.swift +++ b/AVRsack/ASProjDoc.swift @@ -41,7 +41,11 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate { var themeObserver : AnyObject? var board = "uno" var programmer = "arduino" - var port = "" + dynamic var port : String = "" { + didSet { + + } + } var recentBoards = [String]() var recentProgrammers = [String]() var logModified = NSDate.distantPast() as NSDate @@ -113,7 +117,6 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate { } } } - updateChangeCount(.ChangeCleared) outlineViewSelectionDidChange(NSNotification(name: "", object: nil)) menuNeedsUpdate(boardTool.menu!) menuNeedsUpdate(progTool.menu!) @@ -121,6 +124,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate { portTool.addItemWithTitle("Title") portTool.addItemsWithTitles(ASSerial.ports()) portTool.setTitle(port) + updateChangeCount(.ChangeCleared) } override class func autosavesInPlace() -> Bool { @@ -363,7 +367,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate { set (newBoard) { for (ident, prop) in ASHardware.instance().boards { if prop["name"] == newBoard { - board = ident + setValue(ident, forKey: "board") pushToFront(&recentBoards, board) @@ -393,7 +397,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate { set (newProg) { for (ident, prop) in ASHardware.instance().programmers { if prop["name"] == newProg { - programmer = ident + setValue(ident, forKey:"programmer") pushToFront(&recentProgrammers, programmer) @@ -423,10 +427,26 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate { var hasUploadProtocol : Bool { get { - return ASHardware.instance().boards[board]?["upload.protocol"] != nil + if let proto = ASHardware.instance().boards[board]?["upload.protocol"] { + return proto != "" + } else { + return false + } } } - + class func keyPathsForValuesAffectingHasUploadProtocol() -> NSSet { + return NSSet(object: "board") + } + + var canUpload : Bool { + get { + return port != "" && (hasUploadProtocol || programmer != "") + } + } + class func keyPathsForValuesAffectingCanUpload() -> NSSet { + return NSSet(objects: "port", "board", "programmer") + } + @IBAction func uploadProject(AnyObject) { selectNode(files.uploadLog) builder.uploadProject(board, programmer:programmer, port:port) diff --git a/AVRsack/Base.lproj/ASProjDoc.xib b/AVRsack/Base.lproj/ASProjDoc.xib index a2d331a..c504d01 100644 --- a/AVRsack/Base.lproj/ASProjDoc.xib +++ b/AVRsack/Base.lproj/ASProjDoc.xib @@ -98,9 +98,10 @@ - + + diff --git a/AVRsack/Defaults.plist b/AVRsack/Defaults.plist index 8cedb89..585e59e 100644 --- a/AVRsack/Defaults.plist +++ b/AVRsack/Defaults.plist @@ -22,7 +22,7 @@ Port Programmer - arduino + Board uno Bindings