mirror of
https://github.com/qvacua/vimr.git
synced 2024-11-28 11:35:35 +03:00
GH-544 Migrate VimR to Swift 4
This commit is contained in:
parent
4fb0962e04
commit
5656f6765a
@ -1371,11 +1371,11 @@
|
|||||||
4BEBA5041CFF374B00673FDF = {
|
4BEBA5041CFF374B00673FDF = {
|
||||||
CreatedOnToolsVersion = 7.3.1;
|
CreatedOnToolsVersion = 7.3.1;
|
||||||
DevelopmentTeam = H96Q2NKTQH;
|
DevelopmentTeam = H96Q2NKTQH;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0900;
|
||||||
};
|
};
|
||||||
4BEBA5131CFF374B00673FDF = {
|
4BEBA5131CFF374B00673FDF = {
|
||||||
CreatedOnToolsVersion = 7.3.1;
|
CreatedOnToolsVersion = 7.3.1;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0900;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -2216,6 +2216,8 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = com.qvacua.VimR;
|
PRODUCT_BUNDLE_IDENTIFIER = com.qvacua.VimR;
|
||||||
PRODUCT_NAME = VimR;
|
PRODUCT_NAME = VimR;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = VimR/Bridge.h;
|
SWIFT_OBJC_BRIDGING_HEADER = VimR/Bridge.h;
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@ -2235,6 +2237,8 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = com.qvacua.VimR;
|
PRODUCT_BUNDLE_IDENTIFIER = com.qvacua.VimR;
|
||||||
PRODUCT_NAME = VimR;
|
PRODUCT_NAME = VimR;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = VimR/Bridge.h;
|
SWIFT_OBJC_BRIDGING_HEADER = VimR/Bridge.h;
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@ -2250,6 +2254,8 @@
|
|||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.qvacua.VimRTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.qvacua.VimRTests;
|
||||||
PRODUCT_NAME = VimRTests;
|
PRODUCT_NAME = VimRTests;
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@ -2265,6 +2271,8 @@
|
|||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.qvacua.VimRTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.qvacua.VimRTests;
|
||||||
PRODUCT_NAME = VimRTests;
|
PRODUCT_NAME = VimRTests;
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
@ -121,11 +121,11 @@ class AdvancedPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
|||||||
// MARK: - Actions
|
// MARK: - Actions
|
||||||
extension AdvancedPref {
|
extension AdvancedPref {
|
||||||
|
|
||||||
func useInteractiveZshAction(_ sender: NSButton) {
|
@objc func useInteractiveZshAction(_ sender: NSButton) {
|
||||||
self.emit(.setUseInteractiveZsh(sender.boolState))
|
self.emit(.setUseInteractiveZsh(sender.boolState))
|
||||||
}
|
}
|
||||||
|
|
||||||
func useSnapshotUpdateChannelAction(_ sender: NSButton) {
|
@objc func useSnapshotUpdateChannelAction(_ sender: NSButton) {
|
||||||
self.emit(.setUseSnapshotUpdate(sender.boolState))
|
self.emit(.setUseSnapshotUpdate(sender.boolState))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ extension AppDelegate {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func applicationShouldTerminate(_ sender: NSApplication) -> NSApplicationTerminateReply {
|
func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
|
||||||
self.stateContext.savePrefs()
|
self.stateContext.savePrefs()
|
||||||
|
|
||||||
if self.hasDirtyWindows && self.hasMainWindows {
|
if self.hasDirtyWindows && self.hasMainWindows {
|
||||||
@ -143,7 +143,7 @@ extension AppDelegate {
|
|||||||
discardAndQuitButton.keyEquivalentModifierMask = .command
|
discardAndQuitButton.keyEquivalentModifierMask = .command
|
||||||
discardAndQuitButton.keyEquivalent = "d"
|
discardAndQuitButton.keyEquivalent = "d"
|
||||||
|
|
||||||
if alert.runModal() == NSAlertSecondButtonReturn {
|
if alert.runModal() == .alertSecondButtonReturn {
|
||||||
self.uiRoot.prepareQuit()
|
self.uiRoot.prepareQuit()
|
||||||
return .terminateNow
|
return .terminateNow
|
||||||
}
|
}
|
||||||
@ -172,7 +172,7 @@ extension AppDelegate {
|
|||||||
// MARK: - AppleScript
|
// MARK: - AppleScript
|
||||||
extension AppDelegate {
|
extension AppDelegate {
|
||||||
|
|
||||||
func handle(getUrlEvent event: NSAppleEventDescriptor, replyEvent: NSAppleEventDescriptor) {
|
@objc func handle(getUrlEvent event: NSAppleEventDescriptor, replyEvent: NSAppleEventDescriptor) {
|
||||||
guard let urlString = event.paramDescriptor(forKeyword: UInt32(keyDirectObject))?.stringValue else {
|
guard let urlString = event.paramDescriptor(forKeyword: UInt32(keyDirectObject))?.stringValue else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -286,7 +286,7 @@ extension AppDelegate {
|
|||||||
panel.canChooseDirectories = true
|
panel.canChooseDirectories = true
|
||||||
panel.allowsMultipleSelection = true
|
panel.allowsMultipleSelection = true
|
||||||
panel.begin { result in
|
panel.begin { result in
|
||||||
guard result == NSFileHandlingPanelOKButton else {
|
guard result == .OK else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +309,7 @@ fileprivate enum VimRUrlAction: String {
|
|||||||
|
|
||||||
fileprivate let updater = SUUpdater()
|
fileprivate let updater = SUUpdater()
|
||||||
|
|
||||||
fileprivate let debugMenuItemIdentifier = "debug-menu-item"
|
fileprivate let debugMenuItemIdentifier = NSUserInterfaceItemIdentifier("debug-menu-item")
|
||||||
|
|
||||||
fileprivate let filePrefix = "file="
|
fileprivate let filePrefix = "file="
|
||||||
fileprivate let cwdPrefix = "cwd="
|
fileprivate let cwdPrefix = "cwd="
|
||||||
|
@ -43,7 +43,7 @@ extension NSImage {
|
|||||||
|
|
||||||
result.lockFocus()
|
result.lockFocus()
|
||||||
color.set()
|
color.set()
|
||||||
NSRectFillUsingOperation(CGRect(origin: .zero, size: self.size), .sourceAtop)
|
CGRect(origin: .zero, size: self.size).fill(using: .sourceAtop)
|
||||||
result.unlockFocus()
|
result.unlockFocus()
|
||||||
|
|
||||||
return result
|
return result
|
||||||
@ -54,11 +54,11 @@ extension NSButton {
|
|||||||
|
|
||||||
var boolState: Bool {
|
var boolState: Bool {
|
||||||
get {
|
get {
|
||||||
return self.state == NSOnState ? true : false
|
return self.state == .on ? true : false
|
||||||
}
|
}
|
||||||
|
|
||||||
set {
|
set {
|
||||||
self.state = newValue ? NSOnState : NSOffState
|
self.state = newValue ? .on : .off
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,11 +67,11 @@ extension NSMenuItem {
|
|||||||
|
|
||||||
var boolState: Bool {
|
var boolState: Bool {
|
||||||
get {
|
get {
|
||||||
return self.state == NSOnState ? true : false
|
return self.state == .on ? true : false
|
||||||
}
|
}
|
||||||
|
|
||||||
set {
|
set {
|
||||||
self.state = newValue ? NSOnState : NSOffState
|
self.state = newValue ? .on : .off
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -102,17 +102,17 @@ extension NSAttributedString {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static func infoLabel(markdown: String) -> NSAttributedString {
|
static func infoLabel(markdown: String) -> NSAttributedString {
|
||||||
let size = NSFont.smallSystemFontSize()
|
let size = NSFont.smallSystemFontSize
|
||||||
let document = CMDocument(data: markdown.data(using: .utf8), options: .normalize)
|
let document = CMDocument(data: markdown.data(using: .utf8), options: .normalize)
|
||||||
|
|
||||||
let attrs = CMTextAttributes()
|
let attrs = CMTextAttributes()
|
||||||
attrs?.textAttributes = [
|
attrs?.textAttributes = [
|
||||||
NSFontAttributeName: NSFont.systemFont(ofSize: size),
|
NSAttributedStringKey.font: NSFont.systemFont(ofSize: size),
|
||||||
NSForegroundColorAttributeName: NSColor.gray,
|
NSAttributedStringKey.foregroundColor: NSColor.gray,
|
||||||
]
|
]
|
||||||
attrs?.inlineCodeAttributes = [
|
attrs?.inlineCodeAttributes = [
|
||||||
NSFontAttributeName: NSFont.userFixedPitchFont(ofSize: size)!,
|
NSAttributedStringKey.font: NSFont.userFixedPitchFont(ofSize: size)!,
|
||||||
NSForegroundColorAttributeName: NSColor.gray,
|
NSAttributedStringKey.foregroundColor: NSColor.gray,
|
||||||
]
|
]
|
||||||
|
|
||||||
let renderer = CMAttributedStringRenderer(document: document, attributes: attrs)
|
let renderer = CMAttributedStringRenderer(document: document, attributes: attrs)
|
||||||
@ -138,7 +138,7 @@ extension NSView {
|
|||||||
self.removeConstraints(self.constraints)
|
self.removeConstraints(self.constraints)
|
||||||
}
|
}
|
||||||
|
|
||||||
var isFirstResponder: Bool {
|
@objc var isFirstResponder: Bool {
|
||||||
return self.window?.firstResponder == self
|
return self.window?.firstResponder == self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ extension NSTableView {
|
|||||||
static func standardTableView() -> NSTableView {
|
static func standardTableView() -> NSTableView {
|
||||||
let tableView = NSTableView(frame: CGRect.zero)
|
let tableView = NSTableView(frame: CGRect.zero)
|
||||||
|
|
||||||
let column = NSTableColumn(identifier: "name")
|
let column = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("name"))
|
||||||
column.isEditable = false
|
column.isEditable = false
|
||||||
|
|
||||||
tableView.addTableColumn(column)
|
tableView.addTableColumn(column)
|
||||||
@ -183,7 +183,7 @@ extension NSOutlineView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static func configure(toStandard outlineView: NSOutlineView) {
|
static func configure(toStandard outlineView: NSOutlineView) {
|
||||||
let column = NSTableColumn(identifier: "name")
|
let column = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("name"))
|
||||||
column.resizingMask = .autoresizingMask
|
column.resizingMask = .autoresizingMask
|
||||||
column.isEditable = false
|
column.isEditable = false
|
||||||
|
|
||||||
|
@ -74,8 +74,6 @@ class AppearancePref: PrefPane, NSComboBoxDelegate, NSControlTextEditingDelegate
|
|||||||
fileprivate let emit: (Action) -> Void
|
fileprivate let emit: (Action) -> Void
|
||||||
fileprivate let disposeBag = DisposeBag()
|
fileprivate let disposeBag = DisposeBag()
|
||||||
|
|
||||||
fileprivate let fontManager = NSFontManager.shared()
|
|
||||||
|
|
||||||
fileprivate var font: NSFont
|
fileprivate var font: NSFont
|
||||||
fileprivate var linespacing: CGFloat
|
fileprivate var linespacing: CGFloat
|
||||||
fileprivate var usesLigatures: Bool
|
fileprivate var usesLigatures: Bool
|
||||||
@ -135,7 +133,7 @@ class AppearancePref: PrefPane, NSComboBoxDelegate, NSControlTextEditingDelegate
|
|||||||
|
|
||||||
// This takes approx. 0.8s - 1s on my machine... -_-
|
// This takes approx. 0.8s - 1s on my machine... -_-
|
||||||
DispatchQueue.global(qos: .background).async {
|
DispatchQueue.global(qos: .background).async {
|
||||||
fontPopup.addItems(withTitles: self.fontManager.availableFontNames(with: .fixedPitchFontMask)!)
|
fontPopup.addItems(withTitles: sharedFontManager.availableFontNames(with: .fixedPitchFontMask)!)
|
||||||
self.updateViews()
|
self.updateViews()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,8 +160,9 @@ class AppearancePref: PrefPane, NSComboBoxDelegate, NSControlTextEditingDelegate
|
|||||||
previewArea.isHorizontallyResizable = true
|
previewArea.isHorizontallyResizable = true
|
||||||
previewArea.textContainer?.heightTracksTextView = false
|
previewArea.textContainer?.heightTracksTextView = false
|
||||||
previewArea.textContainer?.widthTracksTextView = false
|
previewArea.textContainer?.widthTracksTextView = false
|
||||||
previewArea.autoresizingMask = [.viewWidthSizable, .viewHeightSizable]
|
previewArea.autoresizingMask = [.width, .height]
|
||||||
previewArea.textContainer?.containerSize = CGSize.init(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
|
previewArea.textContainer?.containerSize = CGSize(width: CGFloat.greatestFiniteMagnitude,
|
||||||
|
height: CGFloat.greatestFiniteMagnitude)
|
||||||
previewArea.layoutManager?.replaceTextStorage(NSTextStorage(string: self.exampleText))
|
previewArea.layoutManager?.replaceTextStorage(NSTextStorage(string: self.exampleText))
|
||||||
previewArea.isRichText = false
|
previewArea.isRichText = false
|
||||||
previewArea.turnOffLigatures(self)
|
previewArea.turnOffLigatures(self)
|
||||||
@ -223,7 +222,7 @@ class AppearancePref: PrefPane, NSComboBoxDelegate, NSControlTextEditingDelegate
|
|||||||
linespacingField.autoPinEdge(.top, to: .bottom, of: sizeCombo, withOffset: 18)
|
linespacingField.autoPinEdge(.top, to: .bottom, of: sizeCombo, withOffset: 18)
|
||||||
linespacingField.autoPinEdge(.left, to: .right, of: linespacingTitle, withOffset: 5)
|
linespacingField.autoPinEdge(.left, to: .right, of: linespacingTitle, withOffset: 5)
|
||||||
linespacingField.autoSetDimension(.width, toSize: 60)
|
linespacingField.autoSetDimension(.width, toSize: 60)
|
||||||
NotificationCenter.default.addObserver(forName: NSNotification.Name.NSControlTextDidEndEditing,
|
NotificationCenter.default.addObserver(forName: NSControl.textDidEndEditingNotification,
|
||||||
object: linespacingField,
|
object: linespacingField,
|
||||||
queue: nil) { [unowned self] _ in
|
queue: nil) { [unowned self] _ in
|
||||||
self.linespacingAction()
|
self.linespacingAction()
|
||||||
@ -259,19 +258,19 @@ class AppearancePref: PrefPane, NSComboBoxDelegate, NSControlTextEditingDelegate
|
|||||||
// MARK: - Actions
|
// MARK: - Actions
|
||||||
extension AppearancePref {
|
extension AppearancePref {
|
||||||
|
|
||||||
func usesColorschemeAction(_ sender: NSButton) {
|
@objc func usesColorschemeAction(_ sender: NSButton) {
|
||||||
self.emit(.setUsesColorscheme(sender.boolState))
|
self.emit(.setUsesColorscheme(sender.boolState))
|
||||||
}
|
}
|
||||||
|
|
||||||
func fileIconAction(_ sender: NSButton) {
|
@objc func fileIconAction(_ sender: NSButton) {
|
||||||
self.emit(.setShowsFileIcon(sender.boolState))
|
self.emit(.setShowsFileIcon(sender.boolState))
|
||||||
}
|
}
|
||||||
|
|
||||||
func usesLigaturesAction(_ sender: NSButton) {
|
@objc func usesLigaturesAction(_ sender: NSButton) {
|
||||||
self.emit(.setUsesLigatures(sender.boolState))
|
self.emit(.setUsesLigatures(sender.boolState))
|
||||||
}
|
}
|
||||||
|
|
||||||
func fontPopupAction(_ sender: NSPopUpButton) {
|
@objc func fontPopupAction(_ sender: NSPopUpButton) {
|
||||||
guard let selectedItem = self.fontPopup.selectedItem else {
|
guard let selectedItem = self.fontPopup.selectedItem else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -293,14 +292,14 @@ extension AppearancePref {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let newFontSize = self.cappedFontSize(Int(self.sizes[self.sizeCombo.indexOfSelectedItem]))
|
let newFontSize = self.cappedFontSize(Int(self.sizes[self.sizeCombo.indexOfSelectedItem]))
|
||||||
let newFont = self.fontManager.convert(self.font, toSize: newFontSize)
|
let newFont = sharedFontManager.convert(self.font, toSize: newFontSize)
|
||||||
|
|
||||||
self.emit(.setFont(newFont))
|
self.emit(.setFont(newFont))
|
||||||
}
|
}
|
||||||
|
|
||||||
func sizeComboBoxDidEnter(_ sender: AnyObject!) {
|
@objc func sizeComboBoxDidEnter(_ sender: AnyObject!) {
|
||||||
let newFontSize = self.cappedFontSize(self.sizeCombo.integerValue)
|
let newFontSize = self.cappedFontSize(self.sizeCombo.integerValue)
|
||||||
let newFont = self.fontManager.convert(self.font, toSize: newFontSize)
|
let newFont = sharedFontManager.convert(self.font, toSize: newFontSize)
|
||||||
|
|
||||||
self.emit(.setFont(newFont))
|
self.emit(.setFont(newFont))
|
||||||
}
|
}
|
||||||
@ -338,3 +337,5 @@ extension AppearancePref {
|
|||||||
return cgfSize
|
return cgfSize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileprivate let sharedFontManager = NSFontManager.shared
|
||||||
|
@ -22,7 +22,7 @@ class Application: NSApplication {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@IBAction override func showHelp(_: Any?) {
|
@IBAction override func showHelp(_: Any?) {
|
||||||
NSWorkspace.shared().open(URL(string: "https://github.com/qvacua/vimr/wiki")!)
|
NSWorkspace.shared.open(URL(string: "https://github.com/qvacua/vimr/wiki")!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ extension FileBrowser {
|
|||||||
// MARK: - Actions
|
// MARK: - Actions
|
||||||
extension FileBrowser {
|
extension FileBrowser {
|
||||||
|
|
||||||
func showHiddenAction(_ sender: Any?) {
|
@objc func showHiddenAction(_ sender: Any?) {
|
||||||
guard let menuItem = sender as? NSMenuItem else {
|
guard let menuItem = sender as? NSMenuItem else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -172,11 +172,11 @@ extension FileBrowser {
|
|||||||
self.emit(UuidAction(uuid: self.uuid, action: .setShowHidden(!menuItem.boolState)))
|
self.emit(UuidAction(uuid: self.uuid, action: .setShowHidden(!menuItem.boolState)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func goToParentAction(_ sender: Any?) {
|
@objc func goToParentAction(_ sender: Any?) {
|
||||||
self.emit(UuidAction(uuid: self.uuid, action: .setAsWorkingDirectory(self.cwd.parent)))
|
self.emit(UuidAction(uuid: self.uuid, action: .setAsWorkingDirectory(self.cwd.parent)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func scrollToSourceAction(_ sender: Any?) {
|
@objc func scrollToSourceAction(_ sender: Any?) {
|
||||||
guard let url = self.currentBufferUrl else {
|
guard let url = self.currentBufferUrl else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -184,7 +184,7 @@ extension FileBrowser {
|
|||||||
self.fileView.select(url)
|
self.fileView.select(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
func refreshAction(_ sender: Any?) {
|
@objc func refreshAction(_ sender: Any?) {
|
||||||
self.emit(UuidAction(uuid: self.uuid, action: .refresh))
|
self.emit(UuidAction(uuid: self.uuid, action: .refresh))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ class FileOutlineView: NSOutlineView,
|
|||||||
self.delegate = self
|
self.delegate = self
|
||||||
self.allowsEmptySelection = true
|
self.allowsEmptySelection = true
|
||||||
|
|
||||||
guard Bundle.main.loadNibNamed("FileBrowserMenu", owner: self, topLevelObjects: nil) else {
|
guard Bundle.main.loadNibNamed(NSNib.Name(rawValue: "FileBrowserMenu"), owner: self, topLevelObjects: nil) else {
|
||||||
NSLog("WARN: FileBrowserMenu.xib could not be loaded")
|
NSLog("WARN: FileBrowserMenu.xib could not be loaded")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -341,7 +341,7 @@ extension FileOutlineView {
|
|||||||
extension FileOutlineView {
|
extension FileOutlineView {
|
||||||
|
|
||||||
func outlineView(_ outlineView: NSOutlineView, rowViewForItem item: Any) -> NSTableRowView? {
|
func outlineView(_ outlineView: NSOutlineView, rowViewForItem item: Any) -> NSTableRowView? {
|
||||||
return self.make(withIdentifier: "file-row-view", owner: self) as? ThemedTableRow
|
return self.makeView(withIdentifier: NSUserInterfaceItemIdentifier("file-row-view"), owner: self) as? ThemedTableRow
|
||||||
?? ThemedTableRow(withIdentifier: "file-row-view", themedView: self)
|
?? ThemedTableRow(withIdentifier: "file-row-view", themedView: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,7 +350,7 @@ extension FileOutlineView {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
let cell = (self.make(withIdentifier: "file-cell-view", owner: self) as? ThemedTableCell)?.reset()
|
let cell = (self.makeView(withIdentifier: NSUserInterfaceItemIdentifier("file-cell-view"), owner: self) as? ThemedTableCell)?.reset()
|
||||||
?? ThemedTableCell(withIdentifier: "file-cell-view")
|
?? ThemedTableCell(withIdentifier: "file-cell-view")
|
||||||
|
|
||||||
cell.isDir = fileBrowserItem.isDir
|
cell.isDir = fileBrowserItem.isDir
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import Cocoa
|
import Cocoa
|
||||||
|
|
||||||
fileprivate let workspace = NSWorkspace.shared()
|
fileprivate let workspace = NSWorkspace.shared
|
||||||
fileprivate let iconsCache = NSCache<NSURL, NSImage>()
|
fileprivate let iconsCache = NSCache<NSURL, NSImage>()
|
||||||
|
|
||||||
class FileUtils {
|
class FileUtils {
|
||||||
|
@ -112,7 +112,7 @@ class GeneralPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
|||||||
|
|
||||||
let ignoreListTitle = self.titleTextField(title: "Files To Ignore:")
|
let ignoreListTitle = self.titleTextField(title: "Files To Ignore:")
|
||||||
let ignoreField = self.ignoreField
|
let ignoreField = self.ignoreField
|
||||||
NotificationCenter.default.addObserver(forName: NSNotification.Name.NSControlTextDidEndEditing,
|
NotificationCenter.default.addObserver(forName: NSControl.textDidEndEditingNotification,
|
||||||
object: ignoreField,
|
object: ignoreField,
|
||||||
queue: nil) { [unowned self] _ in
|
queue: nil) { [unowned self] _ in
|
||||||
self.ignorePatternsAction()
|
self.ignorePatternsAction()
|
||||||
@ -204,13 +204,13 @@ class GeneralPref: PrefPane, UiComponent, NSTextFieldDelegate {
|
|||||||
// MARK: - Actions
|
// MARK: - Actions
|
||||||
extension GeneralPref {
|
extension GeneralPref {
|
||||||
|
|
||||||
func copyCliTool(_ sender: NSButton) {
|
@objc func copyCliTool(_ sender: NSButton) {
|
||||||
let panel = NSOpenPanel()
|
let panel = NSOpenPanel()
|
||||||
panel.canChooseFiles = false
|
panel.canChooseFiles = false
|
||||||
panel.canChooseDirectories = true
|
panel.canChooseDirectories = true
|
||||||
|
|
||||||
panel.beginSheetModal(for: self.window!) { result in
|
panel.beginSheetModal(for: self.window!) { result in
|
||||||
guard result == NSFileHandlingPanelOKButton else {
|
guard result == .OK else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,15 +234,15 @@ extension GeneralPref {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func openUntitledWindowWhenLaunchingAction(_ sender: NSButton) {
|
@objc func openUntitledWindowWhenLaunchingAction(_ sender: NSButton) {
|
||||||
self.emit(.setOpenOnLaunch(self.openWhenLaunchingCheckbox.boolState))
|
self.emit(.setOpenOnLaunch(self.openWhenLaunchingCheckbox.boolState))
|
||||||
}
|
}
|
||||||
|
|
||||||
func openUntitledWindowOnReactivationAction(_ sender: NSButton) {
|
@objc func openUntitledWindowOnReactivationAction(_ sender: NSButton) {
|
||||||
self.emit(.setOpenOnReactivation(self.openOnReactivationCheckbox.boolState))
|
self.emit(.setOpenOnReactivation(self.openOnReactivationCheckbox.boolState))
|
||||||
}
|
}
|
||||||
|
|
||||||
func afterLastWindowAction(_ sender: NSPopUpButton) {
|
@objc func afterLastWindowAction(_ sender: NSPopUpButton) {
|
||||||
let index = sender.indexOfSelectedItem
|
let index = sender.indexOfSelectedItem
|
||||||
|
|
||||||
guard index >= 0 && index <= 2 else {
|
guard index >= 0 && index <= 2 else {
|
||||||
|
@ -99,12 +99,12 @@ class HtmlPreviewTool: NSView, UiComponent, WKNavigationDelegate {
|
|||||||
fatalError("init(coder:) has not been implemented")
|
fatalError("init(coder:) has not been implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
func selectHtmlFile(sender: Any?) {
|
@objc func selectHtmlFile(sender: Any?) {
|
||||||
let panel = NSOpenPanel()
|
let panel = NSOpenPanel()
|
||||||
panel.canChooseDirectories = false
|
panel.canChooseDirectories = false
|
||||||
panel.allowsMultipleSelection = false
|
panel.allowsMultipleSelection = false
|
||||||
panel.beginSheetModal(for: self.window!) { result in
|
panel.beginSheetModal(for: self.window!) { result in
|
||||||
guard result == NSFileHandlingPanelOKButton else {
|
guard result == .OK else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ class ImageAndTextTableCell: NSTableCellView {
|
|||||||
static let widthWithoutText = CGFloat(2 + 16 + 4 + 2)
|
static let widthWithoutText = CGFloat(2 + 16 + 4 + 2)
|
||||||
|
|
||||||
static func width(with text: String) -> CGFloat {
|
static func width(with text: String) -> CGFloat {
|
||||||
let attrStr = NSAttributedString(string: text, attributes: [NSFontAttributeName: ImageAndTextTableCell.font])
|
let attrStr = NSAttributedString(string: text, attributes: [NSAttributedStringKey.font: ImageAndTextTableCell.font])
|
||||||
|
|
||||||
return self.widthWithoutText + attrStr.size().width
|
return self.widthWithoutText + attrStr.size().width
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ class ImageAndTextTableCell: NSTableCellView {
|
|||||||
height: max(self._textField.intrinsicContentSize.height, 16))
|
height: max(self._textField.intrinsicContentSize.height, 16))
|
||||||
}
|
}
|
||||||
|
|
||||||
override var backgroundStyle: NSBackgroundStyle {
|
override var backgroundStyle: NSView.BackgroundStyle {
|
||||||
didSet {
|
didSet {
|
||||||
let attrStr = NSMutableAttributedString(attributedString: self.attributedText)
|
let attrStr = NSMutableAttributedString(attributedString: self.attributedText)
|
||||||
|
|
||||||
@ -45,10 +45,10 @@ class ImageAndTextTableCell: NSTableCellView {
|
|||||||
|
|
||||||
switch self.backgroundStyle {
|
switch self.backgroundStyle {
|
||||||
case .light:
|
case .light:
|
||||||
attrStr.addAttribute(NSForegroundColorAttributeName, value: NSColor.black, range: nameRange)
|
attrStr.addAttribute(NSAttributedStringKey.foregroundColor, value: NSColor.black, range: nameRange)
|
||||||
|
|
||||||
case .dark:
|
case .dark:
|
||||||
attrStr.addAttribute(NSForegroundColorAttributeName, value: NSColor.white, range: nameRange)
|
attrStr.addAttribute(NSAttributedStringKey.foregroundColor, value: NSColor.white, range: nameRange)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return
|
return
|
||||||
@ -91,7 +91,7 @@ class ImageAndTextTableCell: NSTableCellView {
|
|||||||
init(withIdentifier identifier: String) {
|
init(withIdentifier identifier: String) {
|
||||||
super.init(frame: CGRect.zero)
|
super.init(frame: CGRect.zero)
|
||||||
|
|
||||||
self.identifier = identifier
|
self.identifier = NSUserInterfaceItemIdentifier(identifier)
|
||||||
|
|
||||||
self.textField = self._textField
|
self.textField = self._textField
|
||||||
self.imageView = self._imageView
|
self.imageView = self._imageView
|
||||||
|
@ -17,7 +17,7 @@ extension MainWindow {
|
|||||||
panel.canChooseDirectories = true
|
panel.canChooseDirectories = true
|
||||||
panel.allowsMultipleSelection = true
|
panel.allowsMultipleSelection = true
|
||||||
panel.beginSheetModal(for: self.window) { result in
|
panel.beginSheetModal(for: self.window) { result in
|
||||||
guard result == NSFileHandlingPanelOKButton else {
|
guard result == .OK else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ extension MainWindow {
|
|||||||
fileprivate func savePanelSheet(action: @escaping (URL) -> Void) {
|
fileprivate func savePanelSheet(action: @escaping (URL) -> Void) {
|
||||||
let panel = NSSavePanel()
|
let panel = NSSavePanel()
|
||||||
panel.beginSheetModal(for: self.window) { result in
|
panel.beginSheetModal(for: self.window) { result in
|
||||||
guard result == NSFileHandlingPanelOKButton else {
|
guard result == .OK else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ extension MainWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func set(repUrl url: URL?, themed: Bool) {
|
func set(repUrl url: URL?, themed: Bool) {
|
||||||
if self.window.styleMask.contains(.fullScreen) || themed == false {
|
if self.window.styleMask.contains(NSWindow.StyleMask.fullScreen) || themed == false {
|
||||||
self.internalSetRepUrl(url)
|
self.internalSetRepUrl(url)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,7 @@ extension MainWindow {
|
|||||||
self.emit(self.uuidAction(for: .frameChanged(to: self.window.frame)))
|
self.emit(self.uuidAction(for: .frameChanged(to: self.window.frame)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func windowShouldClose(_: Any) -> Bool {
|
func windowShouldClose(_: NSWindow) -> Bool {
|
||||||
guard self.neoVimView.isCurrentBufferDirty() else {
|
guard self.neoVimView.isCurrentBufferDirty() else {
|
||||||
self.neoVimView.closeCurrentTab()
|
self.neoVimView.closeCurrentTab()
|
||||||
return false
|
return false
|
||||||
@ -146,7 +146,7 @@ extension MainWindow {
|
|||||||
discardAndCloseButton.keyEquivalentModifierMask = .command
|
discardAndCloseButton.keyEquivalentModifierMask = .command
|
||||||
discardAndCloseButton.keyEquivalent = "d"
|
discardAndCloseButton.keyEquivalent = "d"
|
||||||
alert.beginSheetModal(for: self.window, completionHandler: { response in
|
alert.beginSheetModal(for: self.window, completionHandler: { response in
|
||||||
if response == NSAlertSecondButtonReturn {
|
if response == .alertSecondButtonReturn {
|
||||||
self.neoVimView.closeCurrentTabWithoutSaving()
|
self.neoVimView.closeCurrentTabWithoutSaving()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -108,7 +108,7 @@ class MainWindow: NSObject,
|
|||||||
|
|
||||||
self.cliPipePath = state.cliPipePath
|
self.cliPipePath = state.cliPipePath
|
||||||
|
|
||||||
self.windowController = NSWindowController(windowNibName: "MainWindow")
|
self.windowController = NSWindowController(windowNibName: NSNib.Name(rawValue: "MainWindow"))
|
||||||
|
|
||||||
let neoVimViewConfig = NeoVimView.Config(useInteractiveZsh: state.useInteractiveZsh,
|
let neoVimViewConfig = NeoVimView.Config(useInteractiveZsh: state.useInteractiveZsh,
|
||||||
cwd: state.cwd,
|
cwd: state.cwd,
|
||||||
@ -322,8 +322,6 @@ class MainWindow: NSObject,
|
|||||||
fileprivate var linespacing = NeoVimView.defaultLinespacing
|
fileprivate var linespacing = NeoVimView.defaultLinespacing
|
||||||
fileprivate var usesLigatures = false
|
fileprivate var usesLigatures = false
|
||||||
|
|
||||||
fileprivate let fontManager = NSFontManager.shared()
|
|
||||||
|
|
||||||
fileprivate var previewPosition = Marked(Position.beginning)
|
fileprivate var previewPosition = Marked(Position.beginning)
|
||||||
|
|
||||||
fileprivate var preview: PreviewTool?
|
fileprivate var preview: PreviewTool?
|
||||||
|
@ -14,7 +14,7 @@ class OpenQuicklyFileViewRow: NSTableRowView {
|
|||||||
NSColor.clear.set()
|
NSColor.clear.set()
|
||||||
}
|
}
|
||||||
|
|
||||||
self.rectsBeingDrawn().forEach { NSRectFillUsingOperation(NSIntersectionRect($0, dirtyRect), .sourceOver) }
|
self.rectsBeingDrawn().forEach { NSIntersectionRect($0, dirtyRect).fill(using: .sourceOver) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func rectsBeingDrawn() -> [CGRect] {
|
fileprivate func rectsBeingDrawn() -> [CGRect] {
|
||||||
|
@ -26,7 +26,7 @@ class OpenQuicklyWindow: NSObject,
|
|||||||
|
|
||||||
required init(source: Observable<StateType>, emitter: ActionEmitter, state: StateType) {
|
required init(source: Observable<StateType>, emitter: ActionEmitter, state: StateType) {
|
||||||
self.emit = emitter.typedEmit()
|
self.emit = emitter.typedEmit()
|
||||||
self.windowController = NSWindowController(windowNibName: "OpenQuicklyWindow")
|
self.windowController = NSWindowController(windowNibName: NSNib.Name("OpenQuicklyWindow"))
|
||||||
|
|
||||||
self.searchStream = self.searchField.rx
|
self.searchStream = self.searchField.rx
|
||||||
.text.orEmpty
|
.text.orEmpty
|
||||||
@ -155,7 +155,7 @@ class OpenQuicklyWindow: NSObject,
|
|||||||
let progressIndicator = self.progressIndicator
|
let progressIndicator = self.progressIndicator
|
||||||
progressIndicator.isIndeterminate = true
|
progressIndicator.isIndeterminate = true
|
||||||
progressIndicator.isDisplayedWhenStopped = false
|
progressIndicator.isDisplayedWhenStopped = false
|
||||||
progressIndicator.style = .spinningStyle
|
progressIndicator.style = .spinning
|
||||||
progressIndicator.controlSize = .small
|
progressIndicator.controlSize = .small
|
||||||
|
|
||||||
let fileView = self.fileView
|
let fileView = self.fileView
|
||||||
@ -172,8 +172,8 @@ class OpenQuicklyWindow: NSObject,
|
|||||||
cwdControl.backgroundColor = NSColor.clear
|
cwdControl.backgroundColor = NSColor.clear
|
||||||
cwdControl.refusesFirstResponder = true
|
cwdControl.refusesFirstResponder = true
|
||||||
cwdControl.cell?.controlSize = .small
|
cwdControl.cell?.controlSize = .small
|
||||||
cwdControl.cell?.font = NSFont.systemFont(ofSize: NSFont.smallSystemFontSize())
|
cwdControl.cell?.font = NSFont.systemFont(ofSize: NSFont.smallSystemFontSize)
|
||||||
cwdControl.setContentCompressionResistancePriority(NSLayoutPriorityDefaultLow, for: .horizontal)
|
cwdControl.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
|
||||||
|
|
||||||
let countField = self.countField
|
let countField = self.countField
|
||||||
countField.isEditable = false
|
countField.isEditable = false
|
||||||
@ -231,7 +231,7 @@ extension OpenQuicklyWindow {
|
|||||||
|
|
||||||
@objc(tableView: viewForTableColumn:row:)
|
@objc(tableView: viewForTableColumn:row:)
|
||||||
func tableView(_ tableView: NSTableView, viewFor _: NSTableColumn?, row: Int) -> NSView? {
|
func tableView(_ tableView: NSTableView, viewFor _: NSTableColumn?, row: Int) -> NSView? {
|
||||||
let cachedCell = (tableView.make(withIdentifier: "file-view-row", owner: self) as? ImageAndTextTableCell)?.reset()
|
let cachedCell = (tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("file-view-row"), owner: self) as? ImageAndTextTableCell)?.reset()
|
||||||
let cell = cachedCell ?? ImageAndTextTableCell(withIdentifier: "file-view-row")
|
let cell = cachedCell ?? ImageAndTextTableCell(withIdentifier: "file-view-row")
|
||||||
|
|
||||||
let url = self.fileViewItems[row].url
|
let url = self.fileViewItems[row].url
|
||||||
@ -257,7 +257,7 @@ extension OpenQuicklyWindow {
|
|||||||
let rowText: NSMutableAttributedString
|
let rowText: NSMutableAttributedString
|
||||||
let pathInfo = truncatedPathComps.dropLast().reversed().joined(separator: " / ")
|
let pathInfo = truncatedPathComps.dropLast().reversed().joined(separator: " / ")
|
||||||
rowText = NSMutableAttributedString(string: "\(name) — \(pathInfo)")
|
rowText = NSMutableAttributedString(string: "\(name) — \(pathInfo)")
|
||||||
rowText.addAttribute(NSForegroundColorAttributeName,
|
rowText.addAttribute(NSAttributedStringKey.foregroundColor,
|
||||||
value: NSColor.lightGray,
|
value: NSColor.lightGray,
|
||||||
range: NSRange(location: name.characters.count, length: pathInfo.characters.count + 3))
|
range: NSRange(location: name.characters.count, length: pathInfo.characters.count + 3))
|
||||||
|
|
||||||
@ -315,7 +315,7 @@ extension OpenQuicklyWindow {
|
|||||||
// MARK: - NSWindowDelegate
|
// MARK: - NSWindowDelegate
|
||||||
extension OpenQuicklyWindow {
|
extension OpenQuicklyWindow {
|
||||||
|
|
||||||
func windowShouldClose(_: Any) -> Bool {
|
func windowShouldClose(_: NSWindow) -> Bool {
|
||||||
self.emit(.close)
|
self.emit(.close)
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
@ -114,7 +114,7 @@ class OpenedFileList: NSView,
|
|||||||
// MARK: - Actions
|
// MARK: - Actions
|
||||||
extension OpenedFileList {
|
extension OpenedFileList {
|
||||||
|
|
||||||
func doubleClickAction(_ sender: Any?) {
|
@objc func doubleClickAction(_ sender: Any?) {
|
||||||
let clickedRow = self.bufferList.clickedRow
|
let clickedRow = self.bufferList.clickedRow
|
||||||
guard clickedRow >= 0 && clickedRow < self.buffers.count else {
|
guard clickedRow >= 0 && clickedRow < self.buffers.count else {
|
||||||
return
|
return
|
||||||
@ -137,12 +137,12 @@ extension OpenedFileList {
|
|||||||
extension OpenedFileList {
|
extension OpenedFileList {
|
||||||
|
|
||||||
public func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
|
public func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
|
||||||
return tableView.make(withIdentifier: "buffer-row-view", owner: self) as? ThemedTableRow
|
return tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("buffer-row-view"), owner: self) as? ThemedTableRow
|
||||||
?? ThemedTableRow(withIdentifier: "buffer-row-view", themedView: self)
|
?? ThemedTableRow(withIdentifier: "buffer-row-view", themedView: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
|
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
|
||||||
let cachedCell = (tableView.make(withIdentifier: "buffer-cell-view", owner: self) as? ThemedTableCell)?.reset()
|
let cachedCell = (tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("buffer-cell-view"), owner: self) as? ThemedTableCell)?.reset()
|
||||||
let cell = cachedCell ?? ThemedTableCell(withIdentifier: "buffer-cell-view")
|
let cell = cachedCell ?? ThemedTableCell(withIdentifier: "buffer-cell-view")
|
||||||
|
|
||||||
let buffer = self.buffers[row]
|
let buffer = self.buffers[row]
|
||||||
@ -169,11 +169,11 @@ extension OpenedFileList {
|
|||||||
let pathInfo = url.pathComponents.dropFirst().dropLast().reversed().joined(separator: " / ") + " /"
|
let pathInfo = url.pathComponents.dropFirst().dropLast().reversed().joined(separator: " / ") + " /"
|
||||||
let rowText = NSMutableAttributedString(string: "\(name) — \(pathInfo)")
|
let rowText = NSMutableAttributedString(string: "\(name) — \(pathInfo)")
|
||||||
|
|
||||||
rowText.addAttribute(NSForegroundColorAttributeName,
|
rowText.addAttribute(NSAttributedStringKey.foregroundColor,
|
||||||
value: self.theme.foreground,
|
value: self.theme.foreground,
|
||||||
range: NSRange(location: 0, length: name.characters.count))
|
range: NSRange(location: 0, length: name.characters.count))
|
||||||
|
|
||||||
rowText.addAttribute(NSForegroundColorAttributeName,
|
rowText.addAttribute(NSAttributedStringKey.foregroundColor,
|
||||||
value: self.theme.foreground.brightening(by: 1.15),
|
value: self.theme.foreground.brightening(by: 1.15),
|
||||||
range: NSRange(location: name.characters.count, length: pathInfo.characters.count + 3))
|
range: NSRange(location: name.characters.count, length: pathInfo.characters.count + 3))
|
||||||
|
|
||||||
|
@ -83,10 +83,10 @@ class PrefUtils {
|
|||||||
static func saneFont(_ fontName: String, fontSize: CGFloat) -> NSFont {
|
static func saneFont(_ fontName: String, fontSize: CGFloat) -> NSFont {
|
||||||
var editorFont = NSFont(name: fontName, size: fontSize) ?? NeoVimView.defaultFont
|
var editorFont = NSFont(name: fontName, size: fontSize) ?? NeoVimView.defaultFont
|
||||||
if !editorFont.isFixedPitch {
|
if !editorFont.isFixedPitch {
|
||||||
editorFont = NSFontManager.shared().convert(NeoVimView.defaultFont, toSize: editorFont.pointSize)
|
editorFont = NSFontManager.shared.convert(NeoVimView.defaultFont, toSize: editorFont.pointSize)
|
||||||
}
|
}
|
||||||
if editorFont.pointSize < NeoVimView.minFontSize || editorFont.pointSize > NeoVimView.maxFontSize {
|
if editorFont.pointSize < NeoVimView.minFontSize || editorFont.pointSize > NeoVimView.maxFontSize {
|
||||||
editorFont = NSFontManager.shared().convert(editorFont, toSize: NeoVimView.defaultFont.pointSize)
|
editorFont = NSFontManager.shared.convert(editorFont, toSize: NeoVimView.defaultFont.pointSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
return editorFont
|
return editorFont
|
||||||
|
@ -23,7 +23,7 @@ class PrefWindow: NSObject,
|
|||||||
self.emit = emitter.typedEmit()
|
self.emit = emitter.typedEmit()
|
||||||
self.openStatusMark = state.preferencesOpen.mark
|
self.openStatusMark = state.preferencesOpen.mark
|
||||||
|
|
||||||
self.windowController = NSWindowController(windowNibName: "PrefWindow")
|
self.windowController = NSWindowController(windowNibName: NSNib.Name("PrefWindow"))
|
||||||
|
|
||||||
self.panes = [
|
self.panes = [
|
||||||
GeneralPref(source: source, emitter: emitter, state: state),
|
GeneralPref(source: source, emitter: emitter, state: state),
|
||||||
@ -122,7 +122,7 @@ class PrefWindow: NSObject,
|
|||||||
// MARK: - NSWindowDelegate
|
// MARK: - NSWindowDelegate
|
||||||
extension PrefWindow {
|
extension PrefWindow {
|
||||||
|
|
||||||
func windowShouldClose(_: Any) -> Bool {
|
func windowShouldClose(_: NSWindow) -> Bool {
|
||||||
self.emit(.close)
|
self.emit(.close)
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
@ -178,28 +178,28 @@ class PreviewTool: NSView, UiComponent, WKNavigationDelegate {
|
|||||||
// MARK: - Actions
|
// MARK: - Actions
|
||||||
extension PreviewTool {
|
extension PreviewTool {
|
||||||
|
|
||||||
func refreshNowAction(_: Any?) {
|
@objc func refreshNowAction(_: Any?) {
|
||||||
self.emit(UuidAction(uuid: self.uuid, action: .refreshNow))
|
self.emit(UuidAction(uuid: self.uuid, action: .refreshNow))
|
||||||
}
|
}
|
||||||
|
|
||||||
func forwardSearchAction(_: Any?) {
|
@objc func forwardSearchAction(_: Any?) {
|
||||||
self.forwardSearch(position: self.editorPosition.payload)
|
self.forwardSearch(position: self.editorPosition.payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
func reverseSearchAction(_: Any?) {
|
@objc func reverseSearchAction(_: Any?) {
|
||||||
self.previewPosition = Marked(self.previewPosition.payload) // set a new mark
|
self.previewPosition = Marked(self.previewPosition.payload) // set a new mark
|
||||||
self.emit(UuidAction(uuid: self.uuid, action: .reverseSearch(to: self.previewPosition)))
|
self.emit(UuidAction(uuid: self.uuid, action: .reverseSearch(to: self.previewPosition)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func automaticForwardSearchAction(_ sender: NSMenuItem) {
|
@objc func automaticForwardSearchAction(_ sender: NSMenuItem) {
|
||||||
self.emit(UuidAction(uuid: self.uuid, action: .setAutomaticForwardSearch(to: !sender.boolState)))
|
self.emit(UuidAction(uuid: self.uuid, action: .setAutomaticForwardSearch(to: !sender.boolState)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func automaticReverseSearchAction(_ sender: NSMenuItem) {
|
@objc func automaticReverseSearchAction(_ sender: NSMenuItem) {
|
||||||
self.emit(UuidAction(uuid: self.uuid, action: .setAutomaticReverseSearch(to: !sender.boolState)))
|
self.emit(UuidAction(uuid: self.uuid, action: .setAutomaticReverseSearch(to: !sender.boolState)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func refreshOnWriteAction(_ sender: NSMenuItem) {
|
@objc func refreshOnWriteAction(_ sender: NSMenuItem) {
|
||||||
self.emit(UuidAction(uuid: self.uuid, action: .setRefreshOnWrite(to: !sender.boolState)))
|
self.emit(UuidAction(uuid: self.uuid, action: .setRefreshOnWrite(to: !sender.boolState)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ extension String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let idx = self.characters.index(self.startIndex, offsetBy: prefix.characters.count)
|
let idx = self.characters.index(self.startIndex, offsetBy: prefix.characters.count)
|
||||||
return self[idx..<self.endIndex]
|
return String(self[idx..<self.endIndex])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class ThemedTableRow: NSTableRowView {
|
|||||||
|
|
||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
|
|
||||||
self.identifier = identifier
|
self.identifier = NSUserInterfaceItemIdentifier(identifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func drawBackground(in dirtyRect: NSRect) {
|
open override func drawBackground(in dirtyRect: NSRect) {
|
||||||
@ -32,7 +32,7 @@ class ThemedTableRow: NSTableRowView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.themedView?.theme.background.set()
|
self.themedView?.theme.background.set()
|
||||||
NSRectFill(dirtyRect)
|
dirtyRect.fill()
|
||||||
}
|
}
|
||||||
|
|
||||||
override func drawSelection(in dirtyRect: NSRect) {
|
override func drawSelection(in dirtyRect: NSRect) {
|
||||||
@ -41,7 +41,7 @@ class ThemedTableRow: NSTableRowView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.themedView?.theme.highlightBackground.set()
|
self.themedView?.theme.highlightBackground.set()
|
||||||
NSRectFill(dirtyRect)
|
dirtyRect.fill()
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate weak var themedView: ThemedView?
|
fileprivate weak var themedView: ThemedView?
|
||||||
@ -58,7 +58,7 @@ class ThemedTableCell: NSTableCellView {
|
|||||||
static let widthWithoutText = CGFloat(2 + 16 + 4 + 2)
|
static let widthWithoutText = CGFloat(2 + 16 + 4 + 2)
|
||||||
|
|
||||||
static func width(with text: String) -> CGFloat {
|
static func width(with text: String) -> CGFloat {
|
||||||
let attrStr = NSAttributedString(string: text, attributes: [NSFontAttributeName: ThemedTableCell.font])
|
let attrStr = NSAttributedString(string: text, attributes: [NSAttributedStringKey.font: ThemedTableCell.font])
|
||||||
|
|
||||||
return self.widthWithoutText + attrStr.size().width
|
return self.widthWithoutText + attrStr.size().width
|
||||||
}
|
}
|
||||||
@ -123,7 +123,7 @@ class ThemedTableCell: NSTableCellView {
|
|||||||
init(withIdentifier identifier: String) {
|
init(withIdentifier identifier: String) {
|
||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
|
|
||||||
self.identifier = identifier
|
self.identifier = NSUserInterfaceItemIdentifier(identifier)
|
||||||
|
|
||||||
self.textField = self._textField
|
self.textField = self._textField
|
||||||
self.imageView = self._imageView
|
self.imageView = self._imageView
|
||||||
@ -154,7 +154,7 @@ class ThemedTableCell: NSTableCellView {
|
|||||||
textField.removeFromSuperview()
|
textField.removeFromSuperview()
|
||||||
self.addSubview(textField)
|
self.addSubview(textField)
|
||||||
|
|
||||||
textField.autoPinEdgesToSuperviewEdges(with: EdgeInsets(top: 2, left: 4, bottom: 2, right: 2))
|
textField.autoPinEdgesToSuperviewEdges(with: NSEdgeInsets(top: 2, left: 4, bottom: 2, right: 2))
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate let _textField = NSTextField(forAutoLayout: ())
|
fileprivate let _textField = NSTextField(forAutoLayout: ())
|
||||||
|
@ -87,7 +87,7 @@ class InnerToolBar: NSView, NSUserInterfaceValidations {
|
|||||||
|
|
||||||
override var intrinsicContentSize: CGSize {
|
override var intrinsicContentSize: CGSize {
|
||||||
if #available(macOS 10.11, *) {
|
if #available(macOS 10.11, *) {
|
||||||
return CGSize(width: NSViewNoIntrinsicMetric, height: InnerToolBar.height)
|
return CGSize(width: NSView.noIntrinsicMetric, height: InnerToolBar.height)
|
||||||
} else {
|
} else {
|
||||||
return CGSize(width: -1, height: InnerToolBar.height)
|
return CGSize(width: -1, height: InnerToolBar.height)
|
||||||
}
|
}
|
||||||
@ -128,13 +128,13 @@ class InnerToolBar: NSView, NSUserInterfaceValidations {
|
|||||||
self.theme.separator.set()
|
self.theme.separator.set()
|
||||||
let bottomSeparatorRect = self.bottomSeparatorRect()
|
let bottomSeparatorRect = self.bottomSeparatorRect()
|
||||||
if dirtyRect.intersects(bottomSeparatorRect) {
|
if dirtyRect.intersects(bottomSeparatorRect) {
|
||||||
NSRectFill(bottomSeparatorRect)
|
bottomSeparatorRect.fill()
|
||||||
}
|
}
|
||||||
|
|
||||||
self.theme.toolbarForeground.set()
|
self.theme.toolbarForeground.set()
|
||||||
let innerSeparatorRect = self.innerSeparatorRect()
|
let innerSeparatorRect = self.innerSeparatorRect()
|
||||||
if dirtyRect.intersects(innerSeparatorRect) {
|
if dirtyRect.intersects(innerSeparatorRect) {
|
||||||
NSRectFill(innerSeparatorRect)
|
innerSeparatorRect.fill()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,23 +258,23 @@ class InnerToolBar: NSView, NSUserInterfaceValidations {
|
|||||||
// MARK: - Actions
|
// MARK: - Actions
|
||||||
extension InnerToolBar {
|
extension InnerToolBar {
|
||||||
|
|
||||||
func closeAction(_ sender: Any?) {
|
@objc func closeAction(_ sender: Any?) {
|
||||||
self.tool?.toggle()
|
self.tool?.toggle()
|
||||||
}
|
}
|
||||||
|
|
||||||
func moveToTopAction(_ sender: Any?) {
|
@objc func moveToTopAction(_ sender: Any?) {
|
||||||
self.move(to: .top)
|
self.move(to: .top)
|
||||||
}
|
}
|
||||||
|
|
||||||
func moveToRightAction(_ sender: Any?) {
|
@objc func moveToRightAction(_ sender: Any?) {
|
||||||
self.move(to: .right)
|
self.move(to: .right)
|
||||||
}
|
}
|
||||||
|
|
||||||
func moveToBottomAction(_ sender: Any?) {
|
@objc func moveToBottomAction(_ sender: Any?) {
|
||||||
self.move(to: .bottom)
|
self.move(to: .bottom)
|
||||||
}
|
}
|
||||||
|
|
||||||
func moveToLeftAction(_ sender: Any?) {
|
@objc func moveToLeftAction(_ sender: Any?) {
|
||||||
self.move(to: .left)
|
self.move(to: .left)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ class Workspace: NSView, WorkspaceBarDelegate {
|
|||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
self.configureForAutoLayout()
|
self.configureForAutoLayout()
|
||||||
|
|
||||||
self.register(forDraggedTypes: [WorkspaceToolButton.toolUti])
|
self.registerForDraggedTypes([NSPasteboard.PasteboardType(WorkspaceToolButton.toolUti)])
|
||||||
self.bars.values.forEach {
|
self.bars.values.forEach {
|
||||||
$0.workspace = self
|
$0.workspace = self
|
||||||
$0.delegate = self
|
$0.delegate = self
|
||||||
@ -161,7 +161,7 @@ extension Workspace {
|
|||||||
self.endDrag()
|
self.endDrag()
|
||||||
}
|
}
|
||||||
|
|
||||||
override func draggingEnded(_ sender: NSDraggingInfo?) {
|
override func draggingEnded(_ sender: NSDraggingInfo) {
|
||||||
self.endDrag()
|
self.endDrag()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ extension Workspace {
|
|||||||
leftBar.autoPinEdge(toSuperviewEdge: .left)
|
leftBar.autoPinEdge(toSuperviewEdge: .left)
|
||||||
leftBar.autoPinEdge(.bottom, to: .top, of: bottomBar)
|
leftBar.autoPinEdge(.bottom, to: .top, of: bottomBar)
|
||||||
|
|
||||||
NSLayoutConstraint.autoSetPriority(NSLayoutPriorityDragThatCannotResizeWindow) {
|
NSLayoutConstraint.autoSetPriority(.dragThatCannotResizeWindow) {
|
||||||
topBar.dimensionConstraint = topBar.autoSetDimension(.height, toSize: 50)
|
topBar.dimensionConstraint = topBar.autoSetDimension(.height, toSize: 50)
|
||||||
rightBar.dimensionConstraint = rightBar.autoSetDimension(.width, toSize: 50)
|
rightBar.dimensionConstraint = rightBar.autoSetDimension(.width, toSize: 50)
|
||||||
bottomBar.dimensionConstraint = bottomBar.autoSetDimension(.height, toSize: 50)
|
bottomBar.dimensionConstraint = bottomBar.autoSetDimension(.height, toSize: 50)
|
||||||
|
@ -38,7 +38,7 @@ fileprivate class ProxyBar: NSView {
|
|||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
self.configureForAutoLayout()
|
self.configureForAutoLayout()
|
||||||
|
|
||||||
self.register(forDraggedTypes: [WorkspaceToolButton.toolUti])
|
self.registerForDraggedTypes([NSPasteboard.PasteboardType(WorkspaceToolButton.toolUti)])
|
||||||
|
|
||||||
self.wantsLayer = true
|
self.wantsLayer = true
|
||||||
}
|
}
|
||||||
@ -249,7 +249,7 @@ extension ProxyBar {
|
|||||||
fileprivate func isTool(atIndex idx: Int, beingDragged info: NSDraggingInfo) -> Bool {
|
fileprivate func isTool(atIndex idx: Int, beingDragged info: NSDraggingInfo) -> Bool {
|
||||||
let pasteboard = info.draggingPasteboard()
|
let pasteboard = info.draggingPasteboard()
|
||||||
|
|
||||||
guard let uuid = pasteboard.string(forType: WorkspaceToolButton.toolUti) else {
|
guard let uuid = pasteboard.string(forType: NSPasteboard.PasteboardType(WorkspaceToolButton.toolUti)) else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,7 +295,7 @@ extension ProxyBar {
|
|||||||
return .move
|
return .move
|
||||||
}
|
}
|
||||||
|
|
||||||
override func draggingEnded(_ sender: NSDraggingInfo?) {
|
override func draggingEnded(_ sender: NSDraggingInfo) {
|
||||||
self.endDrag()
|
self.endDrag()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -423,11 +423,11 @@ extension WorkspaceBar {
|
|||||||
|
|
||||||
self.isMouseDownOngoing = true
|
self.isMouseDownOngoing = true
|
||||||
self.delegate?.resizeWillStart(workspaceBar: self, tool: self.selectedTool)
|
self.delegate?.resizeWillStart(workspaceBar: self, tool: self.selectedTool)
|
||||||
self.dimensionConstraint.priority = NSLayoutPriorityDragThatCannotResizeWindow - 1
|
self.dimensionConstraint.priority = NSLayoutConstraint.Priority(NSLayoutConstraint.Priority.RawValue(Int(NSLayoutConstraint.Priority.dragThatCannotResizeWindow.rawValue) - 1))
|
||||||
|
|
||||||
var dragged = false
|
var dragged = false
|
||||||
var curEvent = event
|
var curEvent = event
|
||||||
let nextEventMask: NSEventMask = [.leftMouseDragged, .leftMouseDown, .leftMouseUp]
|
let nextEventMask: NSEvent.EventTypeMask = [.leftMouseDragged, .leftMouseDown, .leftMouseUp]
|
||||||
|
|
||||||
while curEvent.type != .leftMouseUp {
|
while curEvent.type != .leftMouseUp {
|
||||||
let nextEvent = NSApp.nextEvent(matching: nextEventMask,
|
let nextEvent = NSApp.nextEvent(matching: nextEventMask,
|
||||||
@ -459,7 +459,7 @@ extension WorkspaceBar {
|
|||||||
dragged = true
|
dragged = true
|
||||||
}
|
}
|
||||||
|
|
||||||
self.dimensionConstraint.priority = NSLayoutPriorityDragThatCannotResizeWindow
|
self.dimensionConstraint.priority = .dragThatCannotResizeWindow
|
||||||
self.isMouseDownOngoing = false
|
self.isMouseDownOngoing = false
|
||||||
self.delegate?.resizeDidEnd(workspaceBar: self, tool: self.selectedTool)
|
self.delegate?.resizeDidEnd(workspaceBar: self, tool: self.selectedTool)
|
||||||
}
|
}
|
||||||
@ -471,9 +471,9 @@ extension WorkspaceBar {
|
|||||||
|
|
||||||
switch self.location {
|
switch self.location {
|
||||||
case .top, .bottom:
|
case .top, .bottom:
|
||||||
self.addCursorRect(self.resizeRect(), cursor: NSCursor.resizeUpDown())
|
self.addCursorRect(self.resizeRect(), cursor: .resizeUpDown)
|
||||||
case .right, .left:
|
case .right, .left:
|
||||||
self.addCursorRect(self.resizeRect(), cursor: NSCursor.resizeLeftRight())
|
self.addCursorRect(self.resizeRect(), cursor: .resizeLeftRight)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -482,7 +482,7 @@ extension WorkspaceBar {
|
|||||||
|
|
||||||
let innerLineRect = self.innerSeparatorRect()
|
let innerLineRect = self.innerSeparatorRect()
|
||||||
if dirtyRect.intersects(innerLineRect) {
|
if dirtyRect.intersects(innerLineRect) {
|
||||||
NSRectFill(innerLineRect)
|
innerLineRect.fill()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -491,7 +491,7 @@ extension WorkspaceBar {
|
|||||||
|
|
||||||
let outerLineRect = self.outerSeparatorRect()
|
let outerLineRect = self.outerSeparatorRect()
|
||||||
if dirtyRect.intersects(outerLineRect) {
|
if dirtyRect.intersects(outerLineRect) {
|
||||||
NSRectFill(outerLineRect)
|
outerLineRect.fill()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,13 +57,13 @@ class WorkspaceToolButton: NSView, NSDraggingSource {
|
|||||||
|
|
||||||
init(title: String) {
|
init(title: String) {
|
||||||
self.title = NSMutableAttributedString(string: title, attributes: [
|
self.title = NSMutableAttributedString(string: title, attributes: [
|
||||||
NSFontAttributeName: NSFont.systemFont(ofSize: 11),
|
NSAttributedStringKey.font: NSFont.systemFont(ofSize: 11),
|
||||||
])
|
])
|
||||||
|
|
||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
self.configureForAutoLayout()
|
self.configureForAutoLayout()
|
||||||
|
|
||||||
self.title.addAttribute(NSForegroundColorAttributeName,
|
self.title.addAttribute(NSAttributedStringKey.foregroundColor,
|
||||||
value: self.theme.foreground,
|
value: self.theme.foreground,
|
||||||
range: NSRange(location: 0, length: self.title.length))
|
range: NSRange(location: 0, length: self.title.length))
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ class WorkspaceToolButton: NSView, NSDraggingSource {
|
|||||||
self.dehighlight()
|
self.dehighlight()
|
||||||
}
|
}
|
||||||
|
|
||||||
self.title.addAttribute(NSForegroundColorAttributeName,
|
self.title.addAttribute(NSAttributedStringKey.foregroundColor,
|
||||||
value: self.theme.foreground,
|
value: self.theme.foreground,
|
||||||
range: NSRange(location: 0, length: self.title.length))
|
range: NSRange(location: 0, length: self.title.length))
|
||||||
|
|
||||||
@ -137,19 +137,19 @@ extension WorkspaceToolButton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override func mouseDown(with event: NSEvent) {
|
override func mouseDown(with event: NSEvent) {
|
||||||
guard let nextEvent = self.window!.nextEvent(matching: [NSLeftMouseUpMask, NSLeftMouseDraggedMask]) else {
|
guard let nextEvent = self.window!.nextEvent(matching: [.leftMouseUp, .leftMouseDragged]) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
switch nextEvent.type {
|
switch nextEvent.type {
|
||||||
|
|
||||||
case NSLeftMouseUp:
|
case .leftMouseUp:
|
||||||
self.tool?.toggle()
|
self.tool?.toggle()
|
||||||
return
|
return
|
||||||
|
|
||||||
case NSLeftMouseDragged:
|
case .leftMouseDragged:
|
||||||
let pasteboardItem = NSPasteboardItem()
|
let pasteboardItem = NSPasteboardItem()
|
||||||
pasteboardItem.setString(self.tool!.uuid, forType: WorkspaceToolButton.toolUti)
|
pasteboardItem.setString(self.tool!.uuid, forType: NSPasteboard.PasteboardType(WorkspaceToolButton.toolUti))
|
||||||
|
|
||||||
let draggingItem = NSDraggingItem(pasteboardWriter: pasteboardItem)
|
let draggingItem = NSDraggingItem(pasteboardWriter: pasteboardItem)
|
||||||
draggingItem.setDraggingFrame(self.bounds, contents: self.snapshot())
|
draggingItem.setDraggingFrame(self.bounds, contents: self.snapshot())
|
||||||
@ -192,7 +192,7 @@ extension WorkspaceToolButton {
|
|||||||
|
|
||||||
result.lockFocus()
|
result.lockFocus()
|
||||||
self.theme.barButtonHighlight.set()
|
self.theme.barButtonHighlight.set()
|
||||||
NSRectFill(rect)
|
rect.fill()
|
||||||
image.draw(in: rect)
|
image.draw(in: rect)
|
||||||
result.unlockFocus()
|
result.unlockFocus()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user