diff --git a/Kit/extensions.swift b/Kit/extensions.swift index 6370dbe9..0c2d7466 100644 --- a/Kit/extensions.swift +++ b/Kit/extensions.swift @@ -361,6 +361,46 @@ public extension NSView { return view } + func fieldSettingRow(_ sender: NSTextFieldDelegate, title: String, value: String, placeholder: String? = nil, width: CGFloat = 200) -> NSView { + let view: NSStackView = NSStackView() + view.translatesAutoresizingMaskIntoConstraints = false + view.heightAnchor.constraint(equalToConstant: Constants.Settings.row).isActive = true + view.orientation = .horizontal + view.alignment = .centerY + view.distribution = .fill + view.spacing = 0 + + let titleField: NSTextField = LabelField(frame: NSRect.zero, title) + titleField.font = NSFont.systemFont(ofSize: 12, weight: .regular) + titleField.textColor = .textColor + + let valueField: NSTextField = NSTextField() + valueField.font = NSFont.systemFont(ofSize: 12, weight: .regular) + valueField.textColor = .textColor + valueField.isEditable = true + valueField.isSelectable = true + valueField.isBezeled = false + valueField.wantsLayer = true + valueField.canDrawSubviewsIntoLayer = true + valueField.usesSingleLineMode = true + valueField.maximumNumberOfLines = 1 + valueField.focusRingType = .none + valueField.stringValue = value + valueField.delegate = sender + if let placeholder { + valueField.placeholderString = placeholder + } + valueField.alignment = .natural + + view.addArrangedSubview(titleField) + view.addArrangedSubview(NSView()) + view.addArrangedSubview(valueField) + + valueField.widthAnchor.constraint(equalToConstant: width).isActive = true + + return view + } + func selectView(action: Selector, items: [KeyValue_p], selected: String) -> NSPopUpButton { let select: NSPopUpButton = NSPopUpButton(frame: NSRect(x: 0, y: 0, width: 50, height: 28)) select.target = self diff --git a/Modules/Net/settings.swift b/Modules/Net/settings.swift index a425ad80..6d7710e4 100644 --- a/Modules/Net/settings.swift +++ b/Modules/Net/settings.swift @@ -118,7 +118,12 @@ internal class Settings: NSStackView, Settings_v, NSTextFieldDelegate { )) } - self.addArrangedSubview(self.connectivityHost()) + self.addArrangedSubview(fieldSettingRow(self, + title: localizedString("Connectivity host (ICMP)"), + value: self.ICMPHost, + placeholder: localizedString("Leave empty to disable the check"), + width: 220 + )) } private func interfaceSelector() -> NSView { @@ -222,44 +227,6 @@ internal class Settings: NSStackView, Settings_v, NSTextFieldDelegate { return view } - func connectivityHost() -> NSView { - let view: NSStackView = NSStackView() - view.translatesAutoresizingMaskIntoConstraints = false - view.heightAnchor.constraint(equalToConstant: Constants.Settings.row).isActive = true - view.orientation = .horizontal - view.alignment = .centerY - view.distribution = .fill - view.spacing = 0 - - let titleField: NSTextField = LabelField(frame: NSRect(x: 0, y: 0, width: 0, height: 0), localizedString("Connectivity host (ICMP)")) - titleField.font = NSFont.systemFont(ofSize: 12, weight: .regular) - titleField.textColor = .textColor - - let valueField: NSTextField = NSTextField() - valueField.font = NSFont.systemFont(ofSize: 12, weight: .regular) - valueField.textColor = .textColor - valueField.isEditable = true - valueField.isSelectable = true - valueField.isBezeled = false - valueField.wantsLayer = true - valueField.canDrawSubviewsIntoLayer = true - valueField.usesSingleLineMode = true - valueField.maximumNumberOfLines = 1 - valueField.focusRingType = .none - valueField.delegate = self - valueField.stringValue = self.ICMPHost - valueField.placeholderString = localizedString("Leave empty to disable the check") - valueField.alignment = .natural - - view.addArrangedSubview(titleField) - view.addArrangedSubview(NSView()) - view.addArrangedSubview(valueField) - - valueField.widthAnchor.constraint(equalToConstant: 200).isActive = true - - return view - } - @objc func handleSelection(_ sender: NSPopUpButton) { guard let item = sender.selectedItem, let id = item.identifier?.rawValue else { return }