1
1
mirror of https://github.com/qvacua/vimr.git synced 2024-11-28 02:54:31 +03:00
vimr/VimR/AppDelegate.swift

116 lines
3.0 KiB
Swift
Raw Normal View History

/**
* Tae Won Ha - http://taewon.de - @hataewon
* See LICENSE
*/
2016-06-03 23:13:59 +03:00
import Cocoa
import RxSwift
import PureLayout
2016-06-03 23:13:59 +03:00
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
2016-06-03 23:13:59 +03:00
@IBOutlet var debugMenu: NSMenuItem!
2016-07-26 23:51:05 +03:00
private let disposeBag = DisposeBag()
private let changeSubject = PublishSubject<Any>()
private let changeSink: Observable<Any>
2016-07-27 00:40:20 +03:00
private let actionSubject = PublishSubject<Any>()
2016-07-26 23:51:05 +03:00
private let actionSink: Observable<Any>
private let prefStore: PrefStore
2016-07-24 21:32:07 +03:00
private let mainWindowManager: MainWindowManager
2016-07-26 23:51:05 +03:00
private let prefWindowComponent: PrefWindowComponent
2016-07-26 22:42:30 +03:00
override init() {
2016-07-27 00:40:20 +03:00
self.actionSink = self.actionSubject.asObservable()
2016-07-26 23:51:05 +03:00
self.changeSink = self.changeSubject.asObservable()
self.prefStore = PrefStore(source: self.actionSink)
2016-07-27 00:40:20 +03:00
self.prefWindowComponent = PrefWindowComponent(source: self.changeSink, initialData: self.prefStore.data)
self.mainWindowManager = MainWindowManager(source: self.changeSink, initialData: self.prefStore.data)
2016-07-26 22:42:30 +03:00
super.init()
2016-07-26 23:51:05 +03:00
[ self.prefStore ]
.map { $0.sink }
.toMergedObservables()
2016-07-26 23:51:05 +03:00
.subscribe(self.changeSubject)
.addDisposableTo(self.disposeBag)
2016-07-27 00:40:20 +03:00
[ self.prefWindowComponent ]
.map { $0.sink }
.toMergedObservables()
2016-07-27 00:40:20 +03:00
.subscribe(self.actionSubject)
.addDisposableTo(self.disposeBag)
2016-07-26 22:42:30 +03:00
}
}
// MARK: - NSApplicationDelegate
extension AppDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification) {
// let testView = InputTestView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
// self.window.contentView?.addSubview(testView)
// self.window.makeFirstResponder(testView)
#if DEBUG
self.debugMenu.hidden = false
#endif
self.newDocument(self)
}
func applicationShouldTerminate(sender: NSApplication) -> NSApplicationTerminateReply {
if self.mainWindowManager.hasDirtyWindows() {
let alert = NSAlert()
alert.addButtonWithTitle("Cancel")
alert.addButtonWithTitle("Discard and Quit")
alert.messageText = "There are windows with unsaved buffers!"
alert.alertStyle = .WarningAlertStyle
if alert.runModal() == NSAlertSecondButtonReturn {
return .TerminateNow
}
return .TerminateCancel
}
return .TerminateNow
}
// For drag & dropping files on the App icon.
func application(sender: NSApplication, openFiles filenames: [String]) {
NSLog("\(filenames)")
}
2016-06-03 23:13:59 +03:00
}
2016-08-09 23:18:46 +03:00
// MARK: - IBActions
extension AppDelegate {
@IBAction func showPrefWindow(sender: AnyObject!) {
self.prefWindowComponent.show()
}
2016-08-09 23:18:46 +03:00
@IBAction func newDocument(sender: AnyObject!) {
self.mainWindowManager.newMainWindow()
}
@IBAction func openDocument(sender: AnyObject!) {
2016-08-11 23:37:41 +03:00
let panel = NSOpenPanel()
panel.canChooseDirectories = true
panel.beginWithCompletionHandler { result in
guard result == NSFileHandlingPanelOKButton else {
return
}
let url = panel.URLs[0]
2016-08-11 23:50:44 +03:00
self.mainWindowManager.newMainWindow(url: url)
2016-08-11 23:37:41 +03:00
}
}
2016-08-09 23:18:46 +03:00
}