Make editor UI good + support saving/loading draft doc
This commit is contained in:
parent
222629f01d
commit
c66049091d
@ -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"/>
|
<action selector="saveDocument:" target="Voe-Tx-rLC" id="6F3-Jk-bXC"/>
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV">
|
|
||||||
<connections>
|
|
||||||
<action selector="saveDocument:" target="Ady-hI-5gd" id="teZ-XB-qJY"/>
|
|
||||||
</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)")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user