Browse Source

text GUI: simplify show_request

patch-4
ThomasV 3 years ago
parent
commit
725c70bc4a
  1. 70
      electrum/gui/text.py

70
electrum/gui/text.py

@ -86,7 +86,6 @@ class ElectrumGui(BaseElectrumGui, EventListener):
self.tab = 0
self.pos = 0
self.popup_pos = 0
self.qr_mode = 0
self.str_recipient = ""
self.str_description = ""
@ -234,30 +233,12 @@ class ElectrumGui(BaseElectrumGui, EventListener):
self.buttons[self.pos]()
elif self.pos >= 5 and c == 10:
key = self.requests[self.pos - 5]
self.show_request_menu(key)
self.show_request(key)
def question(self, msg):
out = self.run_popup(msg, ["No", "Yes"]).get('button')
return out == "Yes"
def show_request_menu(self, key):
req = self.wallet.get_request(key)
addr = req.get_address() or ''
URI = req.get_bip21_URI()
lnaddr = req.lightning_invoice or ''
out = self.run_popup('Request', ["View", "Copy address", "Copy URI", "Copy Lightning Invoice", "Delete"]).get('button')
if out == "Delete":
self.wallet.delete_request(key)
self.max_pos -= 1
elif out == "Copy address":
pyperclip.copy(addr)
elif out == "Copy URI":
pyperclip.copy(URI)
elif out == "Copy Lightning Invoice":
pyperclip.copy(lnaddr)
elif out == "View":
self.show_request(key)
def show_invoice_menu(self):
key = self.invoices[self.pos - 7]
invoice = self.wallet.get_invoice(key)
@ -858,11 +839,11 @@ class ElectrumGui(BaseElectrumGui, EventListener):
break
return out
def print_textbox(self, w, y, x, _text, pos):
def print_textbox(self, w, y, x, _text, highlighted):
width = 60
for i in range(len(_text)//width + 1):
s = _text[i*width:(i+1)*width]
w.addstr(y+i, x, s, curses.A_REVERSE if self.qr_mode == pos else curses.A_NORMAL)
w.addstr(y+i, x, s, curses.A_REVERSE if highlighted else curses.A_NORMAL)
return i
def show_request(self, key):
@ -870,31 +851,31 @@ class ElectrumGui(BaseElectrumGui, EventListener):
addr = req.get_address() or ''
URI = req.get_bip21_URI()
lnaddr = req.lightning_invoice or ''
self.w = curses.newwin(self.maxy - 2, self.maxx - 2, 1, 1)
w = self.w
w = curses.newwin(self.maxy - 2, self.maxx - 2, 1, 1)
pos = 4
while True:
if self.qr_mode == 0:
text = addr
data = addr
elif self.qr_mode == 1:
if pos == 1:
text = URI
data = URI
elif self.qr_mode == 2:
elif pos == 2:
text = lnaddr
data = lnaddr.upper()
else:
text = addr
data = addr
w.clear()
w.border(0)
w.addstr(0, 2, ' ' + _('Payment Request') + ' ')
y = 2
w.addstr(y, 2, "Address")
h1 = self.print_textbox(w, y, 13, addr, 0)
h1 = self.print_textbox(w, y, 13, addr, pos==0)
y += h1 + 2
w.addstr(y, 2, "URI")
h2 = self.print_textbox(w, y, 13, URI, 1)
h2 = self.print_textbox(w, y, 13, URI, pos==1)
y += h2 + 2
w.addstr(y, 2, "Lightning")
h3 = self.print_textbox(w, y, 13, lnaddr, 2)
h3 = self.print_textbox(w, y, 13, lnaddr, pos==2)
y += h3 + 2
lines = self.get_qr(data)
qr_width = len(lines) * 2
@ -902,19 +883,28 @@ class ElectrumGui(BaseElectrumGui, EventListener):
if x > 60:
self.print_qr(w, 1, x, lines)
else:
w.addstr(y, 2, "Window too small for qr code")
w.addstr(y, 35, "(Window too small for QR code)")
w.addstr(y, 13, "[Delete]", curses.A_REVERSE if pos==3 else curses.color_pair(2))
w.addstr(y, 25, "[Close]", curses.A_REVERSE if pos==4 else curses.color_pair(2))
w.refresh()
c = self.getch()
if c in [curses.KEY_UP]:
self.qr_mode -= 1
pos -= 1
elif c in [curses.KEY_DOWN, 9]:
self.qr_mode +=1
elif c == ord(' '):
pyperclip.copy(text)
self.print_clipboard()
pos +=1
elif c == 10:
if pos in [0,1,2]:
pyperclip.copy(text)
self.show_message('Text copied to clipboard')
elif pos == 3:
if self.question("Delete Request?"):
self.wallet.delete_request(key)
self.max_pos -= 1
break
elif pos ==4:
break
else:
break
self.qr_mode = self.qr_mode % 3
pos = pos % 5
self.stdscr.refresh()
return

Loading…
Cancel
Save