diff --git a/electrum/gui/text.py b/electrum/gui/text.py index e34dbca93..5eeef8828 100644 --- a/electrum/gui/text.py +++ b/electrum/gui/text.py @@ -226,15 +226,16 @@ class ElectrumGui(BaseElectrumGui, EventListener): def print_receive_tab(self): self.stdscr.clear() self.buttons = {} - self.max_pos = 5 + len(list(self.wallet.get_unpaid_requests())) + self.max_pos = 6 + len(list(self.wallet.get_unpaid_requests())) self.index = 0 self.add_edit_line(3, 2, _("Description"), self.str_recv_description, 40) self.add_edit_line(5, 2, _("Amount"), self.str_recv_amount, 15) self.stdscr.addstr(5, 31, self.config.get_base_unit()) self.add_edit_line(7, 2, _("Expiry"), self.str_recv_expiry, 15) - self.add_button(9, 15, _("[Create]"), self.do_create_request) - self.add_button(9, 25, _("[Clear]"), self.do_clear_request) - self.print_requests_list(13, 2, offset_pos=5) + self.add_button(9, 15, _("[Clear]"), self.do_clear_request) + self.add_button(9, 25, _("[Onchain]"), lambda: self.do_create_request(lightning=False)) + self.add_button(9, 35, _("[Lightning]"), lambda: self.do_create_request(lightning=True)) + self.print_requests_list(13, 2, offset_pos=6) return def run_receive_tab(self, c): @@ -244,8 +245,8 @@ class ElectrumGui(BaseElectrumGui, EventListener): self.str_recv_amount = self.edit_str(self.str_recv_amount, c) elif self.pos in self.buttons and c == ord("\n"): self.buttons[self.pos]() - elif self.pos >= 5 and c == ord("\n"): - key = self.requests[self.pos - 5] + elif self.pos >= 6 and c == ord("\n"): + key = self.requests[self.pos - 6] self.show_request(key) def question(self, msg): @@ -557,19 +558,22 @@ class ElectrumGui(BaseElectrumGui, EventListener): self.str_fee = '' self.str_description = '' - def do_create_request(self): - amount_sat = self.parse_amount(self.str_recv_amount) - if not amount_sat: - self.show_message(_('Invalid Amount')) - return - if amount_sat < self.wallet.dust_threshold(): - address = None - if not self.wallet.has_lightning(): + def do_create_request(self, lightning:bool): + amount_sat = self.parse_amount(self.str_recv_amount) or 0 + if not lightning: + if amount_sat and amount_sat < self.wallet.dust_threshold(): + self.show_message(_('Amount too low')) return - else: address = self.wallet.get_unused_address() if not address: + self.show_message(_('Nor more unused sddress')) return + else: + if not self.wallet.has_lightning(): + self.show_message(_('Lightning is disabled on this wallet')) + return + address = None + message = self.str_recv_description expiry = self.config.WALLET_PAYREQ_EXPIRY_SECONDS key = self.wallet.create_request(amount_sat, message, expiry, address) @@ -877,31 +881,26 @@ class ElectrumGui(BaseElectrumGui, EventListener): URI = self.wallet.get_request_URI(req) or '' lnaddr = self.wallet.get_bolt11_invoice(req) or '' w = curses.newwin(self.maxy - 2, self.maxx - 2, 1, 1) - pos = 4 + pos = 2 + text = URI or addr or lnaddr + data = URI or addr or lnaddr.upper() while True: - if pos == 1: - text = URI - data = URI - 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, pos==0) - y += h1 + 2 - w.addstr(y, 2, "URI") - 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, pos==2) - y += h3 + 2 + if URI: + w.addstr(y, 2, "URI") + h = self.print_textbox(w, y, 13, URI, False) + elif addr: + w.addstr(y, 2, "Address") + h = self.print_textbox(w, y, 13, addr, False) + elif lnaddr: + w.addstr(y, 2, "Lightning") + h = self.print_textbox(w, y, 13, lnaddr, False) + else: + return + y += h + 2 lines = self.get_qr(data) qr_width = len(lines) * 2 x = self.maxx - qr_width @@ -909,27 +908,28 @@ class ElectrumGui(BaseElectrumGui, EventListener): self.print_qr(w, 1, x, lines) else: 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.addstr(y, 13, "[Copy]", curses.A_REVERSE if pos==0 else curses.color_pair(2)) + w.addstr(y, 23, "[Delete]", curses.A_REVERSE if pos==1 else curses.color_pair(2)) + w.addstr(y, 35, "[Close]", curses.A_REVERSE if pos==2 else curses.color_pair(2)) w.refresh() c = self.getch() - if c in [curses.KEY_UP]: + if c in [curses.KEY_UP, curses.KEY_LEFT]: pos -= 1 - elif c in [curses.KEY_DOWN, ord("\t")]: + elif c in [curses.KEY_DOWN, curses.KEY_RIGHT, ord("\t")]: pos += 1 elif c == ord("\n"): - if pos in [0,1,2]: + if pos == 0: pyperclip.copy(text) self.show_message('Text copied to clipboard') - elif pos == 3: + elif pos == 1: if self.question("Delete Request?"): self.wallet.delete_request(key) self.max_pos -= 1 break - elif pos ==4: + elif pos == 2: break else: break - pos = pos % 5 + pos = pos % 3 self.stdscr.refresh() return