diff --git a/Modules/Net/popup.swift b/Modules/Net/popup.swift index f126897c..a2e0326a 100644 --- a/Modules/Net/popup.swift +++ b/Modules/Net/popup.swift @@ -153,27 +153,48 @@ internal class Popup: NSStackView, Popup_p { } private func initDetails() -> NSView { - let height: CGFloat = 22*6 - let view: NSView = NSView(frame: NSRect(x: 0, y: 0, width: self.frame.width, height: height + Constants.Popup.separatorHeight)) - view.heightAnchor.constraint(equalToConstant: view.bounds.height).isActive = true + let view: NSView = NSView(frame: NSRect(x: 0, y: 0, width: self.frame.width, height: 0)) + let container: NSStackView = NSStackView(frame: NSRect(x: 0, y: 0, width: view.frame.width, height: 0)) + container.orientation = .vertical + container.spacing = 0 - let separator = SeparatorView(LocalizedString("Details"), origin: NSPoint(x: 0, y: height), width: self.frame.width) - let container: NSView = NSView(frame: NSRect(x: 0, y: 0, width: self.frame.width, height: separator.frame.origin.y)) + let row: NSView = NSView(frame: NSRect(x: 0, y: 0, width: view.frame.width, height: Constants.Popup.separatorHeight)) + + let button = NSButtonWithPadding() + button.frame = CGRect(x: view.frame.width - 18, y: 6, width: 18, height: 18) + button.bezelStyle = .regularSquare + button.isBordered = false + button.imageScaling = NSImageScaling.scaleAxesIndependently + button.contentTintColor = .lightGray + button.action = #selector(self.resetTotalNetworkUsage) + button.target = self + button.toolTip = LocalizedString("Reset") + button.image = Bundle(for: Module.self).image(forResource: "refresh")! + + row.addSubview(SeparatorView(LocalizedString("Details"), origin: NSPoint(x: 0, y: 0), width: self.frame.width)) + row.addSubview(button) + + container.addArrangedSubview(row) self.totalUploadField = PopupWithColorRow(container, color: NSColor.systemRed, n: 5, title: "\(LocalizedString("Total upload")):", value: "0") self.totalDownloadField = PopupWithColorRow(container, color: NSColor.systemBlue, n: 4, title: "\(LocalizedString("Total download")):", value: "0") - + self.interfaceField = PopupRow(container, n: 3, title: "\(LocalizedString("Interface")):", value: LocalizedString("Unknown")).1 self.ssidField = PopupRow(container, n: 2, title: "\(LocalizedString("Network")):", value: LocalizedString("Unknown")).1 self.macAdressField = PopupRow(container, n: 1, title: "\(LocalizedString("Physical address")):", value: LocalizedString("Unknown")).1 self.localIPField = PopupRow(container, n: 0, title: "\(LocalizedString("Local IP")):", value: LocalizedString("Unknown")).1 - + self.localIPField?.isSelectable = true self.macAdressField?.isSelectable = true - view.addSubview(separator) view.addSubview(container) + let h = container.arrangedSubviews.map({ $0.bounds.height }).reduce(0, +) + view.setFrameSize(NSSize(width: self.frame.width, height: h)) + container.setFrameSize(NSSize(width: self.frame.width, height: view.bounds.height)) + view.heightAnchor.constraint(equalToConstant: view.bounds.height).isActive = true + container.heightAnchor.constraint(equalToConstant: view.bounds.height).isActive = true + return view } @@ -431,6 +452,10 @@ internal class Popup: NSStackView, Popup_p { @objc private func refreshPublicIP() { NotificationCenter.default.post(name: .refreshPublicIP, object: nil, userInfo: nil) } + + @objc private func resetTotalNetworkUsage() { + NotificationCenter.default.post(name: .resetTotalNetworkUsage, object: nil, userInfo: nil) + } } public class NetworkProcessView: NSView { diff --git a/Modules/Net/readers.swift b/Modules/Net/readers.swift index bb92fe7c..3d9efdb3 100644 --- a/Modules/Net/readers.swift +++ b/Modules/Net/readers.swift @@ -72,6 +72,7 @@ internal class UsageReader: Reader { } NotificationCenter.default.addObserver(self, selector: #selector(refreshPublicIP), name: .refreshPublicIP, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(resetTotalNetworkUsage), name: .resetTotalNetworkUsage, object: nil) } public override func read() { @@ -276,6 +277,10 @@ internal class UsageReader: Reader { self.getPublicIP() } } + + @objc func resetTotalNetworkUsage() { + self.usage.total = (0, 0) + } } public class ProcessReader: Reader<[Network_Process]> { diff --git a/Stats/Supporting Files/Info.plist b/Stats/Supporting Files/Info.plist index 6d2ee1ca..40bc94c2 100755 --- a/Stats/Supporting Files/Info.plist +++ b/Stats/Supporting Files/Info.plist @@ -17,7 +17,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 243 + 247 Description Simple macOS system monitor in your menu bar LSApplicationCategoryType diff --git a/Stats/Supporting Files/bg.lproj/Localizable.strings b/Stats/Supporting Files/bg.lproj/Localizable.strings index e00b5421..6b8b89f7 100644 --- a/Stats/Supporting Files/bg.lproj/Localizable.strings +++ b/Stats/Supporting Files/bg.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Статистика"; "Max" = "Макс."; "Min" = "Мин."; +"Reset" = "Reset"; // Alerts "New version available" = "Налична е нова версия"; diff --git a/Stats/Supporting Files/cs.lproj/Localizable.strings b/Stats/Supporting Files/cs.lproj/Localizable.strings index 0f1f93e8..b46df0bc 100644 --- a/Stats/Supporting Files/cs.lproj/Localizable.strings +++ b/Stats/Supporting Files/cs.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statistiky"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Nová verze k dispozici"; diff --git a/Stats/Supporting Files/de.lproj/Localizable.strings b/Stats/Supporting Files/de.lproj/Localizable.strings index c76b822f..f0a43d32 100644 --- a/Stats/Supporting Files/de.lproj/Localizable.strings +++ b/Stats/Supporting Files/de.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statistiken"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Neue Version verfügbar"; diff --git a/Stats/Supporting Files/en.lproj/Localizable.strings b/Stats/Supporting Files/en.lproj/Localizable.strings index f03d38ed..d9c8da67 100644 --- a/Stats/Supporting Files/en.lproj/Localizable.strings +++ b/Stats/Supporting Files/en.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statistics"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "New version available"; diff --git a/Stats/Supporting Files/es.lproj/Localizable.strings b/Stats/Supporting Files/es.lproj/Localizable.strings index 0622dd54..329fde00 100644 --- a/Stats/Supporting Files/es.lproj/Localizable.strings +++ b/Stats/Supporting Files/es.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Estadísticas"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Nueva versión disponible"; diff --git a/Stats/Supporting Files/fr.lproj/Localizable.strings b/Stats/Supporting Files/fr.lproj/Localizable.strings index ae2fc2eb..820ed08a 100644 --- a/Stats/Supporting Files/fr.lproj/Localizable.strings +++ b/Stats/Supporting Files/fr.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statistiques"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Nouvelle version disponible"; diff --git a/Stats/Supporting Files/hu.lproj/Localizable.strings b/Stats/Supporting Files/hu.lproj/Localizable.strings index c0f8beec..b4a78241 100644 --- a/Stats/Supporting Files/hu.lproj/Localizable.strings +++ b/Stats/Supporting Files/hu.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statisztikák"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Új verzió érhető el"; diff --git a/Stats/Supporting Files/it.lproj/Localizable.strings b/Stats/Supporting Files/it.lproj/Localizable.strings index b3d36e5c..3b6ec821 100644 --- a/Stats/Supporting Files/it.lproj/Localizable.strings +++ b/Stats/Supporting Files/it.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statistiche"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Nuova versione disponibile"; diff --git a/Stats/Supporting Files/ja.lproj/Localizable.strings b/Stats/Supporting Files/ja.lproj/Localizable.strings index c4a3375b..ab4a4f29 100644 --- a/Stats/Supporting Files/ja.lproj/Localizable.strings +++ b/Stats/Supporting Files/ja.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "統計"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "新しいバージョンが利用可能です"; diff --git a/Stats/Supporting Files/ko.lproj/Localizable.strings b/Stats/Supporting Files/ko.lproj/Localizable.strings index bfa53e66..28a04253 100644 --- a/Stats/Supporting Files/ko.lproj/Localizable.strings +++ b/Stats/Supporting Files/ko.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "통계"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "새로운 버전을 이용할 수 있습니다"; diff --git a/Stats/Supporting Files/nb.lproj/Localizable.strings b/Stats/Supporting Files/nb.lproj/Localizable.strings index 271e4f19..2140672f 100644 --- a/Stats/Supporting Files/nb.lproj/Localizable.strings +++ b/Stats/Supporting Files/nb.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statistikk"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Ny versjon tilgjengelig"; diff --git a/Stats/Supporting Files/nl.lproj/Localizable.strings b/Stats/Supporting Files/nl.lproj/Localizable.strings index a8443b61..a92e471c 100644 --- a/Stats/Supporting Files/nl.lproj/Localizable.strings +++ b/Stats/Supporting Files/nl.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statistieken"; "Max" = "Maximaal"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Nieuwe versie beschikbaar"; diff --git a/Stats/Supporting Files/pl.lproj/Localizable.strings b/Stats/Supporting Files/pl.lproj/Localizable.strings index e5dc1796..5a50bafa 100644 --- a/Stats/Supporting Files/pl.lproj/Localizable.strings +++ b/Stats/Supporting Files/pl.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statystyki"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Zresetować"; // Alerts "New version available" = "Nowa wersja dostępna"; diff --git a/Stats/Supporting Files/pt-BR.lproj/Localizable.strings b/Stats/Supporting Files/pt-BR.lproj/Localizable.strings index 07796949..0e9fbc2e 100644 --- a/Stats/Supporting Files/pt-BR.lproj/Localizable.strings +++ b/Stats/Supporting Files/pt-BR.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Estatísticas"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Nova versão disponível"; diff --git a/Stats/Supporting Files/pt-PT.lproj/Localizable.strings b/Stats/Supporting Files/pt-PT.lproj/Localizable.strings index aba0c13b..61e5ec32 100644 --- a/Stats/Supporting Files/pt-PT.lproj/Localizable.strings +++ b/Stats/Supporting Files/pt-PT.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Estatísticas"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Nova versão disponível"; diff --git a/Stats/Supporting Files/ro.lproj/Localizable.strings b/Stats/Supporting Files/ro.lproj/Localizable.strings index 9e5de1c6..6905705a 100644 --- a/Stats/Supporting Files/ro.lproj/Localizable.strings +++ b/Stats/Supporting Files/ro.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Statistici"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Versiune nouă disponibilă"; diff --git a/Stats/Supporting Files/ru.lproj/Localizable.strings b/Stats/Supporting Files/ru.lproj/Localizable.strings index 99b9c371..8ab516c7 100644 --- a/Stats/Supporting Files/ru.lproj/Localizable.strings +++ b/Stats/Supporting Files/ru.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Статистика"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Сбросить"; // Alerts "New version available" = "Доступна новая версия"; diff --git a/Stats/Supporting Files/tr.lproj/Localizable.strings b/Stats/Supporting Files/tr.lproj/Localizable.strings index 9b552f08..52ee01a7 100644 --- a/Stats/Supporting Files/tr.lproj/Localizable.strings +++ b/Stats/Supporting Files/tr.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "İstatistik"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Reset"; // Alerts "New version available" = "Yeni versiyon indirilebilir"; diff --git a/Stats/Supporting Files/uk.lproj/Localizable.strings b/Stats/Supporting Files/uk.lproj/Localizable.strings index 28c68bbc..158efbb5 100644 --- a/Stats/Supporting Files/uk.lproj/Localizable.strings +++ b/Stats/Supporting Files/uk.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Статистика"; "Max" = "Max"; "Min" = "Min"; +"Reset" = "Скинути"; // Alerts "New version available" = "Доступна нова версія"; diff --git a/Stats/Supporting Files/vi.lproj/Localizable.strings b/Stats/Supporting Files/vi.lproj/Localizable.strings index d53a2edc..b3320ba7 100644 --- a/Stats/Supporting Files/vi.lproj/Localizable.strings +++ b/Stats/Supporting Files/vi.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "Số liệu thống kê"; "Max" = "Tối đa"; "Min" = "Tối thiểu"; +"Reset" = "Reset"; // Alerts "New version available" = "Phiên bản mới có sẵn"; diff --git a/Stats/Supporting Files/zh-Hans.lproj/Localizable.strings b/Stats/Supporting Files/zh-Hans.lproj/Localizable.strings index 0fc4685d..d8aa3273 100644 --- a/Stats/Supporting Files/zh-Hans.lproj/Localizable.strings +++ b/Stats/Supporting Files/zh-Hans.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "统计"; "Max" = "最大"; "Min" = "最小"; +"Reset" = "Reset"; // Alerts "New version available" = "新版本可用"; diff --git a/Stats/Supporting Files/zh-Hant.lproj/Localizable.strings b/Stats/Supporting Files/zh-Hant.lproj/Localizable.strings index b50fed08..a47e0d27 100644 --- a/Stats/Supporting Files/zh-Hant.lproj/Localizable.strings +++ b/Stats/Supporting Files/zh-Hant.lproj/Localizable.strings @@ -34,6 +34,7 @@ "Statistics" = "統計資料"; "Max" = "最大值"; "Min" = "最小值"; +"Reset" = "Reset"; // Alerts "New version available" = "有新版本可用"; diff --git a/StatsKit/helpers.swift b/StatsKit/helpers.swift index 28fede8f..7716333e 100644 --- a/StatsKit/helpers.swift +++ b/StatsKit/helpers.swift @@ -254,7 +254,13 @@ public func PopupWithColorRow(_ view: NSView, color: NSColor, n: CGFloat, title: rowView.addSubview(colorView) rowView.addSubview(labelView) rowView.addSubview(valueView) - view.addSubview(rowView) + + if let view = view as? NSStackView { + rowView.heightAnchor.constraint(equalToConstant: rowView.bounds.height).isActive = true + view.addArrangedSubview(rowView) + } else { + view.addSubview(rowView) + } return valueView } diff --git a/StatsKit/types.swift b/StatsKit/types.swift index 7c2d5fe8..12cacdb6 100644 --- a/StatsKit/types.swift +++ b/StatsKit/types.swift @@ -165,4 +165,5 @@ public extension Notification.Name { static let changeCronInterval = Notification.Name("changeCronInterval") static let clickInSettings = Notification.Name("clickInSettings") static let refreshPublicIP = Notification.Name("refreshPublicIP") + static let resetTotalNetworkUsage = Notification.Name("resetTotalNetworkUsage") }