- add option to select the network reader (interface based or process based)

- small refactoring in Network reader
This commit is contained in:
Serhiy Mytrovtsiy
2020-11-27 18:11:14 +01:00
parent 6b58302089
commit 19e20ea063
20 changed files with 188 additions and 117 deletions

View File

@@ -16,6 +16,7 @@ import SystemConfiguration
internal class Settings: NSView, Settings_v {
private var numberOfProcesses: Int = 8
private var readerType: String = "interface"
public var callback: (() -> Void) = {}
public var callbackWhenUpdateNumberOfProcesses: (() -> Void) = {}
@@ -30,6 +31,7 @@ internal class Settings: NSView, Settings_v {
self.title = title
self.store = store
self.numberOfProcesses = store.pointee.int(key: "\(self.title)_processes", defaultValue: self.numberOfProcesses)
self.readerType = store.pointee.string(key: "\(self.title)_reader", defaultValue: self.readerType)
super.init(frame: CGRect(
x: 0,
@@ -56,22 +58,30 @@ internal class Settings: NSView, Settings_v {
self.subviews.forEach{ $0.removeFromSuperview() }
let rowHeight: CGFloat = 30
let num: CGFloat = 1
self.addNetworkSelector()
let num: CGFloat = 2
self.addSubview(SelectTitleRow(
frame: NSRect(x: Constants.Settings.margin, y: rowHeight + (Constants.Settings.margin*2), width: self.frame.width - (Constants.Settings.margin*2), height: 30),
frame: NSRect(x: Constants.Settings.margin, y: Constants.Settings.margin + (rowHeight + Constants.Settings.margin) * 2, width: self.frame.width - (Constants.Settings.margin*2), height: 30),
title: LocalizedString("Number of top processes"),
action: #selector(changeNumberOfProcesses),
items: NumbersOfProcesses.map{ "\($0)" },
selected: "\(self.numberOfProcesses)"
))
self.addSubview(SelectRow(
frame: NSRect(x: Constants.Settings.margin, y: Constants.Settings.margin + (rowHeight + Constants.Settings.margin) * 1, width: self.frame.width - (Constants.Settings.margin*2), height: 30),
title: LocalizedString("Reader type"),
action: #selector(changeReaderType),
items: NetworkReaders,
selected: self.readerType
))
self.addInterfaceSelector()
self.setFrameSize(NSSize(width: self.frame.width, height: (rowHeight*(num+1)) + (Constants.Settings.margin*(2+num))))
}
private func addNetworkSelector() {
private func addInterfaceSelector() {
let view: NSView = NSView(frame: NSRect(x: Constants.Settings.margin, y: Constants.Settings.margin, width: self.frame.width, height: 30))
let rowTitle: NSTextField = LabelField(frame: NSRect(x: 0, y: (view.frame.height - 16)/2, width: view.frame.width - 52, height: 17), LocalizedString("Network interface"))
@@ -79,8 +89,9 @@ internal class Settings: NSView, Settings_v {
rowTitle.textColor = .textColor
self.button = NSPopUpButton(frame: NSRect(x: view.frame.width - 200 - Constants.Settings.margin*2, y: 0, width: 200, height: 30))
self.button!.target = self
self.button?.target = self
self.button?.action = #selector(self.handleSelection)
self.button?.isEnabled = self.readerType == "interface"
let selectedInterface = self.store.pointee.string(key: "\(self.title)_interface", defaultValue: "")
let menu = NSMenu()
@@ -130,4 +141,13 @@ internal class Settings: NSView, Settings_v {
self.callbackWhenUpdateNumberOfProcesses()
}
}
@objc private func changeReaderType(_ sender: NSMenuItem) {
guard let key = sender.representedObject as? String else {
return
}
self.readerType = key
self.store.pointee.set(key: "\(self.title)_reader", value: key)
self.button?.isEnabled = self.readerType == "interface"
}
}