1 from electrum_nvc.i18n import _
2 from PyQt4.QtGui import *
3 from PyQt4.QtCore import *
10 class WaitingDialog(QThread):
11 def __init__(self, parent, message, run_task, on_complete=None):
12 QThread.__init__(self)
14 self.d = QDialog(parent)
15 self.d.setWindowTitle('Please wait')
17 vbox = QVBoxLayout(self.d)
19 self.run_task = run_task
20 self.on_complete = on_complete
21 self.d.connect(self.d, SIGNAL('done'), self.close)
27 self.result = self.run_task()
28 except Exception as e:
29 traceback.print_exc(file=sys.stdout)
31 self.d.emit(SIGNAL('done'))
36 QMessageBox.warning(self.parent, _('Error'), self.error, _('OK'))
40 if type(self.result) is tuple:
41 self.on_complete(*self.result)
43 self.on_complete(self.result)
50 self.emit(SIGNAL('timersignal'))
54 class EnterButton(QPushButton):
55 def __init__(self, text, func):
56 QPushButton.__init__(self, text)
58 self.clicked.connect(func)
60 def keyPressEvent(self, e):
61 if e.key() == Qt.Key_Return:
68 class HelpButton(QPushButton):
69 def __init__(self, text):
70 QPushButton.__init__(self, '?')
72 self.setFocusPolicy(Qt.NoFocus)
73 self.setFixedWidth(20)
75 self.clicked.connect(self.onclick)
77 def set_alt(self, func):
84 QMessageBox.information(self, 'Help', self.help_text, 'OK')
88 def close_button(dialog, label=_("Close") ):
91 b = QPushButton(label)
93 b.clicked.connect(dialog.close)
97 def ok_cancel_buttons2(dialog, ok_label=_("OK") ):
100 b = QPushButton(_("Cancel"))
102 b.clicked.connect(dialog.reject)
103 b = QPushButton(ok_label)
105 b.clicked.connect(dialog.accept)
109 def ok_cancel_buttons(dialog, ok_label=_("OK") ):
110 hbox, b = ok_cancel_buttons2(dialog, ok_label)
113 def line_dialog(parent, title, label, ok_label, default=None):
114 dialog = QDialog(parent)
115 dialog.setMinimumWidth(500)
116 dialog.setWindowTitle(title)
120 l.addWidget(QLabel(label))
125 l.addLayout(ok_cancel_buttons(dialog, ok_label))
127 return unicode(txt.text())
129 def text_dialog(parent, title, label, ok_label, default=None):
130 from qrtextedit import QRTextEdit
131 dialog = QDialog(parent)
132 dialog.setMinimumWidth(500)
133 dialog.setWindowTitle(title)
137 l.addWidget(QLabel(label))
142 l.addLayout(ok_cancel_buttons(dialog, ok_label))
144 return unicode(txt.toPlainText())
148 def address_field(addresses):
150 address_e = QLineEdit()
152 address_e.setText(addresses[0])
154 i = addresses.index(str(address_e.text())) + 1
155 i = i % len(addresses)
156 address_e.setText(addresses[i])
157 button = QPushButton(_('Address'))
158 button.clicked.connect(func)
159 hbox.addWidget(button)
160 hbox.addWidget(address_e)
161 return hbox, address_e
164 def filename_field(parent, config, defaultname, select_msg):
167 vbox.addWidget(QLabel(_("Format")))
168 gb = QGroupBox("format", parent)
169 b1 = QRadioButton(gb)
172 b2 = QRadioButton(gb)
173 b2.setText(_("json"))
179 directory = config.get('io_dir', unicode(os.path.expanduser('~')))
180 path = os.path.join( directory, defaultname )
181 filename_e = QLineEdit()
182 filename_e.setText(path)
185 text = unicode(filename_e.text())
186 _filter = "*.csv" if text.endswith(".csv") else "*.json" if text.endswith(".json") else None
187 p = unicode( QFileDialog.getSaveFileName(None, select_msg, text, _filter))
189 filename_e.setText(p)
191 button = QPushButton(_('File'))
192 button.clicked.connect(func)
193 hbox.addWidget(button)
194 hbox.addWidget(filename_e)
198 text = unicode(filename_e.text())
199 text = text.replace(".json",".csv") if v else text.replace(".csv",".json")
200 filename_e.setText(text)
202 b1.clicked.connect(lambda: set_csv(True))
203 b2.clicked.connect(lambda: set_csv(False))
205 return vbox, filename_e, b1
209 class MyTreeWidget(QTreeWidget):
210 def __init__(self, parent):
211 QTreeWidget.__init__(self, parent)
212 self.setContextMenuPolicy(Qt.CustomContextMenu)
213 self.connect(self, SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self.itemactivated)
215 def itemactivated(self, item):
217 for i in range(0,self.viewport().height()/5):
218 if self.itemAt(QPoint(0,i*5)) == item:
222 for j in range(0,30):
223 if self.itemAt(QPoint(0,i*5 + j)) != item:
225 self.emit(SIGNAL('customContextMenuRequested(const QPoint&)'), QPoint(50, i*5 + j - 1))
230 if __name__ == "__main__":
231 app = QApplication([])
232 t = WaitingDialog(None, 'testing ...', lambda: [time.sleep(1)], lambda x: QMessageBox.information(None, 'done', "done", _('OK')))