1
1
mirror of https://github.com/qvacua/vimr.git synced 2024-12-01 10:02:36 +03:00
vimr/VimR/FileOutlineView.swift

56 lines
1.1 KiB
Swift
Raw Normal View History

2016-10-03 16:03:18 +03:00
/**
* Tae Won Ha - http://taewon.de - @hataewon
* See LICENSE
*/
import Cocoa
import RxSwift
enum FileOutlineViewAction {
case openFileItem(fileItem: FileItem)
}
class FileOutlineView: NSOutlineView, Flow {
fileprivate let flow: EmbeddableComponent
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var sink: Observable<Any> {
return self.flow.sink
}
init(source: Observable<Any>) {
self.flow = EmbeddableComponent(source: source)
super.init(frame: CGRect.zero)
}
override func keyDown(with event: NSEvent) {
guard let char = event.charactersIgnoringModifiers?.characters.first else {
super.keyDown(with: event)
return
}
guard let item = self.selectedItem as? FileItem else {
super.keyDown(with: event)
return
}
switch char {
case " ", "\r": // Why "\r" and not "\n"?
if item.dir || item.package {
self.toggle(item: item)
} else {
self.flow.publish(event: FileOutlineViewAction.openFileItem(fileItem: item))
}
default:
super.keyDown(with: event)
}
}
}