]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
macOS: Manage tunnels: Update tunnels list on changes
authorRoopesh Chander <roop@roopc.net>
Fri, 4 Jan 2019 13:03:46 +0000 (18:33 +0530)
committerRoopesh Chander <roop@roopc.net>
Mon, 14 Jan 2019 09:22:32 +0000 (14:52 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/macOS/StatusMenu.swift
WireGuard/WireGuard/UI/macOS/ViewController/ManageTunnelsRootViewController.swift
WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift

index 001081d6211ed67742db9a571b5854ef30bfa4b4..388c3cc3135706c072ac8e2cbf200452a74db452 100644 (file)
@@ -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)
     }
 }
index 71dc8b825e7c9c9efdcf0bdb1a04520e304e6144..c951b45ba557141a8d0b12b6b2f3ca62cc38b16e 100644 (file)
@@ -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)
 
index 2d0b6fea7797f7d6c4af00a16808aad129f384af..c7d691f024364921c9d3535989e1fee72c446f8a 100644 (file)
@@ -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()