diff options
author | Roopesh Chander <roop@roopc.net> | 2019-01-05 18:24:45 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2019-01-14 14:52:33 +0530 |
commit | f3c29042418942f9e07281aefbc67360ebc4366f (patch) | |
tree | 14eda4b4b07dee8eb75b47afc3f64b850055458f /WireGuard/WireGuard/UI/macOS/ViewController/NoTunnelsDetailViewController.swift | |
parent | macOS: Present tunnel activation errors from the window when possible (diff) | |
download | wireguard-apple-f3c29042418942f9e07281aefbc67360ebc4366f.tar.xz wireguard-apple-f3c29042418942f9e07281aefbc67360ebc4366f.zip |
macOS: Manage tunnels: Handle the case when there are no tunnels
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to '')
-rw-r--r-- | WireGuard/WireGuard/UI/macOS/ViewController/NoTunnelsDetailViewController.swift | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/NoTunnelsDetailViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/NoTunnelsDetailViewController.swift new file mode 100644 index 0000000..059403a --- /dev/null +++ b/WireGuard/WireGuard/UI/macOS/ViewController/NoTunnelsDetailViewController.swift @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +// Copyright © 2018 WireGuard LLC. All Rights Reserved. + +import Cocoa + +class NoTunnelsDetailViewController: NSViewController { + + let tunnelsManager: TunnelsManager + + let importButton: NSButton = { + let button = NSButton() + button.title = tr("macButtonImportTunnels") + button.setButtonType(.momentaryPushIn) + button.bezelStyle = .rounded + return button + }() + + init(tunnelsManager: TunnelsManager) { + self.tunnelsManager = tunnelsManager + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func loadView() { + let view = NSView() + + importButton.target = self + importButton.action = #selector(importTunnelClicked) + + view.addSubview(importButton) + importButton.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + importButton.centerXAnchor.constraint(equalTo: view.centerXAnchor), + importButton.centerYAnchor.constraint(equalTo: view.centerYAnchor) + ]) + self.view = view + } + + @objc func importTunnelClicked() { + guard let window = view.window else { return } + let openPanel = NSOpenPanel() + openPanel.allowedFileTypes = ["conf", "zip"] + openPanel.beginSheetModal(for: window) { [weak tunnelsManager] response in + guard let tunnelsManager = tunnelsManager else { return } + guard response == .OK else { return } + guard let url = openPanel.url else { return } + TunnelImporter.importFromFile(url: url, into: tunnelsManager, sourceVC: nil, errorPresenterType: ErrorPresenter.self) + } + } +} |