mirror of
https://github.com/lil-org/tokenary.git
synced 2025-01-05 20:16:25 +03:00
Implement chain selection
This commit is contained in:
parent
9798e03433
commit
cec94b275c
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
@ -818,13 +818,13 @@ DQ
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<scrollView autohidesScrollers="YES" horizontalLineScroll="40" horizontalPageScroll="0.0" verticalLineScroll="40" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="7bs-Kr-ija">
|
<scrollView autohidesScrollers="YES" horizontalLineScroll="40" horizontalPageScroll="0.0" verticalLineScroll="40" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="7bs-Kr-ija">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="250" height="272"/>
|
<rect key="frame" x="0.0" y="0.0" width="250" height="247"/>
|
||||||
<clipView key="contentView" ambiguous="YES" id="RjU-hi-SHx">
|
<clipView key="contentView" ambiguous="YES" id="RjU-hi-SHx">
|
||||||
<rect key="frame" x="1" y="1" width="248" height="270"/>
|
<rect key="frame" x="1" y="1" width="248" height="245"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="40" rowSizeStyle="automatic" viewBased="YES" id="glA-FK-Kdd" customClass="RightClickTableView" customModule="Encrypted_Ink" customModuleProvider="target">
|
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="40" rowSizeStyle="automatic" viewBased="YES" id="glA-FK-Kdd" customClass="RightClickTableView" customModule="Encrypted_Ink" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="248" height="270"/>
|
<rect key="frame" x="0.0" y="0.0" width="248" height="245"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -842,7 +842,7 @@ DQ
|
|||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView identifier="AccountCellView" id="Lp1-Zy-70c" customClass="AccountCellView" customModule="Encrypted_Ink" customModuleProvider="target">
|
<tableCellView identifier="AccountCellView" id="Lp1-Zy-70c" customClass="AccountCellView" customModule="Encrypted_Ink" customModuleProvider="target">
|
||||||
<rect key="frame" x="10" y="0.0" width="205" height="40"/>
|
<rect key="frame" x="0.0" y="0.0" width="205" height="40"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="pdB-jS-gKE">
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="pdB-jS-gKE">
|
||||||
@ -879,7 +879,7 @@ DQ
|
|||||||
</connections>
|
</connections>
|
||||||
</tableCellView>
|
</tableCellView>
|
||||||
<tableCellView identifier="AddAccountOptionCellView" id="1KM-PS-nEo" customClass="AddAccountOptionCellView" customModule="Encrypted_Ink" customModuleProvider="target">
|
<tableCellView identifier="AddAccountOptionCellView" id="1KM-PS-nEo" customClass="AddAccountOptionCellView" customModule="Encrypted_Ink" customModuleProvider="target">
|
||||||
<rect key="frame" x="10" y="40" width="205" height="40"/>
|
<rect key="frame" x="0.0" y="40" width="205" height="40"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="BpB-tc-JdP">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="BpB-tc-JdP">
|
||||||
@ -928,21 +928,49 @@ DQ
|
|||||||
<action selector="addButtonTapped:" target="29s-Rd-OUf" id="MKz-Ok-RUY"/>
|
<action selector="addButtonTapped:" target="29s-Rd-OUf" id="MKz-Ok-RUY"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="YAr-gV-Zhp">
|
||||||
|
<rect key="frame" x="0.0" y="247" width="250" height="40"/>
|
||||||
|
<subviews>
|
||||||
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WBh-Qb-dhA">
|
||||||
|
<rect key="frame" x="47" y="6" width="157" height="25"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="A9Y-mW-lqk">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="menu"/>
|
||||||
|
<menu key="menu" id="bIv-hX-xgQ"/>
|
||||||
|
</popUpButtonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="chainButtonSelectionChanged:" target="29s-Rd-OUf" id="saG-Ti-VJD"/>
|
||||||
|
</connections>
|
||||||
|
</popUpButton>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="WBh-Qb-dhA" firstAttribute="leading" secondItem="YAr-gV-Zhp" secondAttribute="leading" constant="50" id="9XO-wX-7KM"/>
|
||||||
|
<constraint firstAttribute="height" constant="40" id="HaA-yk-eCj"/>
|
||||||
|
<constraint firstItem="WBh-Qb-dhA" firstAttribute="centerX" secondItem="YAr-gV-Zhp" secondAttribute="centerX" id="qJ6-QA-Eul"/>
|
||||||
|
<constraint firstItem="WBh-Qb-dhA" firstAttribute="centerY" secondItem="YAr-gV-Zhp" secondAttribute="centerY" id="yed-DU-Dih"/>
|
||||||
|
</constraints>
|
||||||
|
</customView>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="ngQ-Bn-Kwd" firstAttribute="leading" secondItem="dkh-kG-EFj" secondAttribute="trailing" constant="10" id="2jH-ov-jln"/>
|
<constraint firstItem="ngQ-Bn-Kwd" firstAttribute="leading" secondItem="dkh-kG-EFj" secondAttribute="trailing" constant="10" id="2jH-ov-jln"/>
|
||||||
<constraint firstItem="7bs-Kr-ija" firstAttribute="leading" secondItem="Yjc-Zm-uZY" secondAttribute="leading" id="3n0-jB-KwV"/>
|
<constraint firstItem="7bs-Kr-ija" firstAttribute="leading" secondItem="Yjc-Zm-uZY" secondAttribute="leading" id="3n0-jB-KwV"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="7bs-Kr-ija" secondAttribute="trailing" id="6m3-S7-WJp"/>
|
<constraint firstAttribute="trailing" secondItem="7bs-Kr-ija" secondAttribute="trailing" id="6m3-S7-WJp"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="ngQ-Bn-Kwd" secondAttribute="trailing" constant="12" id="Ln4-b5-NfT"/>
|
<constraint firstAttribute="trailing" secondItem="ngQ-Bn-Kwd" secondAttribute="trailing" constant="12" id="Ln4-b5-NfT"/>
|
||||||
|
<constraint firstItem="7bs-Kr-ija" firstAttribute="top" secondItem="YAr-gV-Zhp" secondAttribute="bottom" id="N0R-Qm-X3z"/>
|
||||||
<constraint firstItem="ngQ-Bn-Kwd" firstAttribute="firstBaseline" secondItem="dkh-kG-EFj" secondAttribute="firstBaseline" id="RDE-f4-Heb"/>
|
<constraint firstItem="ngQ-Bn-Kwd" firstAttribute="firstBaseline" secondItem="dkh-kG-EFj" secondAttribute="firstBaseline" id="RDE-f4-Heb"/>
|
||||||
|
<constraint firstItem="YAr-gV-Zhp" firstAttribute="top" secondItem="dkh-kG-EFj" secondAttribute="bottom" constant="5" id="eSI-xz-s5L"/>
|
||||||
|
<constraint firstItem="YAr-gV-Zhp" firstAttribute="centerX" secondItem="Yjc-Zm-uZY" secondAttribute="centerX" id="ju9-P1-aBa"/>
|
||||||
|
<constraint firstItem="YAr-gV-Zhp" firstAttribute="width" secondItem="Yjc-Zm-uZY" secondAttribute="width" id="mzg-kX-V5F"/>
|
||||||
<constraint firstItem="dkh-kG-EFj" firstAttribute="top" secondItem="Yjc-Zm-uZY" secondAttribute="top" constant="24" id="oaa-yR-g0U"/>
|
<constraint firstItem="dkh-kG-EFj" firstAttribute="top" secondItem="Yjc-Zm-uZY" secondAttribute="top" constant="24" id="oaa-yR-g0U"/>
|
||||||
<constraint firstItem="dkh-kG-EFj" firstAttribute="centerX" secondItem="Yjc-Zm-uZY" secondAttribute="centerX" id="qoF-Dr-xWA"/>
|
<constraint firstItem="dkh-kG-EFj" firstAttribute="centerX" secondItem="Yjc-Zm-uZY" secondAttribute="centerX" id="qoF-Dr-xWA"/>
|
||||||
<constraint firstItem="7bs-Kr-ija" firstAttribute="top" secondItem="dkh-kG-EFj" secondAttribute="bottom" constant="20" id="w9v-GA-ZtN"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="7bs-Kr-ija" secondAttribute="bottom" id="zCE-cx-u4r"/>
|
<constraint firstAttribute="bottom" secondItem="7bs-Kr-ija" secondAttribute="bottom" id="zCE-cx-u4r"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="addButton" destination="ngQ-Bn-Kwd" id="FlT-oq-C5e"/>
|
<outlet property="addButton" destination="ngQ-Bn-Kwd" id="FlT-oq-C5e"/>
|
||||||
|
<outlet property="chainButton" destination="WBh-Qb-dhA" id="Fyv-PN-1Ln"/>
|
||||||
|
<outlet property="chainButtonContainer" destination="YAr-gV-Zhp" id="0qy-nB-KfB"/>
|
||||||
|
<outlet property="chainButtonHeightConstraint" destination="HaA-yk-eCj" id="2KM-mU-OO6"/>
|
||||||
<outlet property="tableView" destination="glA-FK-Kdd" id="9aW-Qr-UuF"/>
|
<outlet property="tableView" destination="glA-FK-Kdd" id="9aW-Qr-UuF"/>
|
||||||
<outlet property="titleLabel" destination="dkh-kG-EFj" id="xDn-bP-HWG"/>
|
<outlet property="titleLabel" destination="dkh-kG-EFj" id="xDn-bP-HWG"/>
|
||||||
</connections>
|
</connections>
|
||||||
|
@ -12,4 +12,19 @@ enum EthereumChain: Int {
|
|||||||
return rawValue
|
return rawValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static let all: [EthereumChain] = [.main, .arbitrum, .polygon, .optimism]
|
||||||
|
|
||||||
|
var name: String {
|
||||||
|
switch self {
|
||||||
|
case .main:
|
||||||
|
return "Ethereum Mainnet"
|
||||||
|
case .arbitrum:
|
||||||
|
return "Arbitrum"
|
||||||
|
case .optimism:
|
||||||
|
return "Optimism"
|
||||||
|
case .polygon:
|
||||||
|
return "Polygon"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,9 @@ class AccountsListViewController: NSViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@IBOutlet weak var chainButtonHeightConstraint: NSLayoutConstraint!
|
||||||
|
@IBOutlet weak var chainButtonContainer: NSView!
|
||||||
|
@IBOutlet weak var chainButton: NSPopUpButton!
|
||||||
@IBOutlet weak var addButton: NSButton! {
|
@IBOutlet weak var addButton: NSButton! {
|
||||||
didSet {
|
didSet {
|
||||||
let menu = NSMenu()
|
let menu = NSMenu()
|
||||||
@ -54,7 +57,7 @@ class AccountsListViewController: NSViewController {
|
|||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
setupAccountsMenu()
|
setupAccountsMenu()
|
||||||
reloadTitle()
|
reloadHeader()
|
||||||
updateCellModels()
|
updateCellModels()
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: NSApplication.didBecomeActiveNotification, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: NSApplication.didBecomeActiveNotification, object: nil)
|
||||||
}
|
}
|
||||||
@ -81,9 +84,15 @@ class AccountsListViewController: NSViewController {
|
|||||||
NotificationCenter.default.removeObserver(self)
|
NotificationCenter.default.removeObserver(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func reloadTitle() {
|
private func reloadHeader() {
|
||||||
titleLabel.stringValue = onSelectedWallet != nil && !wallets.isEmpty ? "Select\nAccount" : "Accounts"
|
let canSelectAccount = onSelectedWallet != nil && !wallets.isEmpty
|
||||||
|
titleLabel.stringValue = canSelectAccount ? "Select\nAccount" : "Accounts"
|
||||||
addButton.isHidden = wallets.isEmpty
|
addButton.isHidden = wallets.isEmpty
|
||||||
|
chainButtonHeightConstraint.constant = canSelectAccount ? 40 : 15
|
||||||
|
chainButtonContainer.isHidden = !canSelectAccount
|
||||||
|
if canSelectAccount, chainButton.numberOfItems == 0 {
|
||||||
|
chainButton.addItems(withTitles: EthereumChain.all.map { $0.name })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func didBecomeActive() {
|
@objc private func didBecomeActive() {
|
||||||
@ -91,7 +100,14 @@ class AccountsListViewController: NSViewController {
|
|||||||
if let completion = agent.getWalletSelectionCompletionIfShouldSelect() {
|
if let completion = agent.getWalletSelectionCompletionIfShouldSelect() {
|
||||||
onSelectedWallet = completion
|
onSelectedWallet = completion
|
||||||
}
|
}
|
||||||
reloadTitle()
|
reloadHeader()
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func chainButtonSelectionChanged(_ sender: Any) {
|
||||||
|
guard let selectedItem = chainButton.selectedItem else { return }
|
||||||
|
let index = chainButton.index(of: selectedItem)
|
||||||
|
guard index >= 0 && index < EthereumChain.all.count else { return }
|
||||||
|
chain = EthereumChain.all[index]
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func addButtonTapped(_ sender: NSButton) {
|
@IBAction func addButtonTapped(_ sender: NSButton) {
|
||||||
@ -126,7 +142,7 @@ class AccountsListViewController: NSViewController {
|
|||||||
private func createNewAccountAndShowSecretWords() {
|
private func createNewAccountAndShowSecretWords() {
|
||||||
guard let wallet = try? walletsManager.createWallet() else { return }
|
guard let wallet = try? walletsManager.createWallet() else { return }
|
||||||
newWalletId = wallet.id
|
newWalletId = wallet.id
|
||||||
reloadTitle()
|
reloadHeader()
|
||||||
updateCellModels()
|
updateCellModels()
|
||||||
tableView.reloadData()
|
tableView.reloadData()
|
||||||
blinkNewWalletCellIfNeeded()
|
blinkNewWalletCellIfNeeded()
|
||||||
@ -232,7 +248,7 @@ class AccountsListViewController: NSViewController {
|
|||||||
private func removeAccountAtIndex(_ index: Int) {
|
private func removeAccountAtIndex(_ index: Int) {
|
||||||
let wallet = wallets[index]
|
let wallet = wallets[index]
|
||||||
try? walletsManager.delete(wallet: wallet)
|
try? walletsManager.delete(wallet: wallet)
|
||||||
reloadTitle()
|
reloadHeader()
|
||||||
updateCellModels()
|
updateCellModels()
|
||||||
tableView.reloadData()
|
tableView.reloadData()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user