616ba2f902987b57bf253d24f22ade49d4fdfed9
[electrum-nvc.git] / gui / qt / util.py
1 from electrum.i18n import _
2 from PyQt4.QtGui import *
3 from PyQt4.QtCore import *
4 import os.path
5 import time
6
7
8 class Timer(QThread):
9     def run(self):
10         while True:
11             self.emit(SIGNAL('timersignal'))
12             time.sleep(0.5)
13
14
15 class EnterButton(QPushButton):
16     def __init__(self, text, func):
17         QPushButton.__init__(self, text)
18         self.func = func
19         self.clicked.connect(func)
20
21     def keyPressEvent(self, e):
22         if e.key() == Qt.Key_Return:
23             apply(self.func,())
24
25
26
27
28
29 class HelpButton(QPushButton):
30     def __init__(self, text):
31         QPushButton.__init__(self, '?')
32         self.setFocusPolicy(Qt.NoFocus)
33         self.setFixedWidth(20)
34         self.clicked.connect(lambda: QMessageBox.information(self, 'Help', text, 'OK') )
35
36
37
38
39 def close_button(dialog, label=_("Close") ):
40     hbox = QHBoxLayout()
41     hbox.addStretch(1)
42     b = QPushButton(label)
43     hbox.addWidget(b)
44     b.clicked.connect(dialog.close)
45     b.setDefault(True)
46     return hbox
47
48 def ok_cancel_buttons2(dialog, ok_label=_("OK") ):
49     hbox = QHBoxLayout()
50     hbox.addStretch(1)
51     b = QPushButton(_("Cancel"))
52     hbox.addWidget(b)
53     b.clicked.connect(dialog.reject)
54     b = QPushButton(ok_label)
55     hbox.addWidget(b)
56     b.clicked.connect(dialog.accept)
57     b.setDefault(True)
58     return hbox, b
59
60 def ok_cancel_buttons(dialog, ok_label=_("OK") ):
61     hbox, b = ok_cancel_buttons2(dialog, ok_label)
62     return hbox
63
64 def text_dialog(parent, title, label, ok_label, default=None):
65     dialog = QDialog(parent)
66     dialog.setMinimumWidth(500)
67     dialog.setWindowTitle(title)
68     dialog.setModal(1)
69     l = QVBoxLayout()
70     dialog.setLayout(l)
71     l.addWidget(QLabel(label))
72     txt = QTextEdit()
73     if default:
74         txt.setText(default)
75     l.addWidget(txt)
76     l.addLayout(ok_cancel_buttons(dialog, ok_label))
77     if dialog.exec_():
78         return unicode(txt.toPlainText())
79
80
81
82 def address_field(addresses):
83     hbox = QHBoxLayout()
84     address_e = QLineEdit()
85     if addresses:
86         address_e.setText(addresses[0])
87     def func():
88         i = addresses.index(str(address_e.text())) + 1
89         i = i % len(addresses)
90         address_e.setText(addresses[i])
91     button = QPushButton(_('Address'))
92     button.clicked.connect(func)
93     hbox.addWidget(button)
94     hbox.addWidget(address_e)
95     return hbox, address_e
96
97
98 def filename_field(parent, config, defaultname, select_msg):
99
100     vbox = QVBoxLayout()
101     vbox.addWidget(QLabel(_("Format")))
102     gb = QGroupBox("format", parent)
103     b1 = QRadioButton(gb)
104     b1.setText(_("CSV"))
105     b1.setChecked(True)
106     b2 = QRadioButton(gb)
107     b2.setText(_("json"))
108     vbox.addWidget(b1)
109     vbox.addWidget(b2)
110         
111     hbox = QHBoxLayout()
112
113     directory = config.get('io_dir', unicode(os.path.expanduser('~')))
114     path = os.path.join( directory, defaultname )
115     filename_e = QLineEdit()
116     filename_e.setText(path)
117
118     def func():
119         text = unicode(filename_e.text())
120         _filter = "*.csv" if text.endswith(".csv") else "*.json" if text.endswith(".json") else None
121         p = unicode( QFileDialog.getSaveFileName(None, select_msg, text, _filter))
122         if p:
123             filename_e.setText(p)
124
125     button = QPushButton(_('File'))
126     button.clicked.connect(func)
127     hbox.addWidget(button)
128     hbox.addWidget(filename_e)
129     vbox.addLayout(hbox)
130
131     def set_csv(v):
132         text = unicode(filename_e.text())
133         text = text.replace(".json",".csv") if v else text.replace(".csv",".json")
134         filename_e.setText(text)
135
136     b1.clicked.connect(lambda: set_csv(True))
137     b2.clicked.connect(lambda: set_csv(False))
138
139     return vbox, filename_e, b1
140
141
142
143 class MyTreeWidget(QTreeWidget):
144     def __init__(self, parent):
145         QTreeWidget.__init__(self, parent)
146         self.setContextMenuPolicy(Qt.CustomContextMenu)
147         self.connect(self, SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self.itemactivated)
148
149     def itemactivated(self, item):
150         if not item: return
151         for i in range(0,self.viewport().height()/5):
152             if self.itemAt(QPoint(0,i*5)) == item:
153                 break
154         else:
155             return
156         for j in range(0,30):
157             if self.itemAt(QPoint(0,i*5 + j)) != item:
158                 break
159         self.emit(SIGNAL('customContextMenuRequested(const QPoint&)'), QPoint(50, i*5 + j - 1))
160