126 lines
2.5 KiB
Swift
126 lines
2.5 KiB
Swift
//
|
|
// SidebarCell.swift
|
|
// Evergreen
|
|
//
|
|
// Created by Brent Simmons on 8/1/15.
|
|
// Copyright © 2015 Ranchero Software, LLC. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import DB5
|
|
|
|
private var textSizeCache = [String: NSSize]()
|
|
|
|
class SidebarCell : NSTableCellView {
|
|
|
|
var image: NSImage?
|
|
private let unreadCountView = UnreadCountView(frame: NSZeroRect)
|
|
|
|
var unreadCount: Int {
|
|
get {
|
|
return unreadCountView.unreadCount
|
|
}
|
|
set {
|
|
if unreadCountView.unreadCount != newValue {
|
|
unreadCountView.unreadCount = newValue
|
|
}
|
|
}
|
|
}
|
|
|
|
var name: String {
|
|
get {
|
|
if let s = textField?.stringValue {
|
|
return s
|
|
}
|
|
return ""
|
|
}
|
|
set {
|
|
if textField?.stringValue != newValue {
|
|
textField?.stringValue = newValue
|
|
needsDisplay = true
|
|
needsLayout = true
|
|
}
|
|
}
|
|
}
|
|
|
|
override var isFlipped: Bool {
|
|
get {
|
|
return true
|
|
}
|
|
}
|
|
|
|
private func commonInit() {
|
|
|
|
unreadCountView.translatesAutoresizingMaskIntoConstraints = false
|
|
addSubview(unreadCountView)
|
|
}
|
|
|
|
override init(frame frameRect: NSRect) {
|
|
|
|
super.init(frame: frameRect)
|
|
commonInit()
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
|
|
super.init(coder: coder)
|
|
commonInit()
|
|
}
|
|
|
|
override func layout() {
|
|
|
|
resizeSubviews(withOldSize: NSZeroSize)
|
|
}
|
|
|
|
private let kTextFieldOriginX: CGFloat = 4.0
|
|
private let kTextFieldMarginRight: CGFloat = 4.0
|
|
private let kUnreadCountMarginLeft: CGFloat = 4.0
|
|
private let kUnreadCountMarginRight: CGFloat = 4.0
|
|
|
|
override func resizeSubviews(withOldSize oldSize: NSSize) {
|
|
|
|
var r = textField!.frame
|
|
r.origin.x = kTextFieldOriginX
|
|
r.size.width = NSWidth(bounds) - (kTextFieldOriginX + kTextFieldMarginRight);
|
|
|
|
let unreadCountSize = unreadCountView.intrinsicContentSize
|
|
if unreadCountSize.width > 0.1 {
|
|
r.size.width = NSWidth(bounds) - (kTextFieldOriginX + kUnreadCountMarginLeft + unreadCountSize.width + kUnreadCountMarginRight)
|
|
}
|
|
|
|
let size = textField!.intrinsicContentSize
|
|
r.size.height = size.height
|
|
r = rs_rectCenteredVertically(r)
|
|
r.origin.y -= 1.0
|
|
|
|
textField?.rs_setFrameIfNotEqual(r)
|
|
|
|
layoutUnreadCountView(unreadCountSize)
|
|
}
|
|
|
|
private func layoutUnreadCountView(_ size: NSSize) {
|
|
|
|
if size == NSZeroSize {
|
|
if !unreadCountView.isHidden {
|
|
unreadCountView.isHidden = true
|
|
}
|
|
return
|
|
}
|
|
|
|
if unreadCountView.isHidden {
|
|
unreadCountView.isHidden = false
|
|
}
|
|
|
|
var r = NSZeroRect
|
|
r.size = size
|
|
r.origin.x = NSMaxX(textField!.frame) + kUnreadCountMarginLeft
|
|
r = rs_rectCenteredVertically(r)
|
|
|
|
unreadCountView.rs_setFrameIfNotEqual(r)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|