1 from electrum.i18n import _
2 from PyQt4.QtGui import *
3 from PyQt4.QtCore import *
9 class WaitingDialog(QThread):
10 def __init__(self, parent, message, run_task, on_complete=None):
11 QThread.__init__(self)
13 self.d = QDialog(parent)
14 self.d.setWindowTitle('Please wait')
16 vbox = QVBoxLayout(self.d)
18 self.run_task = run_task
19 self.on_complete = on_complete
20 self.d.connect(self.d, SIGNAL('done'), self.close)
24 self.result = self.run_task()
25 self.d.emit(SIGNAL('done'))
30 self.on_complete(*self.result)
37 self.emit(SIGNAL('timersignal'))
41 class EnterButton(QPushButton):
42 def __init__(self, text, func):
43 QPushButton.__init__(self, text)
45 self.clicked.connect(func)
47 def keyPressEvent(self, e):
48 if e.key() == Qt.Key_Return:
55 class HelpButton(QPushButton):
56 def __init__(self, text):
57 QPushButton.__init__(self, '?')
60 self.setFocusPolicy(Qt.NoFocus)
61 self.setFixedWidth(20)
62 self.clicked.connect(lambda: QMessageBox.information(self, 'Help', self.get_text(), 'OK') )
65 return self.alt_text if self.alt_text else self.help_text
73 def close_button(dialog, label=_("Close") ):
76 b = QPushButton(label)
78 b.clicked.connect(dialog.close)
82 def ok_cancel_buttons2(dialog, ok_label=_("OK") ):
85 b = QPushButton(_("Cancel"))
87 b.clicked.connect(dialog.reject)
88 b = QPushButton(ok_label)
90 b.clicked.connect(dialog.accept)
94 def ok_cancel_buttons(dialog, ok_label=_("OK") ):
95 hbox, b = ok_cancel_buttons2(dialog, ok_label)
98 def text_dialog(parent, title, label, ok_label, default=None):
99 dialog = QDialog(parent)
100 dialog.setMinimumWidth(500)
101 dialog.setWindowTitle(title)
105 l.addWidget(QLabel(label))
110 l.addLayout(ok_cancel_buttons(dialog, ok_label))
112 return unicode(txt.toPlainText())
116 def address_field(addresses):
118 address_e = QLineEdit()
120 address_e.setText(addresses[0])
122 i = addresses.index(str(address_e.text())) + 1
123 i = i % len(addresses)
124 address_e.setText(addresses[i])
125 button = QPushButton(_('Address'))
126 button.clicked.connect(func)
127 hbox.addWidget(button)
128 hbox.addWidget(address_e)
129 return hbox, address_e
132 def filename_field(parent, config, defaultname, select_msg):
135 vbox.addWidget(QLabel(_("Format")))
136 gb = QGroupBox("format", parent)
137 b1 = QRadioButton(gb)
140 b2 = QRadioButton(gb)
141 b2.setText(_("json"))
147 directory = config.get('io_dir', unicode(os.path.expanduser('~')))
148 path = os.path.join( directory, defaultname )
149 filename_e = QLineEdit()
150 filename_e.setText(path)
153 text = unicode(filename_e.text())
154 _filter = "*.csv" if text.endswith(".csv") else "*.json" if text.endswith(".json") else None
155 p = unicode( QFileDialog.getSaveFileName(None, select_msg, text, _filter))
157 filename_e.setText(p)
159 button = QPushButton(_('File'))
160 button.clicked.connect(func)
161 hbox.addWidget(button)
162 hbox.addWidget(filename_e)
166 text = unicode(filename_e.text())
167 text = text.replace(".json",".csv") if v else text.replace(".csv",".json")
168 filename_e.setText(text)
170 b1.clicked.connect(lambda: set_csv(True))
171 b2.clicked.connect(lambda: set_csv(False))
173 return vbox, filename_e, b1
177 class MyTreeWidget(QTreeWidget):
178 def __init__(self, parent):
179 QTreeWidget.__init__(self, parent)
180 self.setContextMenuPolicy(Qt.CustomContextMenu)
181 self.connect(self, SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self.itemactivated)
183 def itemactivated(self, item):
185 for i in range(0,self.viewport().height()/5):
186 if self.itemAt(QPoint(0,i*5)) == item:
190 for j in range(0,30):
191 if self.itemAt(QPoint(0,i*5 + j)) != item:
193 self.emit(SIGNAL('customContextMenuRequested(const QPoint&)'), QPoint(50, i*5 + j - 1))
198 if __name__ == "__main__":
199 app = QApplication([])
200 t = WaitingDialog(None, 'testing ...', lambda: [time.sleep(1)], lambda x: QMessageBox.information(None, 'done', "done", _('OK')))