// // Stats.swift // Stats // // Created by Serhiy Mytrovtsiy on 24/12/2020. // Using Swift 5.0. // Running on macOS 10.15. // // Copyright © 2020 Serhiy Mytrovtsiy. All rights reserved. // import Cocoa import Kit class Dashboard: NSStackView { private var processorValue: String { guard let cpu = SystemKit.shared.device.info.cpu, cpu.name != nil || cpu.physicalCores != nil || cpu.logicalCores != nil else { return localizedString("Unknown") } var value = "" if let name = cpu.name { value += name } if cpu.physicalCores != nil || cpu.logicalCores != nil { if !value.isEmpty { value += "\n" } var mini = "" if let cores = cpu.physicalCores { mini += localizedString("Number of cores", "\(cores)") } if let threads = cpu.logicalCores { if mini != "" { mini += ", " } mini += localizedString("Number of threads", "\(threads)") } value += "\(mini)" } if cpu.eCores != nil || cpu.pCores != nil { if !value.isEmpty { value += "\n" } var mini = "" if let eCores = cpu.eCores { mini += localizedString("Number of e-cores", "\(eCores)") } if let pCores = cpu.pCores { if mini != "" { mini += "\n" } mini += localizedString("Number of p-cores", "\(pCores)") } value += "\(mini)" } return value } private var memoryValue: String { guard let dimms = SystemKit.shared.device.info.ram?.dimms else { return localizedString("Unknown") } let sizeFormatter = ByteCountFormatter() sizeFormatter.allowedUnits = [.useGB] sizeFormatter.countStyle = .memory var value = "" for i in 0.. NSView { let container: NSGridView = NSGridView() container.rowSpacing = 0 container.yPlacement = .center container.xPlacement = .center let deviceImageView: NSImageView = NSImageView(image: SystemKit.shared.device.model.icon) deviceImageView.widthAnchor.constraint(equalToConstant: 140).isActive = true deviceImageView.heightAnchor.constraint(equalToConstant: 140).isActive = true let deviceNameField: NSTextField = TextView() deviceNameField.alignment = .center deviceNameField.font = NSFont.systemFont(ofSize: 17, weight: .semibold) deviceNameField.stringValue = SystemKit.shared.device.model.name deviceNameField.isSelectable = true deviceNameField.toolTip = SystemKit.shared.device.model.id let osField: NSTextField = TextView() osField.alignment = .center osField.font = NSFont.systemFont(ofSize: 12, weight: .regular) osField.stringValue = "macOS \(SystemKit.shared.device.os?.name ?? localizedString("Unknown")) (\(SystemKit.shared.device.os?.version.getFullVersion() ?? ""))" osField.toolTip = SystemKit.shared.device.os?.build ?? localizedString("Unknown") osField.isSelectable = true container.addRow(with: [deviceImageView]) container.addRow(with: [deviceNameField]) container.addRow(with: [osField]) container.row(at: 1).height = 22 container.row(at: 2).height = 20 return container } @objc private func windowOpens(_ notification: Notification) { guard let moduleName = notification.userInfo?["module"] as? String, moduleName == "Dashboard" || moduleName == "Combined modules" else { return } self.uptimeField?.stringValue = self.uptimeValue } }