|
|
@ -45,6 +45,17 @@ class AddressList(MyTreeWidget): |
|
|
|
MyTreeWidget.__init__(self, parent, self.create_menu, [], 1) |
|
|
|
self.refresh_headers() |
|
|
|
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): |
|
|
|
headers = [ _('Address'), _('Label'), _('Balance')] |
|
|
@ -54,59 +65,62 @@ class AddressList(MyTreeWidget): |
|
|
|
headers.extend([_('Tx')]) |
|
|
|
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): |
|
|
|
self.wallet = self.parent.wallet |
|
|
|
item = self.currentItem() |
|
|
|
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() |
|
|
|
receiving_addresses = self.wallet.get_receiving_addresses() |
|
|
|
change_addresses = self.wallet.get_change_addresses() |
|
|
|
if True: |
|
|
|
account_item = self |
|
|
|
sequences = [0,1] if change_addresses else [0] |
|
|
|
for is_change in sequences: |
|
|
|
if len(sequences) > 1: |
|
|
|
name = _("Receiving") if not is_change else _("Change") |
|
|
|
seq_item = QTreeWidgetItem( [ name, '', '', '', ''] ) |
|
|
|
account_item.addChild(seq_item) |
|
|
|
if not is_change: |
|
|
|
seq_item.setExpanded(True) |
|
|
|
else: |
|
|
|
seq_item = account_item |
|
|
|
used_item = QTreeWidgetItem( [ _("Used"), '', '', '', ''] ) |
|
|
|
used_flag = False |
|
|
|
addr_list = change_addresses if is_change else receiving_addresses |
|
|
|
for address in addr_list: |
|
|
|
num = len(self.wallet.history.get(address,[])) |
|
|
|
is_used = self.wallet.is_used(address) |
|
|
|
label = self.wallet.labels.get(address,'') |
|
|
|
c, u, x = self.wallet.get_addr_balance(address) |
|
|
|
balance = self.parent.format_amount(c + u + x) |
|
|
|
fx = self.parent.fx |
|
|
|
if fx and fx.get_fiat_address_config(): |
|
|
|
rate = fx.exchange_rate() |
|
|
|
fiat_balance = fx.value_str(c + u + x, rate) |
|
|
|
address_item = QTreeWidgetItem([address, label, balance, fiat_balance, "%d"%num]) |
|
|
|
address_item.setTextAlignment(3, Qt.AlignRight) |
|
|
|
else: |
|
|
|
address_item = QTreeWidgetItem([address, label, balance, "%d"%num]) |
|
|
|
address_item.setTextAlignment(2, Qt.AlignRight) |
|
|
|
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) |
|
|
|
for address in addr_list: |
|
|
|
num = len(self.wallet.history.get(address,[])) |
|
|
|
is_used = self.wallet.is_used(address) |
|
|
|
label = self.wallet.labels.get(address, '') |
|
|
|
c, u, x = self.wallet.get_addr_balance(address) |
|
|
|
balance = c + u + x |
|
|
|
if self.show_used == 0 and (balance or is_used): |
|
|
|
continue |
|
|
|
if self.show_used == 1 and balance == 0: |
|
|
|
continue |
|
|
|
if self.show_used == 2 and not is_used: |
|
|
|
continue |
|
|
|
balance_text = self.parent.format_amount(balance) |
|
|
|
fx = self.parent.fx |
|
|
|
if fx and fx.get_fiat_address_config(): |
|
|
|
rate = fx.exchange_rate() |
|
|
|
fiat_balance = fx.value_str(balance, rate) |
|
|
|
address_item = QTreeWidgetItem([address, label, balance_text, fiat_balance, "%d"%num]) |
|
|
|
address_item.setTextAlignment(3, Qt.AlignRight) |
|
|
|
else: |
|
|
|
address_item = QTreeWidgetItem([address, label, balance_text, "%d"%num]) |
|
|
|
address_item.setTextAlignment(2, Qt.AlignRight) |
|
|
|
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, self.show_change): |
|
|
|
address_item.setBackground(0, ColorScheme.RED.as_color(True)) |
|
|
|
self.addChild(address_item) |
|
|
|
if address == current_address: |
|
|
|
self.setCurrentItem(address_item) |
|
|
|
|
|
|
|
def create_menu(self, position): |
|
|
|
from electrum.wallet import Multisig_Wallet |
|
|
|