diff --git a/electrum/gui/text.py b/electrum/gui/text.py index 652db32a5..8cbea9c67 100644 --- a/electrum/gui/text.py +++ b/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