diff --git a/Kit/helpers.swift b/Kit/helpers.swift index 1d3653c5..4a1ee6b4 100644 --- a/Kit/helpers.swift +++ b/Kit/helpers.swift @@ -356,7 +356,7 @@ public func popupRow(_ view: NSView, title: String, value: String) -> (LabelFiel return (labelView, valueView, rowView) } -public func portalRow(_ v: NSStackView, title: String, value: String = "", isSelectable: Bool = false) -> ValueField { +public func portalRow(_ v: NSStackView, title: String, value: String = "", isSelectable: Bool = false) -> (LabelField, ValueField, NSStackView) { let view: NSStackView = NSStackView() view.orientation = .horizontal view.distribution = .fillProportionally @@ -377,7 +377,7 @@ public func portalRow(_ v: NSStackView, title: String, value: String = "", isSel view.widthAnchor.constraint(equalTo: v.widthAnchor).isActive = true - return valueView + return (labelView, valueView, view) } public func popupWithColorRow(_ view: NSView, color: NSColor, title: String, value: String) -> (NSView, LabelField, ValueField) { diff --git a/Modules/Disk/portal.swift b/Modules/Disk/portal.swift index 89d3514e..79244223 100644 --- a/Modules/Disk/portal.swift +++ b/Modules/Disk/portal.swift @@ -87,9 +87,9 @@ public class Portal: PortalWrapper { view.distribution = .fillEqually view.spacing = Constants.Popup.spacing*2 - self.nameField = portalRow(view, title: "\(localizedString("Name")):") - self.usedField = portalRow(view, title: "\(localizedString("Used")):") - self.freeField = portalRow(view, title: "\(localizedString("Free")):") + self.nameField = portalRow(view, title: "\(localizedString("Name")):").1 + self.usedField = portalRow(view, title: "\(localizedString("Used")):").1 + self.freeField = portalRow(view, title: "\(localizedString("Free")):").1 let chart = NetworkChartView(frame: NSRect.zero, num: 120, minMax: false, outColor: self.writeColor, inColor: self.readColor) chart.heightAnchor.constraint(equalToConstant: 26).isActive = true diff --git a/Modules/GPU/portal.swift b/Modules/GPU/portal.swift index 2721d5c9..2aa52ff7 100644 --- a/Modules/GPU/portal.swift +++ b/Modules/GPU/portal.swift @@ -70,9 +70,9 @@ public class Portal: PortalWrapper { view.distribution = .fillEqually view.spacing = Constants.Popup.spacing*2 - self.usageField = portalRow(view, title: "\(localizedString("Usage")):") - self.renderField = portalRow(view, title: "\(localizedString("Render")):") - self.tilerField = portalRow(view, title: "\(localizedString("Tiler")):") + self.usageField = portalRow(view, title: "\(localizedString("Usage")):").1 + self.renderField = portalRow(view, title: "\(localizedString("Render")):").1 + self.tilerField = portalRow(view, title: "\(localizedString("Tiler")):").1 return view } diff --git a/Modules/Net/portal.swift b/Modules/Net/portal.swift index 7fbf62f0..520b6399 100644 --- a/Modules/Net/portal.swift +++ b/Modules/Net/portal.swift @@ -16,6 +16,9 @@ public class Portal: PortalWrapper { private var chart: NetworkChartView? = nil private var publicIPField: NSTextField? = nil + private var publicIPView: NSView? = nil + private var localIPField: NSTextField? = nil + private var localIPView: NSView? = nil private var base: DataSizeBase { DataSizeBase(rawValue: Store.shared.string(key: "\(self.name)_base", defaultValue: "byte")) ?? .byte @@ -32,6 +35,9 @@ public class Portal: PortalWrapper { private var chartFixedScaleSize: SizeUnit { SizeUnit.fromString(Store.shared.string(key: "\(self.name)_chartFixedScaleSize", defaultValue: SizeUnit.MB.key)) } + private var publicIPState: Bool { + Store.shared.bool(key: "\(self.name)_publicIP", defaultValue: true) + } private var downloadColor: NSColor { let v = SColor.fromString(Store.shared.string(key: "\(self.name)_downloadColor", defaultValue: SColor.secondBlue.key)) @@ -82,8 +88,17 @@ public class Portal: PortalWrapper { self.chart = chart view.addArrangedSubview(container) - self.publicIPField = portalRow(view, title: "\(localizedString("Public IP")):", value: localizedString("Unknown"), isSelectable: true) - view.subviews.last?.heightAnchor.constraint(equalToConstant: 16).isActive = true + let publicIP = portalRow(view, title: "\(localizedString("Public IP")):", value: localizedString("Unknown"), isSelectable: true) + self.publicIPField = publicIP.1 + self.publicIPView = publicIP.2 + self.publicIPView?.isHidden = !self.publicIPState + self.publicIPView?.heightAnchor.constraint(equalToConstant: 16).isActive = true + + let localIP = portalRow(view, title: "\(localizedString("Local IP")):", value: localizedString("Unknown"), isSelectable: true) + self.localIPField = localIP.1 + self.localIPView = localIP.2 + self.localIPView?.isHidden = self.publicIPState + self.localIPView?.heightAnchor.constraint(equalToConstant: 16).isActive = true self.addArrangedSubview(view) } @@ -99,6 +114,14 @@ public class Portal: PortalWrapper { chart.setColors(in: self.downloadColor, out: self.uploadColor) } + if self.publicIPState, let view = self.publicIPView, view.isHidden { + self.publicIPView?.isHidden = false + self.localIPView?.isHidden = true + } else if !self.publicIPState, let view = self.publicIPView, !view.isHidden { + self.publicIPView?.isHidden = true + self.localIPView?.isHidden = false + } + if let view = self.publicIPField, view.stringValue != value.raddr.v4 { if let addr = value.raddr.v4 { view.stringValue = (value.wifiDetails.countryCode != nil) ? "\(addr) (\(value.wifiDetails.countryCode!))" : addr @@ -111,6 +134,10 @@ public class Portal: PortalWrapper { view.toolTip = "\("\(localizedString("v6")):") \(localizedString("Unknown"))" } } + + if self.localIPField?.stringValue != value.laddr { + self.localIPField?.stringValue = value.laddr ?? localizedString("Unknown") + } }) } } diff --git a/Modules/RAM/portal.swift b/Modules/RAM/portal.swift index cc2c202c..7a15ab74 100644 --- a/Modules/RAM/portal.swift +++ b/Modules/RAM/portal.swift @@ -89,10 +89,10 @@ public class Portal: PortalWrapper { view.distribution = .fillEqually view.spacing = Constants.Popup.spacing*2 - self.usedField = portalRow(view, title: "\(localizedString("Used")):") - self.freeField = portalRow(view, title: "\(localizedString("Free")):") - self.swapField = portalRow(view, title: "\(localizedString("Swap")):") - self.pressureLevelField = portalRow(view, title: "\(localizedString("Memory pressure")):") + self.usedField = portalRow(view, title: "\(localizedString("Used")):").1 + self.freeField = portalRow(view, title: "\(localizedString("Free")):").1 + self.swapField = portalRow(view, title: "\(localizedString("Swap")):").1 + self.pressureLevelField = portalRow(view, title: "\(localizedString("Memory pressure")):").1 return view }