1 from electrum.i18n import _
2 from PyQt4.QtGui import *
3 from PyQt4.QtCore import *
9 class WaitingDialog(QDialog):
10 def __init__(self, parent, message):
11 QDialog.__init__(self, parent)
12 self.setWindowTitle('Please wait')
14 vbox = QVBoxLayout(self)
18 def start(self, run_thread, on_complete=None):
20 self.result = run_thread()
21 self.emit(SIGNAL('done'))
25 self.connect(self, SIGNAL('done'), lambda: on_complete(*self.result))
27 threading.Thread(target=my_thread).start()
34 self.emit(SIGNAL('timersignal'))
38 class EnterButton(QPushButton):
39 def __init__(self, text, func):
40 QPushButton.__init__(self, text)
42 self.clicked.connect(func)
44 def keyPressEvent(self, e):
45 if e.key() == Qt.Key_Return:
52 class HelpButton(QPushButton):
53 def __init__(self, text):
54 QPushButton.__init__(self, '?')
55 self.setFocusPolicy(Qt.NoFocus)
56 self.setFixedWidth(20)
57 self.clicked.connect(lambda: QMessageBox.information(self, 'Help', text, 'OK') )
62 def close_button(dialog, label=_("Close") ):
65 b = QPushButton(label)
67 b.clicked.connect(dialog.close)
71 def ok_cancel_buttons2(dialog, ok_label=_("OK") ):
74 b = QPushButton(_("Cancel"))
76 b.clicked.connect(dialog.reject)
77 b = QPushButton(ok_label)
79 b.clicked.connect(dialog.accept)
83 def ok_cancel_buttons(dialog, ok_label=_("OK") ):
84 hbox, b = ok_cancel_buttons2(dialog, ok_label)
87 def text_dialog(parent, title, label, ok_label, default=None):
88 dialog = QDialog(parent)
89 dialog.setMinimumWidth(500)
90 dialog.setWindowTitle(title)
94 l.addWidget(QLabel(label))
99 l.addLayout(ok_cancel_buttons(dialog, ok_label))
101 return unicode(txt.toPlainText())
105 def address_field(addresses):
107 address_e = QLineEdit()
109 address_e.setText(addresses[0])
111 i = addresses.index(str(address_e.text())) + 1
112 i = i % len(addresses)
113 address_e.setText(addresses[i])
114 button = QPushButton(_('Address'))
115 button.clicked.connect(func)
116 hbox.addWidget(button)
117 hbox.addWidget(address_e)
118 return hbox, address_e
121 def filename_field(parent, config, defaultname, select_msg):
124 vbox.addWidget(QLabel(_("Format")))
125 gb = QGroupBox("format", parent)
126 b1 = QRadioButton(gb)
129 b2 = QRadioButton(gb)
130 b2.setText(_("json"))
136 directory = config.get('io_dir', unicode(os.path.expanduser('~')))
137 path = os.path.join( directory, defaultname )
138 filename_e = QLineEdit()
139 filename_e.setText(path)
142 text = unicode(filename_e.text())
143 _filter = "*.csv" if text.endswith(".csv") else "*.json" if text.endswith(".json") else None
144 p = unicode( QFileDialog.getSaveFileName(None, select_msg, text, _filter))
146 filename_e.setText(p)
148 button = QPushButton(_('File'))
149 button.clicked.connect(func)
150 hbox.addWidget(button)
151 hbox.addWidget(filename_e)
155 text = unicode(filename_e.text())
156 text = text.replace(".json",".csv") if v else text.replace(".csv",".json")
157 filename_e.setText(text)
159 b1.clicked.connect(lambda: set_csv(True))
160 b2.clicked.connect(lambda: set_csv(False))
162 return vbox, filename_e, b1
166 class MyTreeWidget(QTreeWidget):
167 def __init__(self, parent):
168 QTreeWidget.__init__(self, parent)
169 self.setContextMenuPolicy(Qt.CustomContextMenu)
170 self.connect(self, SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self.itemactivated)
172 def itemactivated(self, item):
174 for i in range(0,self.viewport().height()/5):
175 if self.itemAt(QPoint(0,i*5)) == item:
179 for j in range(0,30):
180 if self.itemAt(QPoint(0,i*5 + j)) != item:
182 self.emit(SIGNAL('customContextMenuRequested(const QPoint&)'), QPoint(50, i*5 + j - 1))
187 if __name__ == "__main__":
188 app = QApplication([])
189 WaitingDialog(None, 'testing ...').start(lambda: [time.sleep(1)], lambda x: QMessageBox.information(None, 'done', "done", _('OK')))