@@ -11,16 +11,24 @@ import Cocoa | |||||
@NSApplicationMain | @NSApplicationMain | ||||
class AppDelegate: NSObject, NSApplicationDelegate { | class AppDelegate: NSObject, NSApplicationDelegate { | ||||
var vc: ViewController? | |||||
func applicationDidFinishLaunching(aNotification: NSNotification) { | func applicationDidFinishLaunching(aNotification: NSNotification) { | ||||
// Insert code here to initialize your application | // Insert code here to initialize your application | ||||
} | } | ||||
func applicationWillTerminate(aNotification: NSNotification) { | |||||
func applicationWillTerminate(_ aNotification: Notification) { | |||||
// Insert code here to tear down your application | // Insert code here to tear down your application | ||||
} | } | ||||
func applicationDidBecomeActive(_ notification: Notification) { | |||||
if vc == nil { | |||||
vc = NSApplication.shared().mainWindow?.contentViewController as! ViewController | |||||
} | |||||
} | |||||
@IBAction func saveDocument(_ sender: AnyObject) { | |||||
vc?.saveDocument() | |||||
} | |||||
} | } | ||||
@@ -82,14 +82,9 @@ | |||||
</menu> | </menu> | ||||
</menuItem> | </menuItem> | ||||
<menuItem isSeparatorItem="YES" id="m54-Is-iLE"/> | <menuItem isSeparatorItem="YES" id="m54-Is-iLE"/> | ||||
<menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG"> | |||||
<menuItem title="Save" keyEquivalent="s" id="pxx-59-PXV"> | |||||
<connections> | <connections> | ||||
<action selector="performClose:" target="Ady-hI-5gd" id="HmO-Ls-i7Q"/> | |||||
</connections> | |||||
</menuItem> | |||||
<menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV"> | |||||
<connections> | |||||
<action selector="saveDocument:" target="Ady-hI-5gd" id="teZ-XB-qJY"/> | |||||
<action selector="saveDocument:" target="Voe-Tx-rLC" id="6F3-Jk-bXC"/> | |||||
</connections> | </connections> | ||||
</menuItem> | </menuItem> | ||||
<menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A"> | <menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A"> | ||||
@@ -97,12 +92,6 @@ | |||||
<action selector="saveDocumentAs:" target="Ady-hI-5gd" id="mDf-zr-I0C"/> | <action selector="saveDocumentAs:" target="Ady-hI-5gd" id="mDf-zr-I0C"/> | ||||
</connections> | </connections> | ||||
</menuItem> | </menuItem> | ||||
<menuItem title="Revert to Saved" id="KaW-ft-85H"> | |||||
<modifierMask key="keyEquivalentModifierMask"/> | |||||
<connections> | |||||
<action selector="revertDocumentToSaved:" target="Ady-hI-5gd" id="iJ3-Pv-kwq"/> | |||||
</connections> | |||||
</menuItem> | |||||
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/> | <menuItem isSeparatorItem="YES" id="aJh-i4-bef"/> | ||||
<menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK"> | <menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK"> | ||||
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/> | <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/> | ||||
@@ -148,12 +137,6 @@ | |||||
<action selector="paste:" target="Ady-hI-5gd" id="UvS-8e-Qdg"/> | <action selector="paste:" target="Ady-hI-5gd" id="UvS-8e-Qdg"/> | ||||
</connections> | </connections> | ||||
</menuItem> | </menuItem> | ||||
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk"> | |||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> | |||||
<connections> | |||||
<action selector="pasteAsPlainText:" target="Ady-hI-5gd" id="cEh-KX-wJQ"/> | |||||
</connections> | |||||
</menuItem> | |||||
<menuItem title="Delete" id="pa3-QI-u2k"> | <menuItem title="Delete" id="pa3-QI-u2k"> | ||||
<modifierMask key="keyEquivalentModifierMask"/> | <modifierMask key="keyEquivalentModifierMask"/> | ||||
<connections> | <connections> | ||||
@@ -191,11 +174,6 @@ | |||||
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="HOh-sY-3ay"/> | <action selector="performFindPanelAction:" target="Ady-hI-5gd" id="HOh-sY-3ay"/> | ||||
</connections> | </connections> | ||||
</menuItem> | </menuItem> | ||||
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt"> | |||||
<connections> | |||||
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="U76-nv-p5D"/> | |||||
</connections> | |||||
</menuItem> | |||||
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd"> | <menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd"> | ||||
<connections> | <connections> | ||||
<action selector="centerSelectionInVisibleArea:" target="Ady-hI-5gd" id="IOG-6D-g5B"/> | <action selector="centerSelectionInVisibleArea:" target="Ady-hI-5gd" id="IOG-6D-g5B"/> | ||||
@@ -8,20 +8,83 @@ | |||||
import Cocoa | import Cocoa | ||||
class ViewController: NSViewController { | |||||
class ViewController: NSViewController, NSTextViewDelegate { | |||||
@IBOutlet var writerText: NSTextView! | |||||
let draftFile = "Write.as/draft.txt" | |||||
override func viewDidLoad() { | override func viewDidLoad() { | ||||
super.viewDidLoad() | super.viewDidLoad() | ||||
loadDocument() | |||||
writerText.font = NSFont(name: "Lora", size: 16) | |||||
writerText.isHorizontallyResizable = false | |||||
writerText.textContainerInset = NSSize(width: 16, height: 16) | |||||
writerText.isAutomaticQuoteSubstitutionEnabled = false | |||||
writerText.isAutomaticDashSubstitutionEnabled = false | |||||
// Do any additional setup after loading the view. | // Do any additional setup after loading the view. | ||||
writerText.delegate = self | |||||
} | } | ||||
override var representedObject: AnyObject? { | |||||
override func viewDidAppear() { | |||||
super.viewDidAppear() | |||||
// Fit textview to window size | |||||
writerText.setFrameSize(NSSize(width: self.view.window!.frame.width, height: self.view.window!.frame.height)) | |||||
// Style the window | |||||
self.view.window!.title = "Write.as" | |||||
self.view.window!.titlebarAppearsTransparent = true | |||||
self.view.window!.isMovableByWindowBackground = true | |||||
self.view.window!.titleVisibility = .hidden | |||||
self.view.window!.backgroundColor = NSColor.white | |||||
} | |||||
override var representedObject: Any? { | |||||
didSet { | didSet { | ||||
// Update the view, if already loaded. | // Update the view, if already loaded. | ||||
} | } | ||||
} | } | ||||
fileprivate func getDraftPath() -> URL? { | |||||
do { | |||||
let baseDir = try FileManager.default.url(for: .documentDirectory, in: .allDomainsMask, appropriateFor: nil, create: true) | |||||
return baseDir.appendingPathComponent(draftFile) | |||||
} catch (let err) { | |||||
print("ERROR getting path: \(err)") | |||||
return nil | |||||
} | |||||
} | |||||
func saveDocument() { | |||||
// Save whatever's written | |||||
let path = getDraftPath() | |||||
if path == nil { | |||||
return | |||||
} | |||||
//writing | |||||
do { | |||||
try writerText.textStorage!.string.write(to: path!, atomically: false, encoding: .utf8)// .write(toFile: path.absoluteString, atomically: true, encoding: .utf8) | |||||
} catch (let err) { | |||||
print("ERROR writing: \(err)") | |||||
} | |||||
} | |||||
func loadDocument() { | |||||
let path = getDraftPath() | |||||
if path == nil { | |||||
return | |||||
} | |||||
do { | |||||
let draftText = try String(contentsOf: path!, encoding: .utf8) | |||||
writerText.string = draftText | |||||
} catch (let err) { | |||||
print("ERROR loading: \(err)") | |||||
} | |||||
} | |||||
} | } | ||||