qt addresses list: use IntEnum for dropdown filters
This commit is contained in:
@@ -38,6 +38,34 @@ from electrum.wallet import InternalAddressCorruption
|
||||
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 Columns(IntEnum):
|
||||
@@ -54,16 +82,16 @@ class AddressList(MyTreeView):
|
||||
super().__init__(parent, self.create_menu, stretch_column=self.Columns.LABEL)
|
||||
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
||||
self.setSortingEnabled(True)
|
||||
self.show_change = 0
|
||||
self.show_used = 0
|
||||
self.show_change = AddressTypeFilter.ALL # type: AddressTypeFilter
|
||||
self.show_used = AddressUsageStateFilter.ALL # type: AddressUsageStateFilter
|
||||
self.change_button = QComboBox(self)
|
||||
self.change_button.currentIndexChanged.connect(self.toggle_change)
|
||||
for t in [_('All'), _('Receiving'), _('Change')]:
|
||||
self.change_button.addItem(t)
|
||||
for addr_type in AddressTypeFilter.__members__.values(): # type: AddressTypeFilter
|
||||
self.change_button.addItem(addr_type.ui_text())
|
||||
self.used_button = QComboBox(self)
|
||||
self.used_button.currentIndexChanged.connect(self.toggle_used)
|
||||
for t in [_('All'), _('Unused'), _('Funded'), _('Used')]:
|
||||
self.used_button.addItem(t)
|
||||
for addr_usage_state in AddressUsageStateFilter.__members__.values(): # type: AddressUsageStateFilter
|
||||
self.used_button.addItem(addr_usage_state.ui_text())
|
||||
self.setModel(QStandardItemModel(self))
|
||||
self.update()
|
||||
|
||||
@@ -71,8 +99,8 @@ class AddressList(MyTreeView):
|
||||
return QLabel(_("Filter:")), self.change_button, self.used_button
|
||||
|
||||
def on_hide_toolbar(self):
|
||||
self.show_change = 0
|
||||
self.show_used = 0
|
||||
self.show_change = AddressTypeFilter.ALL # type: AddressTypeFilter
|
||||
self.show_used = AddressUsageStateFilter.ALL # type: AddressUsageStateFilter
|
||||
self.update()
|
||||
|
||||
def save_toolbar_state(self, state, config):
|
||||
@@ -94,25 +122,25 @@ class AddressList(MyTreeView):
|
||||
}
|
||||
self.update_headers(headers)
|
||||
|
||||
def toggle_change(self, state):
|
||||
def toggle_change(self, state: int):
|
||||
if state == self.show_change:
|
||||
return
|
||||
self.show_change = state
|
||||
self.show_change = AddressTypeFilter(state)
|
||||
self.update()
|
||||
|
||||
def toggle_used(self, state):
|
||||
def toggle_used(self, state: int):
|
||||
if state == self.show_used:
|
||||
return
|
||||
self.show_used = state
|
||||
self.show_used = AddressUsageStateFilter(state)
|
||||
self.update()
|
||||
|
||||
@profiler
|
||||
def update(self):
|
||||
self.wallet = self.parent.wallet
|
||||
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()
|
||||
elif self.show_change == 2:
|
||||
elif self.show_change == AddressTypeFilter.CHANGE:
|
||||
addr_list = self.wallet.get_change_addresses()
|
||||
else:
|
||||
addr_list = self.wallet.get_addresses()
|
||||
@@ -126,11 +154,11 @@ class AddressList(MyTreeView):
|
||||
c, u, x = self.wallet.get_addr_balance(address)
|
||||
balance = c + u + x
|
||||
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
|
||||
if self.show_used == 2 and balance == 0:
|
||||
if self.show_used == AddressUsageStateFilter.FUNDED and balance == 0:
|
||||
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
|
||||
balance_text = self.parent.format_amount(balance, whitespaces=True)
|
||||
# create item
|
||||
|
||||
Reference in New Issue
Block a user