Improve text gui. Disable print_error when text gui is used.
[electrum-nvc.git] / lib / gui_text.py
1 import curses, datetime
2 from decimal import Decimal
3 from util import format_satoshis, set_verbosity
4
5 WIDTH=150
6
7 class ElectrumGui:
8
9     def __init__(self, wallet, config, app=None):
10         self.wallet = wallet
11         self.config = config
12         self.stdscr = curses.initscr()
13         curses.noecho()
14         curses.cbreak()
15         curses.start_color()
16         self.stdscr.keypad(1)
17         self.stdscr.border(0)
18         self.maxy, self.maxx = self.stdscr.getmaxyx()
19         set_verbosity(False)
20         
21     def server_list_changed(self):
22         pass
23
24     def restore_or_create(self):
25         pass
26
27     def print_history(self):
28         b = 0 
29         messages = []
30         for line in self.wallet.get_tx_history():
31             v = line['value'] 
32             b += v
33             try:
34                 time_str = str( datetime.datetime.fromtimestamp( line['timestamp']))
35             except:
36                 print line['timestamp']
37                 time_str = 'pending'
38             label = line.get('label')
39             if not label: label = line['tx_hash']
40             else: label = label + ' '*(64 - len(label) )
41             messages.append( time_str + "  " + label + "  " + format_satoshis(v)+ "  "+ format_satoshis(b) )
42
43         self.print_list(messages, "%19s  %64s %14s %10s"%("Date", "Description", "Amount", "Balance"))
44
45
46     def print_balance(self):
47         c, u =  self.wallet.get_balance()
48         msg = "Balance: %f"%(Decimal( c ) / 100000000)
49         if u:
50             msg += "  [%f unconfirmed]"%(Decimal( u ) / 100000000)
51         self.stdscr.addstr( self.maxy -3, 2, msg)
52         self.stdscr.addstr( self.maxy -1, 1, " History Send Receive Contacts Quit ")
53
54     def print_contacts(self):
55         messages = map(lambda addr: "%30s    %30s       "%(addr, self.wallet.labels.get(addr,"")), self.wallet.addressbook)
56         self.print_list(messages, "%19s  %25s "%("Address", "Label"))
57
58     def print_receive(self):
59         messages = map(lambda addr: "%30s    %30s       "%(addr, self.wallet.labels.get(addr,"")), self.wallet.addresses)
60         self.print_list(messages, "%19s  %25s "%("Address", "Label"))
61
62     def print_send_dialog(self):
63         self.stdscr.clear()
64         self.stdscr.addstr( 3, 2, "Pay to")
65         self.stdscr.addstr( 5, 2, "Description")
66         self.stdscr.addstr( 7, 2, "Amount")
67         self.stdscr.addstr( 9, 2, "Fee")
68         
69         while True:
70             curses.echo()
71             s = self.stdscr.getstr(3, 15)
72             curses.noecho()
73
74             if s: break
75         pass
76
77
78     def print_list(self, list, firstline):
79         firstline += " "*(self.maxx -2 - len(firstline))
80         self.stdscr.addstr( 1, 1, firstline )
81         for i in range(self.maxy-6):
82             msg = list[i] if i < len(list) else ""
83             msg += " "*(self.maxx -2 - len(msg))
84             self.stdscr.addstr( i+2, 1, msg[0:self.maxx - 2])
85
86     def refresh(self):
87         self.print_balance()
88         self.stdscr.refresh()
89
90     def main(self,url):
91         self.print_history()
92         self.refresh()
93
94         while 1:
95             c = self.stdscr.getch()
96             if c == ord('h'): self.print_history()
97             if c == ord('c'): self.print_contacts()
98             if c == ord('r'): self.print_receive()
99             if c == ord('s'): self.print_send_dialog()
100             elif c == ord('q'): break
101             elif c == curses.KEY_HOME: x = y = 0
102             self.refresh()
103
104         curses.nocbreak();
105         self.stdscr.keypad(0);
106         curses.echo()            
107         curses.endwin()
108