address tab: replace tree view with buttons

This commit is contained in:
ThomasV 2017-10-06 15:22:18 +02:00
parent fefcd7bbcd
commit 01108d8b47
2 changed files with 70 additions and 52 deletions

View File

@ -45,6 +45,17 @@ class AddressList(MyTreeWidget):
MyTreeWidget.__init__(self, parent, self.create_menu, [], 1) MyTreeWidget.__init__(self, parent, self.create_menu, [], 1)
self.refresh_headers() self.refresh_headers()
self.setSelectionMode(QAbstractItemView.ExtendedSelection) self.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.show_change = False
self.show_used = 3
self.change_button = QToolButton(self)
self.used_button = QToolButton(self)
self.change_button.clicked.connect(self.toggle_change)
self.used_button.clicked.connect(self.toggle_used)
self.set_change_button_text()
self.set_used_button_text()
def get_buttons(self):
return self.change_button, self.used_button
def refresh_headers(self): def refresh_headers(self):
headers = [ _('Address'), _('Label'), _('Balance')] headers = [ _('Address'), _('Label'), _('Balance')]
@ -54,59 +65,62 @@ class AddressList(MyTreeWidget):
headers.extend([_('Tx')]) headers.extend([_('Tx')])
self.update_headers(headers) self.update_headers(headers)
def toggle_change(self):
self.show_change = not self.show_change
self.set_change_button_text()
self.on_update()
def set_change_button_text(self):
s = [_('Receiving'), _('Change')]
self.change_button.setText(s[self.show_change])
def toggle_used(self):
self.show_used = (self.show_used + 1) % 4
self.set_used_button_text()
self.on_update()
def set_used_button_text(self):
s = [_('Unused'), _('Funded'), _('Used'), _('All')]
self.used_button.setText(s[self.show_used])
def on_update(self): def on_update(self):
self.wallet = self.parent.wallet self.wallet = self.parent.wallet
item = self.currentItem() item = self.currentItem()
current_address = item.data(0, Qt.UserRole) if item else None current_address = item.data(0, Qt.UserRole) if item else None
addr_list = self.wallet.get_change_addresses() if self.show_change else self.wallet.get_receiving_addresses()
self.clear() self.clear()
receiving_addresses = self.wallet.get_receiving_addresses() for address in addr_list:
change_addresses = self.wallet.get_change_addresses() num = len(self.wallet.history.get(address,[]))
if True: is_used = self.wallet.is_used(address)
account_item = self label = self.wallet.labels.get(address, '')
sequences = [0,1] if change_addresses else [0] c, u, x = self.wallet.get_addr_balance(address)
for is_change in sequences: balance = c + u + x
if len(sequences) > 1: if self.show_used == 0 and (balance or is_used):
name = _("Receiving") if not is_change else _("Change") continue
seq_item = QTreeWidgetItem( [ name, '', '', '', ''] ) if self.show_used == 1 and balance == 0:
account_item.addChild(seq_item) continue
if not is_change: if self.show_used == 2 and not is_used:
seq_item.setExpanded(True) continue
else: balance_text = self.parent.format_amount(balance)
seq_item = account_item fx = self.parent.fx
used_item = QTreeWidgetItem( [ _("Used"), '', '', '', ''] ) if fx and fx.get_fiat_address_config():
used_flag = False rate = fx.exchange_rate()
addr_list = change_addresses if is_change else receiving_addresses fiat_balance = fx.value_str(balance, rate)
for address in addr_list: address_item = QTreeWidgetItem([address, label, balance_text, fiat_balance, "%d"%num])
num = len(self.wallet.history.get(address,[])) address_item.setTextAlignment(3, Qt.AlignRight)
is_used = self.wallet.is_used(address) else:
label = self.wallet.labels.get(address,'') address_item = QTreeWidgetItem([address, label, balance_text, "%d"%num])
c, u, x = self.wallet.get_addr_balance(address) address_item.setTextAlignment(2, Qt.AlignRight)
balance = self.parent.format_amount(c + u + x) address_item.setFont(0, QFont(MONOSPACE_FONT))
fx = self.parent.fx address_item.setData(0, Qt.UserRole, address)
if fx and fx.get_fiat_address_config(): address_item.setData(0, Qt.UserRole+1, True) # label can be edited
rate = fx.exchange_rate() if self.wallet.is_frozen(address):
fiat_balance = fx.value_str(c + u + x, rate) address_item.setBackground(0, ColorScheme.BLUE.as_color(True))
address_item = QTreeWidgetItem([address, label, balance, fiat_balance, "%d"%num]) if self.wallet.is_beyond_limit(address, self.show_change):
address_item.setTextAlignment(3, Qt.AlignRight) address_item.setBackground(0, ColorScheme.RED.as_color(True))
else: self.addChild(address_item)
address_item = QTreeWidgetItem([address, label, balance, "%d"%num]) if address == current_address:
address_item.setTextAlignment(2, Qt.AlignRight) self.setCurrentItem(address_item)
address_item.setFont(0, QFont(MONOSPACE_FONT))
address_item.setData(0, Qt.UserRole, address)
address_item.setData(0, Qt.UserRole+1, True) # label can be edited
if self.wallet.is_frozen(address):
address_item.setBackground(0, ColorScheme.BLUE.as_color(True))
if self.wallet.is_beyond_limit(address, is_change):
address_item.setBackground(0, ColorScheme.RED.as_color(True))
if is_used:
if not used_flag:
seq_item.insertChild(0, used_item)
used_flag = True
used_item.addChild(address_item)
else:
seq_item.addChild(address_item)
if address == current_address:
self.setCurrentItem(address_item)
def create_menu(self, position): def create_menu(self, position):
from electrum.wallet import Multisig_Wallet from electrum.wallet import Multisig_Wallet

View File

@ -1563,22 +1563,26 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
self.utxo_list.update() self.utxo_list.update()
self.update_fee() self.update_fee()
def create_list_tab(self, l): def create_list_tab(self, l, buttons=None):
w = QWidget() w = QWidget()
w.searchable_list = l w.searchable_list = l
vbox = QVBoxLayout() vbox = QVBoxLayout()
w.setLayout(vbox) w.setLayout(vbox)
vbox.setContentsMargins(0, 0, 0, 0) vbox.setContentsMargins(0, 0, 0, 0)
vbox.setSpacing(0) vbox.setSpacing(0)
if buttons:
hbox = QHBoxLayout()
for b in buttons:
hbox.addWidget(b)
hbox.addStretch()
vbox.addLayout(hbox)
vbox.addWidget(l) vbox.addWidget(l)
buttons = QWidget()
vbox.addWidget(buttons)
return w return w
def create_addresses_tab(self): def create_addresses_tab(self):
from .address_list import AddressList from .address_list import AddressList
self.address_list = l = AddressList(self) self.address_list = l = AddressList(self)
return self.create_list_tab(l) return self.create_list_tab(l, l.get_buttons())
def create_utxo_tab(self): def create_utxo_tab(self):
from .utxo_list import UTXOList from .utxo_list import UTXOList