frozen_addresses feature
This commit is contained in:
parent
65cd2ec9b9
commit
182d9c6dd0
121
gui_qt.py
121
gui_qt.py
|
@ -506,8 +506,72 @@ class ElectrumWindow(QMainWindow):
|
|||
entry.setPalette(palette)
|
||||
|
||||
|
||||
def make_address_list(self, is_recv):
|
||||
|
||||
def add_buttons(self, l, hbox, is_recv):
|
||||
|
||||
while hbox.count(): hbox.removeItem(hbox.itemAt(0))
|
||||
|
||||
i = l.currentItem()
|
||||
if not i: return
|
||||
addr = unicode( i.text(0) )
|
||||
|
||||
hbox.addWidget(EnterButton("QR",lambda: self.show_address_qrcode(addr)))
|
||||
hbox.addWidget( EnterButton("Copy to Clipboard", lambda: self.app.clipboard().setText(addr)))
|
||||
if is_recv:
|
||||
def toggle_freeze(addr):
|
||||
if addr in self.wallet.frozen_addresses:
|
||||
self.wallet.frozen_addresses.remove(addr)
|
||||
else:
|
||||
self.wallet.frozen_addresses.append(addr)
|
||||
self.wallet.save()
|
||||
self.update_receive_tab()
|
||||
while hbox.count(): hbox.removeItem(hbox.itemAt(0))
|
||||
|
||||
t = "Unfreeze" if addr in self.wallet.frozen_addresses else "Freeze"
|
||||
hbox.addWidget(EnterButton(t, lambda: toggle_freeze(addr)))
|
||||
|
||||
else:
|
||||
def payto(addr):
|
||||
if not addr:return
|
||||
self.tabs.setCurrentIndex(1)
|
||||
self.payto_e.setText(addr)
|
||||
self.amount_e.setFocus()
|
||||
hbox.addWidget(EnterButton('Pay to', lambda: payto(addr)))
|
||||
hbox.addWidget(EnterButton("New", self.newaddress_dialog))
|
||||
hbox.addStretch(1)
|
||||
|
||||
|
||||
def create_receive_tab(self):
|
||||
l = QTreeWidget(self)
|
||||
l.setColumnCount(4)
|
||||
l.setColumnWidth(0, 350)
|
||||
l.setColumnWidth(1, 330)
|
||||
l.setColumnWidth(2, 100)
|
||||
l.setColumnWidth(3, 10)
|
||||
l.setHeaderLabels( ['Address', 'Label','Balance','Tx'])
|
||||
|
||||
w = QWidget()
|
||||
vbox = QVBoxLayout()
|
||||
w.setLayout(vbox)
|
||||
|
||||
vbox.setMargin(0)
|
||||
vbox.setSpacing(0)
|
||||
vbox.addWidget(l)
|
||||
buttons = QWidget()
|
||||
vbox.addWidget(buttons)
|
||||
|
||||
hbox = QHBoxLayout()
|
||||
hbox.setMargin(0)
|
||||
hbox.setSpacing(0)
|
||||
buttons.setLayout(hbox)
|
||||
|
||||
self.connect(l, SIGNAL('itemDoubleClicked(QTreeWidgetItem*, int)'), lambda a, b: self.address_label_clicked(a,b,l))
|
||||
self.connect(l, SIGNAL('itemChanged(QTreeWidgetItem*, int)'), lambda a,b: self.address_label_changed(a,b,l))
|
||||
self.connect(l, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), lambda: self.add_buttons(l, hbox, True))
|
||||
self.receive_list = l
|
||||
return w
|
||||
|
||||
def create_contacts_tab(self):
|
||||
l = QTreeWidget(self)
|
||||
l.setColumnCount(3)
|
||||
l.setColumnWidth(0, 350)
|
||||
|
@ -515,64 +579,31 @@ class ElectrumWindow(QMainWindow):
|
|||
l.setColumnWidth(2, 20)
|
||||
l.setHeaderLabels( ['Address', 'Label','Tx'])
|
||||
|
||||
w = QWidget()
|
||||
vbox = QVBoxLayout()
|
||||
w.setLayout(vbox)
|
||||
|
||||
vbox.setMargin(0)
|
||||
vbox.setSpacing(0)
|
||||
vbox.addWidget(l)
|
||||
buttons = QWidget()
|
||||
vbox.addWidget(buttons)
|
||||
|
||||
hbox = QHBoxLayout()
|
||||
hbox.setMargin(0)
|
||||
hbox.setSpacing(0)
|
||||
|
||||
def get_addr(l):
|
||||
i = l.currentItem()
|
||||
if not i: return
|
||||
addr = unicode( i.text(0) )
|
||||
return addr
|
||||
|
||||
qrButton = EnterButton("QR",lambda: self.show_address_qrcode(get_addr(l)))
|
||||
|
||||
def copy2clipboard(addr):
|
||||
self.app.clipboard().setText(addr)
|
||||
copyButton = EnterButton("Copy to Clipboard", lambda: copy2clipboard(get_addr(l)))
|
||||
hbox.addWidget(qrButton)
|
||||
hbox.addWidget(copyButton)
|
||||
if not is_recv:
|
||||
addButton = EnterButton("New", self.newaddress_dialog)
|
||||
hbox.addWidget(addButton)
|
||||
def payto(addr):
|
||||
if not addr:return
|
||||
self.tabs.setCurrentIndex(1)
|
||||
self.payto_e.setText(addr)
|
||||
self.amount_e.setFocus()
|
||||
paytoButton = EnterButton('Pay to', lambda: payto(get_addr(l)))
|
||||
hbox.addWidget(paytoButton)
|
||||
hbox.addStretch(1)
|
||||
buttons = QWidget()
|
||||
buttons.setLayout(hbox)
|
||||
vbox.addWidget(buttons)
|
||||
|
||||
w = QWidget()
|
||||
w.setLayout(vbox)
|
||||
return w, l
|
||||
|
||||
def create_receive_tab(self):
|
||||
w, l = self.make_address_list(True)
|
||||
self.connect(l, SIGNAL('itemDoubleClicked(QTreeWidgetItem*, int)'), lambda a, b: self.address_label_clicked(a,b,l))
|
||||
self.connect(l, SIGNAL('itemChanged(QTreeWidgetItem*, int)'), lambda a,b: self.address_label_changed(a,b,l))
|
||||
self.receive_list = l
|
||||
return w
|
||||
|
||||
def create_contacts_tab(self):
|
||||
w, l = self.make_address_list(False)
|
||||
self.connect(l, SIGNAL('itemDoubleClicked(QTreeWidgetItem*, int)'), lambda a, b: self.address_label_clicked(a,b,l))
|
||||
self.connect(l, SIGNAL('itemChanged(QTreeWidgetItem*, int)'), lambda a,b: self.address_label_changed(a,b,l))
|
||||
self.connect(l, SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self.show_contact_details)
|
||||
self.connect(l, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), lambda: self.add_buttons(l, hbox, False))
|
||||
self.contacts_list = l
|
||||
return w
|
||||
|
||||
def update_receive_tab(self):
|
||||
self.receive_list.clear()
|
||||
|
||||
for address in self.wallet.all_addresses():
|
||||
if self.wallet.is_change(address):continue
|
||||
label = self.wallet.labels.get(address,'')
|
||||
|
@ -581,7 +612,13 @@ class ElectrumWindow(QMainWindow):
|
|||
for item in h:
|
||||
if not item['is_input'] : n=n+1
|
||||
tx = "None" if n==0 else "%d"%n
|
||||
item = QTreeWidgetItem( [ address, label, tx] )
|
||||
|
||||
c, u = self.wallet.get_addr_balance(address)
|
||||
balance = format_satoshis( c + u, False, self.wallet.num_zeros )
|
||||
if address in self.wallet.frozen_addresses:
|
||||
balance += '[F]'
|
||||
|
||||
item = QTreeWidgetItem( [ address, label, balance, tx] )
|
||||
item.setFont(0, QFont(MONOSPACE_FONT))
|
||||
self.receive_list.addTopLevelItem(item)
|
||||
|
||||
|
|
|
@ -263,6 +263,7 @@ class Wallet:
|
|||
self.labels = {} # labels for addresses and transactions
|
||||
self.aliases = {} # aliases for addresses
|
||||
self.authorities = {} # trusted addresses
|
||||
self.frozen_addresses = []
|
||||
|
||||
self.receipts = {} # signed URIs
|
||||
self.receipt = None # next receipt
|
||||
|
@ -561,6 +562,7 @@ class Wallet:
|
|||
'authorities':self.authorities,
|
||||
'receipts':self.receipts,
|
||||
'num_zeros':self.num_zeros,
|
||||
'frozen_addresses':self.frozen_addresses,
|
||||
}
|
||||
f = open(self.path,"w")
|
||||
f.write( repr(s) )
|
||||
|
@ -597,6 +599,7 @@ class Wallet:
|
|||
self.authorities = d.get('authorities',{})
|
||||
self.receipts = d.get('receipts',{})
|
||||
self.num_zeros = d.get('num_zeros',0)
|
||||
self.frozen_addresses = d.get('frozen_addresses',[])
|
||||
except:
|
||||
raise BaseException("cannot read wallet file")
|
||||
|
||||
|
@ -640,6 +643,9 @@ class Wallet:
|
|||
|
||||
coins = []
|
||||
domain = [from_addr] if from_addr else self.all_addresses()
|
||||
for i in self.frozen_addresses:
|
||||
if i in domain: domain.remove(i)
|
||||
|
||||
for addr in domain:
|
||||
h = self.history.get(addr)
|
||||
if h is None: continue
|
||||
|
|
Loading…
Reference in New Issue