tsimplification - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 5fac0ecfc41cb84211bfcab2fab9d5b3de4e4dd4 DIR parent e2add776bcf8cef6241d67167a5d7ff52f377780 HTML Author: ThomasV <thomasv@gitorious> Date: Tue, 30 Oct 2012 21:28:46 +0100 simplification Diffstat: M lib/gui_text.py | 161 ++++++++++++++----------------- 1 file changed, 71 insertions(+), 90 deletions(-) --- DIR diff --git a/lib/gui_text.py b/lib/gui_text.py t@@ -9,27 +9,24 @@ from util import format_satoshis, set_verbosity class ElectrumGui: def __init__(self, wallet, config, app=None): - self.wallet = wallet - self.config = config self.stdscr = curses.initscr() - - #c = self.stdscr.getch() - #print c - curses.noecho() curses.cbreak() curses.start_color() curses.use_default_colors() curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLUE) - self.stdscr.keypad(1) self.stdscr.border(0) self.maxy, self.maxx = self.stdscr.getmaxyx() + curses.curs_set(0) + self.w = curses.newwin(10, 50, 5, 5) + + self.wallet = wallet + self.config = config set_verbosity(False) self.tab = 0 self.pos = 0 self.popup_pos = 0 - self.w = None self.str_recipient = "" self.str_description = "" t@@ -42,8 +39,6 @@ class ElectrumGui: self.wallet.interface.register_callback('disconnecting', self.refresh) self.tab_names = [_("History"), _("Send"), _("Receive"), _("Contacts"), _("Wall")] self.num_tabs = len(self.tab_names) - curses.curs_set(0) - if not self.w: self.w = curses.newwin(10, 50, 5, 5) def server_list_changed(self): pass t@@ -140,7 +135,6 @@ class ElectrumGui: self.print_send_tab() def print_banner(self): - self.stdscr.clear() self.stdscr.addstr( 1, 1, self.wallet.banner ) def print_list(self, list, firstline): t@@ -156,62 +150,71 @@ class ElectrumGui: self.print_balance() self.stdscr.refresh() - def main(self,url): - self.print_history() - self.refresh() - - while True: - c = self.stdscr.getch() - - if c == curses.KEY_RIGHT: self.tab = (self.tab + 1)%self.num_tabs - elif c == curses.KEY_LEFT: self.tab = (self.tab - 1)%self.num_tabs - - elif c == curses.KEY_DOWN: self.pos +=1 - elif c == curses.KEY_UP: self.pos -= 1 - elif c == 9: self.pos +=1 # tab - - elif c in [27, ord('q')]: break - elif c == 10: self.exec_popup() - - elif c == ord('n'): self.network_dialog() - elif c == ord('s'): self.settings_dialog() - - if self.tab == 0: - self.print_history() - elif self.tab == 1: - self.print_send_tab() - elif self.tab == 2: - self.print_receive() - elif self.tab == 3: - self.print_contacts() - else: - self.print_banner() + def main_command(self): + c = self.stdscr.getch() + if c == curses.KEY_RIGHT: self.tab = (self.tab + 1)%self.num_tabs + elif c == curses.KEY_LEFT: self.tab = (self.tab - 1)%self.num_tabs + elif c == curses.KEY_DOWN: self.pos +=1 + elif c == curses.KEY_UP: self.pos -= 1 + elif c == 9: self.pos +=1 # tab + elif c in [27, ord('q')]: self.tab = -1 + elif c == ord('n'): self.network_dialog() + elif c == ord('s'): self.settings_dialog() + else: return c + + def run_tab(self, i, print_func, exec_func): + while self.tab == i: + self.stdscr.clear() + print_func() self.refresh() + c = self.main_command() + if c: exec_func(c) - curses.nocbreak(); - self.stdscr.keypad(0); - curses.echo() - curses.endwin() - - def exec_popup(self): - if self.tab == 0: + def run_history_tab(self, c): + if c == 10: out = self.run_popup('',["blah","foo"]) - elif self.tab == 1: + + + def run_send_tab(self, c): + if c == 10: if self.pos%5==4: self.do_send() else: self.getstr_send() self.print_send_tab() - elif self.tab == 2: - out = self.run_popup('', ["blah"]) - elif self.tab == 3: - out = self.run_popup('', ["Pay to","Edit label"]) + + def run_receive_tab(self, c): + if c == 10: + out = self.run_popup('Address', ["Edit label","Freeze","Prioritize"]) + + def run_contacts_tab(self, c): + if c == 10: + out = self.run_popup('Adress', ["Copy", "Pay to", "Edit label", "Delete"]).get('button') if out == "Pay to": self.tab = 1 self.str_recipient = self.wallet.addressbook[self.pos%len(self.wallet.addressbook)] self.pos = 2 - + elif out == "Edit label": + s = self.stdscr.getstr(3+i, 15) + pass + + def run_banner_tab(self, c): + pass + + def main(self,url): + + while self.tab != -1: + self.run_tab(0, self.print_history, self.run_history_tab) + self.run_tab(1, self.print_send_tab, self.run_send_tab) + self.run_tab(2, self.print_receive, self.run_receive_tab) + self.run_tab(3, self.print_contacts, self.run_contacts_tab) + self.run_tab(4, self.print_banner, self.run_banner_tab) + + curses.nocbreak(); + self.stdscr.keypad(0); + curses.echo() + curses.endwin() t@@ -247,60 +250,40 @@ class ElectrumGui: c = self.stdscr.getch() - def run_popup(self, text, items): - "multiple choices" - w = self.w - while True: - w.clear() - w.border(0) - w.addstr(2,2,text) - for i in range(len(items)): - item = items[i] - w.addstr( 4 + i, 2, item, curses.A_REVERSE if self.popup_pos%(len(items))==i else 0) - w.refresh() - - answer = False - c = self.stdscr.getch() - if c == 10: - answer = True - break - elif c == 27: - break - elif c == curses.KEY_UP: self.popup_pos -= 1 - elif c == curses.KEY_DOWN: self.popup_pos +=1 - - if answer: return items[self.popup_pos%(len(items))] + def run_popup(self, title, items): + return self.run_dialog(title, map(lambda x: {'type':'button','label':x}, items), interval=1, y_pos = self.pos+3) def network_dialog(self): out = self.run_dialog('Network', [ {'label':'server', 'type':'str', 'value':self.wallet.interface.server}, {'label':'proxy', 'type':'str', 'value':self.config.get('proxy')}, - ]) + ], buttons = 1) if out: if out.get('server'): self.wallet.interface.set_server(out.get('server')) + def settings_dialog(self): out = self.run_dialog('Settings', [ {'label':'Default GUI', 'type':'list', 'choices':['classic','lite','gtk','text'], 'value':self.config.get('gui')}, {'label':'Default fee', 'type':'satoshis', 'value':self.config.get('fee')} - ]) + ], buttons = 1) if out: if out.get('Default GUI'): self.config.set_key('gui', out['Default GUI'], True) + def password_dialog(self): out = self.run_dialog('Password', [ {'label':'Password', 'type':'str'} - ]) + ], buttons = 1) return out - - - def run_dialog(self, title, items): + def run_dialog(self, title, items, interval=2, buttons=None, y_pos=3): + self.w = curses.newwin( 2+len(items)*interval, 50, y_pos, 5) w = self.w #items.append({'label':'cancel','type':'button'}) - items.append({'label':' ok ','type':'button'}) + if buttons: items.append({'label':' ok ','type':'button'}) out = {} while True: w.clear() t@@ -320,10 +303,10 @@ class ElectrumGui: else: value = None if value: - w.addstr( 2+2*i, 2, label) - w.addstr( 2+2*i, 15, value, curses.A_REVERSE if self.popup_pos%num==i else curses.color_pair(1) ) + w.addstr( 1+interval*i, 2, label) + w.addstr( 1+interval*i, 15, value, curses.A_REVERSE if self.popup_pos%num==i else curses.color_pair(1) ) else: - w.addstr( 2+2*i, 15, label, curses.A_REVERSE if self.popup_pos%num==i else 0) + w.addstr( 1+interval*i, 2, label, curses.A_REVERSE if self.popup_pos%num==i else 0) w.refresh() t@@ -368,11 +351,9 @@ class ElectrumGui: elif _type == 'button': + out['button'] = item.get('label') break return out - - -