Browse Source

text GUI: simplify show_request

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

68
electrum/gui/text.py

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

Loading…
Cancel
Save