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:
parent
f2dd39d80d
commit
9a2b3b0a86
@ -7,5 +7,5 @@ import Cocoa
|
||||
|
||||
public protocol NeoVimViewDelegate {
|
||||
|
||||
func setTitle(title: String)
|
||||
func setNeoVimTitle(title: String)
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
52
nvox/MainWindowController.swift
Normal file
52
nvox/MainWindowController.swift
Normal 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")
|
||||
}
|
||||
}
|
23
nvox/MainWindowManager.swift
Normal file
23
nvox/MainWindowManager.swift
Normal 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)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user