1+ import enum
12from typing import TYPE_CHECKING , Optional , Union , Tuple , Sequence
23
34from PyQt6 .QtCore import pyqtSignal , Qt
1920from .util import qt_event_listener , QtEventListener
2021from .amountedit import BTCAmountEdit
2122from .fee_slider import FeeSlider , FeeComboBox
22- from .my_treeview import create_toolbar_with_menu
23+ from .my_treeview import create_toolbar_with_menu , MyTreeView
2324
2425if TYPE_CHECKING :
2526 from .main_window import ElectrumWindow
@@ -424,7 +425,22 @@ def choose_swap_server(self, transport: 'SwapServerTransport') -> None:
424425
425426class SwapServerDialog (WindowModalDialog , QtEventListener ):
426427
427- def __init__ (self , window , servers ):
428+ class Columns (MyTreeView .BaseColumnsEnum ):
429+ PUBKEY = enum .auto ()
430+ FEE = enum .auto ()
431+ MAX_FORWARD = enum .auto ()
432+ MAX_REVERSE = enum .auto ()
433+ LAST_SEEN = enum .auto ()
434+
435+ headers = {
436+ Columns .PUBKEY : _ ("Pubkey" ),
437+ Columns .FEE : _ ("Fee" ),
438+ Columns .MAX_FORWARD : _ ('Max Forward' ),
439+ Columns .MAX_REVERSE : _ ('Max Reverse' ),
440+ Columns .LAST_SEEN : _ ("Last seen" ),
441+ }
442+
443+ def __init__ (self , window : 'ElectrumWindow' , servers : Sequence ['SwapOffer' ]):
428444 WindowModalDialog .__init__ (self , window , _ ('Choose Swap Provider' ))
429445 self .window = window
430446 self .config = window .config
@@ -433,11 +449,11 @@ def __init__(self, window, servers):
433449 _ ("Note that fees and liquidity may be updated frequently." )
434450 ])
435451 self .servers_list = QTreeWidget ()
436- self .servers_list . setColumnCount ( 5 )
437- self .servers_list .setHeaderLabels ([ _ ( "Pubkey" ), _ ( "Fee" ), _ ( 'Max Forward' ), _ ( 'Max Reverse' ), _ ( "Last seen" )] )
452+ col_names = [ self .headers [ col_idx ] for col_idx in sorted ( self . headers . keys ())]
453+ self .servers_list .setHeaderLabels (col_names )
438454 self .servers_list .header ().setStretchLastSection (False )
439- for col_idx in range (5 ):
440- sm = QHeaderView .ResizeMode .Stretch if col_idx == 0 else QHeaderView .ResizeMode .ResizeToContents
455+ for col_idx in range (len ( self . Columns ) ):
456+ sm = QHeaderView .ResizeMode .Stretch if col_idx == self . Columns . PUBKEY else QHeaderView .ResizeMode .ResizeToContents
441457 self .servers_list .header ().setSectionResizeMode (col_idx , sm )
442458 self .update_servers_list (servers )
443459 vbox = QVBoxLayout ()
@@ -453,21 +469,23 @@ def run(self):
453469 if self .exec () != 1 :
454470 return None
455471 if item := self .servers_list .currentItem ():
456- return item .data (0 , ROLE_NPUB )
472+ return item .data (self . Columns . PUBKEY , ROLE_NPUB )
457473 return None
458474
459475 def update_servers_list (self , servers : Sequence ['SwapOffer' ]):
460476 self .servers_list .clear ()
461477 from electrum .util import age
462478 items = []
463479 for x in servers :
464- last_seen = age (x .timestamp )
465- fee = f"{ x .pairs .percentage } % + { x .pairs .mining_fee } sats"
466- max_forward = self .window .format_amount (x .pairs .max_forward ) + ' ' + self .window .base_unit ()
467- max_reverse = self .window .format_amount (x .pairs .max_reverse ) + ' ' + self .window .base_unit ()
468- item = QTreeWidgetItem ([x .server_pubkey , fee , max_forward , max_reverse , last_seen ])
469- item .setData (0 , ROLE_NPUB , x .server_npub )
470- item .setIcon (0 , self ._pubkey_to_q_icon (x .server_pubkey ))
480+ labels = ["" ] * len (self .Columns )
481+ labels [self .Columns .PUBKEY ] = x .server_pubkey
482+ labels [self .Columns .FEE ] = f"{ x .pairs .percentage } % + { x .pairs .mining_fee } sats"
483+ labels [self .Columns .MAX_FORWARD ] = self .window .format_amount (x .pairs .max_forward ) + ' ' + self .window .base_unit ()
484+ labels [self .Columns .MAX_REVERSE ] = self .window .format_amount (x .pairs .max_reverse ) + ' ' + self .window .base_unit ()
485+ labels [self .Columns .LAST_SEEN ] = age (x .timestamp )
486+ item = QTreeWidgetItem (labels )
487+ item .setData (self .Columns .PUBKEY , ROLE_NPUB , x .server_npub )
488+ item .setIcon (self .Columns .PUBKEY , self ._pubkey_to_q_icon (x .server_pubkey ))
471489 items .append (item )
472490 self .servers_list .insertTopLevelItems (0 , items )
473491
0 commit comments