mirror of
https://github.com/lil-org/tokenary.git
synced 2024-12-15 15:05:15 +03:00
97 lines
3.0 KiB
Swift
97 lines
3.0 KiB
Swift
// Copyright © 2021 Encrypted Ink. All rights reserved.
|
|
|
|
import Cocoa
|
|
|
|
class AccountsListViewController: NSViewController {
|
|
|
|
private var accounts = [Account]()
|
|
|
|
var onSelectedAccount: ((Account) -> Void)?
|
|
|
|
static func with(preloadedAccounts: [Account]) -> AccountsListViewController {
|
|
let new = instantiate(AccountsListViewController.self)
|
|
new.accounts = preloadedAccounts
|
|
return new
|
|
}
|
|
|
|
@IBOutlet weak var titleLabel: NSTextField!
|
|
@IBOutlet weak var tableView: NSTableView! {
|
|
didSet {
|
|
tableView.delegate = self
|
|
tableView.dataSource = self
|
|
}
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
let menu = NSMenu()
|
|
menu.addItem(NSMenuItem(title: "Copy address", action: #selector(didClickCopyAddress(_:)), keyEquivalent: ""))
|
|
menu.addItem(NSMenuItem(title: "Remove account", action: #selector(didClickRemoveAccount(_:)), keyEquivalent: ""))
|
|
tableView.menu = menu
|
|
|
|
if accounts.isEmpty {
|
|
accounts = AccountsService.getAccounts()
|
|
}
|
|
|
|
if onSelectedAccount != nil {
|
|
titleLabel.stringValue = "Select\nAccount"
|
|
}
|
|
}
|
|
|
|
@IBAction func addButtonTapped(_ sender: NSButton) {
|
|
let importViewController = instantiate(ImportViewController.self)
|
|
importViewController.onSelectedAccount = onSelectedAccount
|
|
view.window?.contentViewController = importViewController
|
|
}
|
|
|
|
@objc private func didClickCopyAddress(_ sender: AnyObject) {
|
|
let row = tableView.clickedRow
|
|
guard row >= 0 else { return }
|
|
let pasteboard = NSPasteboard.general
|
|
pasteboard.clearContents()
|
|
pasteboard.setString(accounts[row].address, forType: .string)
|
|
}
|
|
|
|
@objc private func didClickRemoveAccount(_ sender: AnyObject) {
|
|
let row = tableView.clickedRow
|
|
guard row >= 0 else { return }
|
|
AccountsService.removeAccount(accounts[row])
|
|
accounts.remove(at: row)
|
|
tableView.reloadData()
|
|
}
|
|
|
|
}
|
|
|
|
extension AccountsListViewController: NSTableViewDelegate {
|
|
|
|
func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
|
|
if let onSelectedAccount = onSelectedAccount {
|
|
let account = accounts[row]
|
|
onSelectedAccount(account)
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension AccountsListViewController: NSTableViewDataSource {
|
|
|
|
func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
|
|
let rowView = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("AccountCellView"), owner: self) as? AccountCellView
|
|
rowView?.setup(address: accounts[row].address)
|
|
return rowView
|
|
}
|
|
|
|
func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
|
|
return 50
|
|
}
|
|
|
|
func numberOfRows(in tableView: NSTableView) -> Int {
|
|
return accounts.count
|
|
}
|
|
|
|
}
|