Files
i2p.i2p/launchers/macosx/I2PLauncher/userinterface/Style2019/EditorTableView/EditorTableCell.swift

100 lines
2.6 KiB
Swift

//
// EditorTableCell.swift
// I2PLauncher
//
// Created by Mikal Villa on 08/04/2019.
// Copyright © 2019 The I2P Project. All rights reserved.
//
import Cocoa
import SnapKit
class EditorTableCell: NSTableCellView {
let toggleButton = NSButton()
var selected: Bool = false {
didSet {
setNeedsDisplay(frame)
}
}
var toggleCallback: () -> Void = {}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
private func commonInit() {
let textField = NSTextField()
textField.isEditable = false
textField.isBordered = false
textField.isSelectable = false
self.textField = textField
let font = NSFont.systemFont(ofSize: 11)
textField.font = font
textField.textColor = NSColor.textColor
textField.backgroundColor = NSColor.clear
addSubview(textField)
textField.snp.makeConstraints { make in
make.left.equalTo(10)
make.centerY.equalToSuperview()
}
addSubview(toggleButton)
toggleButton.title = ""
toggleButton.isBordered = false
toggleButton.bezelStyle = .texturedSquare
toggleButton.controlSize = .small
toggleButton.target = self
toggleButton.action = #selector(EditorTableCell.toggle)
toggleButton.wantsLayer = true
toggleButton.layer?.borderWidth = 1
toggleButton.layer?.cornerRadius = 4
toggleButton.snp.makeConstraints { make in
make.left.equalTo(textField.snp.right).offset(-4)
make.width.equalTo(36)
make.right.equalTo(-10)
make.height.equalTo(20)
make.centerY.equalToSuperview()
}
}
@objc func toggle() {
self.selected = !selected
toggleCallback()
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
let color = selected ? StatusColor.green : NSColor.tertiaryLabelColor
let title = selected ? "ON" : "OFF"
if #available(OSX 10.14, *) {
toggleButton.title = title
toggleButton.font = NSFont.systemFont(ofSize: 11)
toggleButton.contentTintColor = color
} else {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
let attributes: [NSAttributedString.Key: Any] = [
.font: NSFont.systemFont(ofSize: 11),
.foregroundColor: color,
.paragraphStyle: paragraphStyle
]
toggleButton.attributedTitle = NSAttributedString(string: title, attributes: attributes)
}
toggleButton.layer?.borderColor = color.cgColor
}
}