From dfc4b37518144f711aaab8e92e316e0ba87c6460 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Fri, 4 Jan 2019 18:33:46 +0530 Subject: [PATCH] macOS: Manage tunnels: Update tunnels list on changes Signed-off-by: Roopesh Chander --- WireGuard/WireGuard/UI/macOS/StatusMenu.swift | 9 +++++++-- .../ManageTunnelsRootViewController.swift | 9 +++++---- .../TunnelsListTableViewController.swift | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/WireGuard/WireGuard/UI/macOS/StatusMenu.swift b/WireGuard/WireGuard/UI/macOS/StatusMenu.swift index 001081d..388c3cc 100644 --- a/WireGuard/WireGuard/UI/macOS/StatusMenu.swift +++ b/WireGuard/WireGuard/UI/macOS/StatusMenu.swift @@ -13,9 +13,10 @@ class StatusMenu: NSMenu { var firstTunnelMenuItemIndex: Int = 0 var numberOfTunnelMenuItems: Int = 0 + var manageTunnelsRootVC: ManageTunnelsRootViewController? lazy var manageTunnelsWindow: NSWindow = { - let manageTunnelsRootVC = ManageTunnelsRootViewController(tunnelsManager: tunnelsManager) - let window = NSWindow(contentViewController: manageTunnelsRootVC) + manageTunnelsRootVC = ManageTunnelsRootViewController(tunnelsManager: tunnelsManager) + let window = NSWindow(contentViewController: manageTunnelsRootVC!) window.title = tr("macWindowTitleManageTunnels") window.setFrameAutosaveName(NSWindow.FrameAutosaveName("ManageTunnelsWindow")) // Auto-save window position and size return window @@ -196,19 +197,23 @@ extension StatusMenu: TunnelsManagerListDelegate { func tunnelAdded(at index: Int) { let tunnel = tunnelsManager.tunnel(at: index) insertTunnelMenuItem(for: tunnel, at: index) + manageTunnelsRootVC?.tunnelsListVC?.tunnelAdded(at: index) } func tunnelModified(at index: Int) { if let tunnelMenuItem = item(at: firstTunnelMenuItemIndex + index) { updateTunnelMenuItem(tunnelMenuItem) } + manageTunnelsRootVC?.tunnelsListVC?.tunnelModified(at: index) } func tunnelMoved(from oldIndex: Int, to newIndex: Int) { moveTunnelMenuItem(from: oldIndex, to: newIndex) + manageTunnelsRootVC?.tunnelsListVC?.tunnelMoved(from: oldIndex, to: newIndex) } func tunnelRemoved(at index: Int) { removeTunnelMenuItem(at: index) + manageTunnelsRootVC?.tunnelsListVC?.tunnelRemoved(at: index) } } diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/ManageTunnelsRootViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/ManageTunnelsRootViewController.swift index 71dc8b8..c951b45 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/ManageTunnelsRootViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/ManageTunnelsRootViewController.swift @@ -6,6 +6,7 @@ import Cocoa class ManageTunnelsRootViewController: NSViewController { let tunnelsManager: TunnelsManager + var tunnelsListVC: TunnelsListTableViewController? let tunnelDetailContainerView = NSView() var tunnelDetailContentVC: NSViewController? @@ -34,11 +35,11 @@ class ManageTunnelsRootViewController: NSViewController { view.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: horizontalSpacing) ]) - let tunnelsListVC = TunnelsListTableViewController(tunnelsManager: tunnelsManager) - tunnelsListVC.delegate = self - let tunnelsListView = tunnelsListVC.view + tunnelsListVC = TunnelsListTableViewController(tunnelsManager: tunnelsManager) + tunnelsListVC!.delegate = self + let tunnelsListView = tunnelsListVC!.view - addChild(tunnelsListVC) + addChild(tunnelsListVC!) view.addSubview(tunnelsListView) view.addSubview(tunnelDetailContainerView) diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift index 2d0b6fe..c7d691f 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift @@ -206,6 +206,24 @@ class TunnelsListTableViewController: NSViewController { } } +extension TunnelsListTableViewController { + func tunnelAdded(at index: Int) { + tableView.insertRows(at: IndexSet(integer: index), withAnimation: .slideLeft) + } + + func tunnelModified(at index: Int) { + tableView.reloadData(forRowIndexes: IndexSet(integer: index), columnIndexes: IndexSet(integer: 0)) + } + + func tunnelMoved(from oldIndex: Int, to newIndex: Int) { + tableView.moveRow(at: oldIndex, to: newIndex) + } + + func tunnelRemoved(at index: Int) { + tableView.removeRows(at: IndexSet(integer: index), withAnimation: .slideLeft) + } +} + extension TunnelsListTableViewController: NSTableViewDataSource { func numberOfRows(in tableView: NSTableView) -> Int { return tunnelsManager.numberOfTunnels()