1
1
mirror of https://github.com/qvacua/vimr.git synced 2024-10-28 03:38:54 +03:00

Add rudimentary support for multi window

This commit is contained in:
Tae Won Ha 2016-07-10 18:47:24 +02:00
parent f2dd39d80d
commit 9a2b3b0a86
No known key found for this signature in database
GPG Key ID: E40743465B5B8B44
6 changed files with 99 additions and 23 deletions

View File

@ -7,5 +7,5 @@ import Cocoa
public protocol NeoVimViewDelegate {
func setTitle(title: String)
func setNeoVimTitle(title: String)
}

View File

@ -167,7 +167,9 @@ extension NeoVimView: NeoVimUiBridgeProtocol {
}
public func setTitle(title: String) {
self.delegate?.setTitle(title)
DispatchUtils.gui {
self.delegate?.setNeoVimTitle(title)
}
}
public func setIcon(icon: String) {

View File

@ -35,6 +35,8 @@
4B9A15251D2993DA009F9F67 /* Quick.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B56F29C1D29926600C1F92E /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4B9A15261D2993DF009F9F67 /* SwiftNeoVim.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B2A2BF71D0351810074CE9A /* SwiftNeoVim.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4BCADE081D11ED12004DAD0F /* CocoaExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCADE071D11ED12004DAD0F /* CocoaExtensions.swift */; };
4BD3BF931D32A95800082605 /* MainWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD3BF921D32A95800082605 /* MainWindowController.swift */; };
4BD3BF971D32B0DB00082605 /* MainWindowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD3BF961D32B0DB00082605 /* MainWindowManager.swift */; };
4BDCFACB1D31449700F62670 /* NeoVimServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BDCFACA1D31449700F62670 /* NeoVimServer.m */; };
4BDCFACD1D3145AC00F62670 /* libnvim.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BDCFACC1D3145AC00F62670 /* libnvim.a */; };
4BDCFAD51D3145E500F62670 /* libjemalloc_pic.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BDCFACE1D3145E500F62670 /* libjemalloc_pic.a */; };
@ -179,6 +181,8 @@
4B854A1C1D31447C00E08DE1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
4BCADE071D11ED12004DAD0F /* CocoaExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaExtensions.swift; sourceTree = "<group>"; };
4BCF638F1D323CFD00F15CE4 /* nvim */ = {isa = PBXFileReference; lastKnownFileType = folder; name = nvim; path = neovim/src/nvim; sourceTree = SOURCE_ROOT; };
4BD3BF921D32A95800082605 /* MainWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainWindowController.swift; sourceTree = "<group>"; };
4BD3BF961D32B0DB00082605 /* MainWindowManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainWindowManager.swift; sourceTree = "<group>"; };
4BDCFAC91D31449700F62670 /* NeoVimServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NeoVimServer.h; sourceTree = "<group>"; };
4BDCFACA1D31449700F62670 /* NeoVimServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NeoVimServer.m; sourceTree = "<group>"; };
4BDCFACC1D3145AC00F62670 /* libnvim.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libnvim.a; path = neovim/build/lib/libnvim.a; sourceTree = SOURCE_ROOT; };
@ -377,10 +381,12 @@
isa = PBXGroup;
children = (
4BEBA5081CFF374B00673FDF /* AppDelegate.swift */,
4B2A2C0D1D0353750074CE9A /* Bridge.h */,
4BD3BF961D32B0DB00082605 /* MainWindowManager.swift */,
4BD3BF921D32A95800082605 /* MainWindowController.swift */,
4BEBA50A1CFF374B00673FDF /* Assets.xcassets */,
4BEBA50C1CFF374B00673FDF /* MainMenu.xib */,
4BEBA50F1CFF374B00673FDF /* Info.plist */,
4B2A2C0D1D0353750074CE9A /* Bridge.h */,
);
path = nvox;
sourceTree = "<group>";
@ -667,6 +673,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4BD3BF971D32B0DB00082605 /* MainWindowManager.swift in Sources */,
4BD3BF931D32A95800082605 /* MainWindowController.swift in Sources */,
4BEBA5091CFF374B00673FDF /* AppDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;

View File

@ -7,32 +7,23 @@ import Cocoa
import PureLayout
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NeoVimViewDelegate {
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
let view = NeoVimView(forAutoLayout: ())
private let mainWindowManager = MainWindowManager()
@IBAction func debugSomething(sender: AnyObject!) {
let font = NSFont(name: "Courier", size: 14)!
self.view.setFont(font)
NSLog("debug sth...")
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
@IBAction func newDocument(sender: AnyObject!) {
self.mainWindowManager.newMainWindow()
}
// 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)
self.window.contentView?.addSubview(self.view)
self.view.autoPinEdgesToSuperviewEdges()
self.window.makeFirstResponder(self.view)
}
func applicationWillTerminate(notification: NSNotification) {
self.view.cleanUp()
}
func setTitle(title: String) {
self.window.title = title
}
// }
}

View File

@ -0,0 +1,52 @@
/**
* Tae Won Ha - http://taewon.de - @hataewon
* See LICENSE
*/
import Cocoa
import PureLayout
class MainWindowController: NSWindowController, NSWindowDelegate {
var uuid: String {
return self.neoVimView.uuid
}
weak var mainWindowManager: MainWindowManager?
private let neoVimView = NeoVimView(forAutoLayout: ())
init(contentRect: CGRect, manager: MainWindowManager) {
self.mainWindowManager = manager
let style = NSTitledWindowMask | NSUnifiedTitleAndToolbarWindowMask | NSTexturedBackgroundWindowMask |
NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask
let window = NSWindow(contentRect: contentRect, styleMask: style, backing: .Buffered, defer: true)
super.init(window: window)
window.delegate = self
window.hasShadow = true
window.title = "nvox"
window.opaque = false
window.animationBehavior = .DocumentWindow
self.addViews()
self.window?.makeFirstResponder(self.neoVimView)
}
func windowWillClose(notification: NSNotification) {
self.neoVimView.cleanUp()
self.mainWindowManager?.closeMainWindow(self)
}
private func addViews() {
self.window?.contentView?.addSubview(self.neoVimView)
self.neoVimView.autoPinEdgesToSuperviewEdges()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

View File

@ -0,0 +1,23 @@
/**
* Tae Won Ha - http://taewon.de - @hataewon
* See LICENSE
*/
import Cocoa
class MainWindowManager {
private var mainWindowControllers: [String: MainWindowController] = [:]
func newMainWindow() {
let mainWindowController = MainWindowController(contentRect: CGRect(x: 100, y: 100, width: 320, height: 240),
manager: self)
mainWindowController.showWindow(self)
self.mainWindowControllers[mainWindowController.uuid] = mainWindowController
}
func closeMainWindow(mainWindowController: MainWindowController) {
self.mainWindowControllers.removeValueForKey(mainWindowController.uuid)
}
}