diff --git a/AVRsack/ASApplication.swift b/AVRsack/ASApplication.swift index b395e71..a1fcfd7 100644 --- a/AVRsack/ASApplication.swift +++ b/AVRsack/ASApplication.swift @@ -10,12 +10,20 @@ import Cocoa @NSApplicationMain class ASApplication: NSObject, NSApplicationDelegate, NSMenuDelegate { - @IBOutlet weak var themeMenu : NSMenu! - @IBOutlet weak var keyboardMenu : NSMenu! - @IBOutlet weak var preferences : ASPreferences! + @IBOutlet var themeMenu : NSMenu! + @IBOutlet var keyboardMenu : NSMenu! + @IBOutlet var preferences : ASPreferences! var sketches = [String]() var examples = [String]() - + + func hasDocument() -> Bool { + if let doc = NSDocumentController.sharedDocumentController().currentDocument as? NSDocument { + return true + } else { + return false + } + } + func applicationWillFinishLaunching(notification: NSNotification) { // // Retrieve static app defaults @@ -80,12 +88,23 @@ class ASApplication: NSObject, NSApplicationDelegate, NSMenuDelegate { let examplePath = arduinoPath.stringByAppendingPathComponent("Contents/Resources/Java/examples") ASSketchBook.addSketches(menu, target: self, action: "openExample:", path: examplePath, sketches: &examples) } - + case "Serial Monitor": + menu.itemAtIndex(0)?.hidden = !hasDocument() + while menu.numberOfItems > 2 { + menu.removeItemAtIndex(2) + } + for port in ASSerial.ports() as [String] { + menu.addItemWithTitle(port, action:"serialConnectMenu:", keyEquivalent:"") + } default: break } } - + + @IBAction func serialConnectMenu(port: NSMenuItem) { + ASSerialWin.showWindowWithPort(port.title) + } + func openTemplate(template: NSURL) { ASApplication.newProjectLocation(nil, message: "Save editable copy of project \(template.lastPathComponent)") diff --git a/AVRsack/ASProjDoc.swift b/AVRsack/ASProjDoc.swift index a68efda..10cad1a 100644 --- a/AVRsack/ASProjDoc.swift +++ b/AVRsack/ASProjDoc.swift @@ -309,6 +309,10 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate { return true } else if menuItem.action == "changeKeyboardHandler:" { menuItem.state = (menuItem.tag == Int(keyboardHandler.rawValue) ? NSOnState : NSOffState) + return true + } else if menuItem.action == "serialConnect:" { + menuItem.title = port + return true } } diff --git a/AVRsack/ASSerial.mm b/AVRsack/ASSerial.mm index bff3c66..8d66b04 100644 --- a/AVRsack/ASSerial.mm +++ b/AVRsack/ASSerial.mm @@ -35,7 +35,7 @@ NSString * kASSerialPortsChanged = @"PortsChanged"; if ([[port substringToIndex:2] isEqualToString:@"cu"]) [cuPorts addObject:[port substringFromIndex:3]]; } - return cuPorts; + return [cuPorts sortedArrayUsingSelector:@selector(compare:)]; } + (NSString *) fileNameForPort:(NSString *)port diff --git a/AVRsack/Base.lproj/MainMenu.xib b/AVRsack/Base.lproj/MainMenu.xib index 01f411f..b6e9de4 100644 --- a/AVRsack/Base.lproj/MainMenu.xib +++ b/AVRsack/Base.lproj/MainMenu.xib @@ -1,7 +1,7 @@ - + - + @@ -11,7 +11,7 @@ - + @@ -384,17 +384,51 @@ + + + + + + + + + + + + + + + + + + + + NSNegateBoolean + + + + + + + + + + + + + + @@ -436,5 +470,6 @@ +