|
@ -38,6 +38,34 @@ from electrum.wallet import InternalAddressCorruption |
|
|
from .util import MyTreeView, MONOSPACE_FONT, ColorScheme, webopen |
|
|
from .util import MyTreeView, MONOSPACE_FONT, ColorScheme, webopen |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AddressUsageStateFilter(IntEnum): |
|
|
|
|
|
ALL = 0 |
|
|
|
|
|
UNUSED = 1 |
|
|
|
|
|
FUNDED = 2 |
|
|
|
|
|
USED_AND_EMPTY = 3 |
|
|
|
|
|
|
|
|
|
|
|
def ui_text(self) -> str: |
|
|
|
|
|
return { |
|
|
|
|
|
self.ALL: _('All'), |
|
|
|
|
|
self.UNUSED: _('Unused'), |
|
|
|
|
|
self.FUNDED: _('Funded'), |
|
|
|
|
|
self.USED_AND_EMPTY: _('Used'), |
|
|
|
|
|
}[self] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AddressTypeFilter(IntEnum): |
|
|
|
|
|
ALL = 0 |
|
|
|
|
|
RECEIVING = 1 |
|
|
|
|
|
CHANGE = 2 |
|
|
|
|
|
|
|
|
|
|
|
def ui_text(self) -> str: |
|
|
|
|
|
return { |
|
|
|
|
|
self.ALL: _('All'), |
|
|
|
|
|
self.RECEIVING: _('Receiving'), |
|
|
|
|
|
self.CHANGE: _('Change'), |
|
|
|
|
|
}[self] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AddressList(MyTreeView): |
|
|
class AddressList(MyTreeView): |
|
|
|
|
|
|
|
|
class Columns(IntEnum): |
|
|
class Columns(IntEnum): |
|
@ -54,16 +82,16 @@ class AddressList(MyTreeView): |
|
|
super().__init__(parent, self.create_menu, stretch_column=self.Columns.LABEL) |
|
|
super().__init__(parent, self.create_menu, stretch_column=self.Columns.LABEL) |
|
|
self.setSelectionMode(QAbstractItemView.ExtendedSelection) |
|
|
self.setSelectionMode(QAbstractItemView.ExtendedSelection) |
|
|
self.setSortingEnabled(True) |
|
|
self.setSortingEnabled(True) |
|
|
self.show_change = 0 |
|
|
self.show_change = AddressTypeFilter.ALL # type: AddressTypeFilter |
|
|
self.show_used = 0 |
|
|
self.show_used = AddressUsageStateFilter.ALL # type: AddressUsageStateFilter |
|
|
self.change_button = QComboBox(self) |
|
|
self.change_button = QComboBox(self) |
|
|
self.change_button.currentIndexChanged.connect(self.toggle_change) |
|
|
self.change_button.currentIndexChanged.connect(self.toggle_change) |
|
|
for t in [_('All'), _('Receiving'), _('Change')]: |
|
|
for addr_type in AddressTypeFilter.__members__.values(): # type: AddressTypeFilter |
|
|
self.change_button.addItem(t) |
|
|
self.change_button.addItem(addr_type.ui_text()) |
|
|
self.used_button = QComboBox(self) |
|
|
self.used_button = QComboBox(self) |
|
|
self.used_button.currentIndexChanged.connect(self.toggle_used) |
|
|
self.used_button.currentIndexChanged.connect(self.toggle_used) |
|
|
for t in [_('All'), _('Unused'), _('Funded'), _('Used')]: |
|
|
for addr_usage_state in AddressUsageStateFilter.__members__.values(): # type: AddressUsageStateFilter |
|
|
self.used_button.addItem(t) |
|
|
self.used_button.addItem(addr_usage_state.ui_text()) |
|
|
self.setModel(QStandardItemModel(self)) |
|
|
self.setModel(QStandardItemModel(self)) |
|
|
self.update() |
|
|
self.update() |
|
|
|
|
|
|
|
@ -71,8 +99,8 @@ class AddressList(MyTreeView): |
|
|
return QLabel(_("Filter:")), self.change_button, self.used_button |
|
|
return QLabel(_("Filter:")), self.change_button, self.used_button |
|
|
|
|
|
|
|
|
def on_hide_toolbar(self): |
|
|
def on_hide_toolbar(self): |
|
|
self.show_change = 0 |
|
|
self.show_change = AddressTypeFilter.ALL # type: AddressTypeFilter |
|
|
self.show_used = 0 |
|
|
self.show_used = AddressUsageStateFilter.ALL # type: AddressUsageStateFilter |
|
|
self.update() |
|
|
self.update() |
|
|
|
|
|
|
|
|
def save_toolbar_state(self, state, config): |
|
|
def save_toolbar_state(self, state, config): |
|
@ -94,25 +122,25 @@ class AddressList(MyTreeView): |
|
|
} |
|
|
} |
|
|
self.update_headers(headers) |
|
|
self.update_headers(headers) |
|
|
|
|
|
|
|
|
def toggle_change(self, state): |
|
|
def toggle_change(self, state: int): |
|
|
if state == self.show_change: |
|
|
if state == self.show_change: |
|
|
return |
|
|
return |
|
|
self.show_change = state |
|
|
self.show_change = AddressTypeFilter(state) |
|
|
self.update() |
|
|
self.update() |
|
|
|
|
|
|
|
|
def toggle_used(self, state): |
|
|
def toggle_used(self, state: int): |
|
|
if state == self.show_used: |
|
|
if state == self.show_used: |
|
|
return |
|
|
return |
|
|
self.show_used = state |
|
|
self.show_used = AddressUsageStateFilter(state) |
|
|
self.update() |
|
|
self.update() |
|
|
|
|
|
|
|
|
@profiler |
|
|
@profiler |
|
|
def update(self): |
|
|
def update(self): |
|
|
self.wallet = self.parent.wallet |
|
|
self.wallet = self.parent.wallet |
|
|
current_address = self.current_item_user_role(col=self.Columns.LABEL) |
|
|
current_address = self.current_item_user_role(col=self.Columns.LABEL) |
|
|
if self.show_change == 1: |
|
|
if self.show_change == AddressTypeFilter.RECEIVING: |
|
|
addr_list = self.wallet.get_receiving_addresses() |
|
|
addr_list = self.wallet.get_receiving_addresses() |
|
|
elif self.show_change == 2: |
|
|
elif self.show_change == AddressTypeFilter.CHANGE: |
|
|
addr_list = self.wallet.get_change_addresses() |
|
|
addr_list = self.wallet.get_change_addresses() |
|
|
else: |
|
|
else: |
|
|
addr_list = self.wallet.get_addresses() |
|
|
addr_list = self.wallet.get_addresses() |
|
@ -126,11 +154,11 @@ class AddressList(MyTreeView): |
|
|
c, u, x = self.wallet.get_addr_balance(address) |
|
|
c, u, x = self.wallet.get_addr_balance(address) |
|
|
balance = c + u + x |
|
|
balance = c + u + x |
|
|
is_used_and_empty = self.wallet.is_used(address) and balance == 0 |
|
|
is_used_and_empty = self.wallet.is_used(address) and balance == 0 |
|
|
if self.show_used == 1 and (balance or is_used_and_empty): |
|
|
if self.show_used == AddressUsageStateFilter.UNUSED and (balance or is_used_and_empty): |
|
|
continue |
|
|
continue |
|
|
if self.show_used == 2 and balance == 0: |
|
|
if self.show_used == AddressUsageStateFilter.FUNDED and balance == 0: |
|
|
continue |
|
|
continue |
|
|
if self.show_used == 3 and not is_used_and_empty: |
|
|
if self.show_used == AddressUsageStateFilter.USED_AND_EMPTY and not is_used_and_empty: |
|
|
continue |
|
|
continue |
|
|
balance_text = self.parent.format_amount(balance, whitespaces=True) |
|
|
balance_text = self.parent.format_amount(balance, whitespaces=True) |
|
|
# create item |
|
|
# create item |
|
|