From 61ef712df442b48f2229717173a1870ecfb75b83 Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Sat, 14 Mar 2015 21:15:27 +0100 Subject: [PATCH] Modernize to latest Swift --- AVRsack/ACEViewExt.swift | 4 ++-- AVRsack/ASFileTree.swift | 13 +++++++++---- AVRsack/ASHardware.swift | 2 +- AVRsack/ASPreferences.swift | 2 +- AVRsack/ASProjDoc.swift | 17 ++++++++++++----- AVRsack/ASSerialWin.swift | 8 ++++---- 6 files changed, 29 insertions(+), 17 deletions(-) diff --git a/AVRsack/ACEViewExt.swift b/AVRsack/ACEViewExt.swift index cac1574..0992a83 100644 --- a/AVRsack/ACEViewExt.swift +++ b/AVRsack/ACEViewExt.swift @@ -9,10 +9,10 @@ import Foundation extension ACEView { - class func themeIdByName(themeName: String) -> UInt? { + class func themeIdByName(themeName: String) -> ACETheme? { for (themeIdx, theme) in enumerate(ACEThemeNames.themeNames() as! [String]) { if themeName == theme { - return UInt(themeIdx) + return ACETheme(rawValue: UInt(themeIdx)) } } return nil diff --git a/AVRsack/ASFileTree.swift b/AVRsack/ASFileTree.swift index 7750c96..5bf3f6a 100644 --- a/AVRsack/ASFileTree.swift +++ b/AVRsack/ASFileTree.swift @@ -39,11 +39,11 @@ enum ASFileType : String { var aceMode : ACEMode { switch self { case .Header,.CFile,.CppFile,.Arduino: - return ACEModeCPP + return .CPP case .Markdown: - return ACEModeMarkdown + return .Markdown default: - return ACEModeText + return .Text } } } @@ -54,7 +54,12 @@ private let kNodeTypeGroup = "Group" private let kNodeTypeFile = "File" private let kNameKey = "Name" -class ASFileNode { +// +// At the moment, Swift crashes at link time with an assertion +// if anything other than a value type or an @objc class is put into a container +// exposed to ObjC APIs. As a workaround, we declare this hierarchy @objc +// +@objc class ASFileNode { func nodeName() -> String { return "" } diff --git a/AVRsack/ASHardware.swift b/AVRsack/ASHardware.swift index cc265da..a915c66 100644 --- a/AVRsack/ASHardware.swift +++ b/AVRsack/ASHardware.swift @@ -8,7 +8,7 @@ import Foundation -typealias ASPropertyEntry = [String: String] +typealias ASPropertyEntry = [String: String] typealias ASProperties = [String: ASPropertyEntry] extension NSMenu { diff --git a/AVRsack/ASPreferences.swift b/AVRsack/ASPreferences.swift index 4d2a40b..fe1f920 100644 --- a/AVRsack/ASPreferences.swift +++ b/AVRsack/ASPreferences.swift @@ -62,7 +62,7 @@ class ASPreferences: NSWindowController, NSOpenSavePanelDelegate { return NSSet(objects: "toolchainPref") } - override convenience init() { + convenience init() { self.init(windowNibName:"ASPreferences") } diff --git a/AVRsack/ASProjDoc.swift b/AVRsack/ASProjDoc.swift index 53bed7b..fee5289 100644 --- a/AVRsack/ASProjDoc.swift +++ b/AVRsack/ASProjDoc.swift @@ -32,11 +32,12 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa @IBOutlet weak var boardTool: NSPopUpButton! @IBOutlet weak var progTool : NSPopUpButton! @IBOutlet weak var portTool : NSPopUpButton! + @IBOutlet weak var printView: ACEView! let files = ASFileTree() let builder = ASBuilder() var mainEditor : ASFileNode? - var currentTheme : UInt = 0 + var currentTheme : ACETheme = .Xcode var fontSize : UInt = 12 var themeObserver : AnyObject! var serialObserver : AnyObject! @@ -245,12 +246,12 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa if let file = (selection as? ASFileItem) { var enc : UInt = 0 editor.setString(NSString(contentsOfURL:file.url, usedEncoding:&enc, error:nil) as? String ?? "") - editor.setMode(UInt(file.type.aceMode)) + editor.setMode(file.type.aceMode) editor.alphaValue = 1.0 mainEditor = selection } else if let log = (selection as? ASLogNode) { editor.setString("") - editor.setMode(UInt(ACEModeText)) + editor.setMode(.Text) editor.alphaValue = 0.8 logModified = NSDate.distantPast() as! NSDate logSize = -1 @@ -274,6 +275,12 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa return selection } + // MARK: Printing + + override func printDocument(sender: AnyObject?) { + editor.print(sender) + } + // MARK: Outline View Delegate func outlineViewSelectionDidChange(notification: NSNotification) { @@ -449,7 +456,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa // MARK: Editor configuration @IBAction func changeTheme(item: NSMenuItem) { - currentTheme = UInt(item.tag) + currentTheme = ACETheme(rawValue: UInt(item.tag)) ?? .Xcode editor.setTheme(currentTheme) NSUserDefaults.standardUserDefaults().setObject( ACEThemeNames.humanNameForTheme(currentTheme), forKey: kThemeKey) @@ -465,7 +472,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa override func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool { if let menuItem = anItem as? NSMenuItem { if menuItem.action == "changeTheme:" { - menuItem.state = (menuItem.tag == Int(currentTheme) ? NSOnState : NSOffState) + menuItem.state = (UInt(menuItem.tag) == currentTheme.rawValue ? NSOnState : NSOffState) return true } else if menuItem.action == "changeKeyboardHandler:" { menuItem.state = (menuItem.tag == Int(keyboardHandler.rawValue) ? NSOnState : NSOffState) diff --git a/AVRsack/ASSerialWin.swift b/AVRsack/ASSerialWin.swift index 546d9c7..9f79b11 100644 --- a/AVRsack/ASSerialWin.swift +++ b/AVRsack/ASSerialWin.swift @@ -39,7 +39,7 @@ class ASSerialWin: NSWindowController { var serialObserver : AnyObject! var termination : AnyObject! dynamic var portHandle : NSFileHandle? - var currentTheme : UInt = 0 + var currentTheme : ACETheme = .Xcode var fontSize : UInt = 12 var portDefaults = [String: AnyObject]() var shouldReconnect = false @@ -147,7 +147,7 @@ class ASSerialWin: NSWindowController { logView.setTheme(currentTheme) logView.setKeyboardHandler(keyboardHandler) logView.setFontSize(fontSize) - logView.setMode(UInt(ACEModeText)) + logView.setMode(.Text) logView.alphaValue = 0.8 window?.title = port if task == nil { @@ -235,7 +235,7 @@ class ASSerialWin: NSWindowController { @IBAction func changeTheme(item: NSMenuItem) { let userDefaults = NSUserDefaults.standardUserDefaults() - currentTheme = UInt(item.tag) + currentTheme = ACETheme(rawValue: UInt(item.tag)) ?? .Xcode logView.setTheme(currentTheme) let themeName = ACEThemeNames.humanNameForTheme(currentTheme) userDefaults.setObject(themeName, forKey: "SerialTheme") @@ -252,7 +252,7 @@ class ASSerialWin: NSWindowController { func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool { if let menuItem = anItem as? NSMenuItem { if menuItem.action == "changeTheme:" { - menuItem.state = (menuItem.tag == Int(currentTheme) ? NSOnState : NSOffState) + menuItem.state = (UInt(menuItem.tag) == currentTheme.rawValue ? NSOnState : NSOffState) return true } else if menuItem.action == "changeKeyboardHandler:" { menuItem.state = (menuItem.tag == Int(keyboardHandler.rawValue) ? NSOnState : NSOffState)