From 225aed962d08ff74cd2cc748f06ddf73638fa5e7 Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Tue, 30 Jun 2020 18:15:14 +0200 Subject: [PATCH] - add option to copy network values (public IP, local IP, network name, and physical address) - small fix --- Modules/Net/popup.swift | 53 ++++++++++++++++++++++++++++++++++++--- StatsKit/extensions.swift | 2 +- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/Modules/Net/popup.swift b/Modules/Net/popup.swift index 49bd086f..689a5e2d 100644 --- a/Modules/Net/popup.swift +++ b/Modules/Net/popup.swift @@ -29,10 +29,10 @@ internal class Popup: NSView { private var downloadValueField: NSTextField? = nil private var downloadUnitField: NSTextField? = nil - private var publicIPField: NSTextField? = nil - private var localIPField: NSTextField? = nil - private var networkTypeField: NSTextField? = nil - private var macAdressField: NSTextField? = nil + private var publicIPField: ValueField? = nil + private var localIPField: ValueField? = nil + private var networkTypeField: ValueField? = nil + private var macAdressField: ValueField? = nil private var initialized: Bool = false @@ -142,6 +142,16 @@ internal class Popup: NSView { self.networkTypeField = PopupRow(view, n: 1, title: "Network:", value: "") self.macAdressField = PopupRow(view, n: 0, title: "Physical address:", value: "") + self.publicIPField?.addTracking() + self.localIPField?.addTracking() + self.networkTypeField?.addTracking() + self.macAdressField?.addTracking() + + self.publicIPField?.isSelectable = true + self.localIPField?.isSelectable = true + self.networkTypeField?.isSelectable = true + self.macAdressField?.isSelectable = true + self.addSubview(view) } @@ -168,6 +178,8 @@ internal class Popup: NSView { publicIP = "\(publicIP) (\(value.countryCode!))" } self.publicIPField?.stringValue = publicIP + } else { + self.publicIPField?.stringValue = "Unknown" } if value.laddr != nil && self.localIPField?.stringValue != value.laddr { self.localIPField?.stringValue = value.laddr! @@ -193,3 +205,36 @@ internal class Popup: NSView { }) } } + +extension ValueField { + func addTracking() { + let rect = NSRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height) + let trackingArea = NSTrackingArea(rect: rect, options: [NSTrackingArea.Options.activeAlways, NSTrackingArea.Options.mouseEnteredAndExited, NSTrackingArea.Options.activeInActiveApp], owner: self, userInfo: nil) + self.addTrackingArea(trackingArea) + } + + public override func mouseEntered(with: NSEvent) { + guard self.stringValue != "No connection" && self.stringValue != "Unknown" else { + return + } + + NSCursor.pointingHand.set() + } + + public override func mouseExited(with: NSEvent) { + NSCursor.arrow.set() + } + + public override func mouseDown(with: NSEvent) { + guard self.stringValue != "No connection" && self.stringValue != "Unknown" else { + return + } + + let arr = self.stringValue.split(separator: " ") + let value: String = arr.count > 0 ? String(arr[0]) : self.stringValue + + let pasteboard = NSPasteboard.general + pasteboard.declareTypes([.string], owner: nil) + pasteboard.setString(value, forType: .string) + } +} diff --git a/StatsKit/extensions.swift b/StatsKit/extensions.swift index 11649ae9..afc50298 100644 --- a/StatsKit/extensions.swift +++ b/StatsKit/extensions.swift @@ -532,7 +532,7 @@ public func SeparatorView(_ title: String, origin: NSPoint, width: CGFloat) -> N return view } -public func PopupRow(_ view: NSView, n: CGFloat, title: String, value: String) -> NSTextField { +public func PopupRow(_ view: NSView, n: CGFloat, title: String, value: String) -> ValueField { let rowView: NSView = NSView(frame: NSRect(x: 0, y: 22*n, width: view.frame.width, height: 22)) let labelWidth = title.widthOfString(usingFont: .systemFont(ofSize: 13, weight: .regular)) + 5