// // BottomItemCell.swift // PrivadoVPN // // Created by Murad Shabanov on 16.03.2022. // Copyright © 2022 Privado LLC. All rights reserved. // import Foundation final class BottomItemCell: View { // swiftlint:disable nesting private enum Constants { enum Color { } enum Geometry { } } // swiftlint:enable nesting private var line: View? private var iconView: NSImageView? // MARK: - Interface func update(with imageName: String, lineIsVisible: Bool, type: SideMenuItemType) { if lineIsVisible { let line = View() line.translatesAutoresizingMaskIntoConstraints = false line.viewBackgroundColor = NSColor(red: 130, green: 136, blue: 216) self.addSubview(line) self.line = line NSLayoutConstraint.activate([ line.heightAnchor.constraint(equalToConstant: 1), line.widthAnchor.constraint(equalToConstant: 40), line.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 10), line.topAnchor.constraint(equalTo: self.topAnchor) ]) } if let image = NSImage(named: imageName) { let tintedImage = image.imageWithTintColor(tintColor: NSColor(red: 147, green: 149, blue: 178)) let imageView = NSImageView(image: tintedImage) imageView.translatesAutoresizingMaskIntoConstraints = false self.addSubview(imageView) self.iconView = imageView NSLayoutConstraint.activate([ imageView.heightAnchor.constraint(equalToConstant: 20), imageView.widthAnchor.constraint(equalToConstant: 20), imageView.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20), imageView.centerYAnchor.constraint(equalTo: self.centerYAnchor) ]) } if case let .notification(unread: unread) = type { guard let imageView = iconView else { return } if unread { let circle = BellCircleView(frame: .zero) self.addSubview(circle) NSLayoutConstraint.activate([ circle.heightAnchor.constraint(equalToConstant: 5), circle.widthAnchor.constraint(equalToConstant: 5), circle.bottomAnchor.constraint(equalTo: imageView.topAnchor, constant: 8), circle.trailingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: -4.5) ]) } } } override init(frame frameRect: NSRect) { super.init(frame: frameRect) } init(frame frameRect: NSRect, lineIsVisible: Bool) { super.init(frame: frameRect) self.translatesAutoresizingMaskIntoConstraints = false } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: - Lifecycle View override func addSubviews() { self.viewBackgroundColor = .clear } override func addConstraints() { if let superView = self.superview { NSLayoutConstraint.activate([ self.leadingAnchor.constraint(equalTo: superView.leadingAnchor), self.trailingAnchor.constraint(equalTo: superView.trailingAnchor), self.topAnchor.constraint(equalTo: superView.topAnchor), self.bottomAnchor.constraint(equalTo: superView.bottomAnchor), ]) } } override func updateTrackingAreas() { super.updateTrackingAreas() for trackingArea in self.trackingAreas { self.removeTrackingArea(trackingArea) } let options: NSTrackingArea.Options = [.mouseEnteredAndExited, .activeAlways] let trackingArea = NSTrackingArea(rect: NSRect(x: 0, y: 0, width: 60, height: 50), options: options, owner: self, userInfo: nil) self.addTrackingArea(trackingArea) } override func onMouseHover(_ hover: Bool) { if let icon = self.iconView, let image = icon.image { image.isTemplate = true icon.image = hover ? image.imageWithTintColor(tintColor: .white) : image.imageWithTintColor(tintColor: NSColor(red: 147, green: 149, blue: 178)) } } override func mouseDown(with event: NSEvent) { super.mouseDown(with: event) print("mouse down cell") } }