tPopup for receiving Bitcoins. - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 8b11efb3278c02c56a950bdfe3d2bf9b93392a52 DIR parent 40a4bf3c913508e96439b7a6c228be56737b1a8b HTML Author: Amir Taaki <genjix@riseup.net> Date: Thu, 5 Jul 2012 17:33:26 +0200 Popup for receiving Bitcoins. Diffstat: M lib/gui_lite.py | 64 +++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 11 deletions(-) --- DIR diff --git a/lib/gui_lite.py b/lib/gui_lite.py t@@ -29,6 +29,12 @@ class Timer(QThread): self.emit(SIGNAL('timersignal')) time.sleep(0.5) +def resize_line_edit_width(line_edit, text_input): + metrics = QFontMetrics(qApp.font()) + # Create an extra character to add some space on the end + text_input += "A" + line_edit.setMinimumWidth(metrics.width(text_input)) + class ElectrumGui: def __init__(self, wallet): t@@ -119,19 +125,18 @@ class MiniWindow(QDialog): self.balance_label = BalanceLabel(self.change_quote_currency) self.balance_label.setObjectName("balance_label") - copy_button = QPushButton(_("&Copy My Address")) - copy_button.setObjectName("copy_button") - copy_button.setDefault(True) - self.connect(copy_button, SIGNAL("clicked()"), - self.actuator.copy_address) + self.receive_button = QPushButton(_("&Receive")) + self.receive_button.setObjectName("receive_button") + self.receive_button.setDefault(True) + self.connect(self.receive_button, SIGNAL("clicked()"), + self.copy_address) self.address_input = TextedLineEdit(_("Enter a Bitcoin address...")) self.address_input.setObjectName("address_input") self.connect(self.address_input, SIGNAL("textEdited(QString)"), self.address_field_changed) - metrics = QFontMetrics(qApp.font()) - self.address_input.setMinimumWidth( - metrics.width("1E4vM9q25xsyDwWwdqHUWnwshdWC9PykmL")) + resize_line_edit_width(self.address_input, + "1E4vM9q25xsyDwWwdqHUWnwshdWC9PykmL") self.address_completions = QStringListModel() address_completer = QCompleter(self.address_input) t@@ -173,7 +178,7 @@ class MiniWindow(QDialog): main_layout.addWidget(expand_button, 2, 0) main_layout.addWidget(self.balance_label, 0, 1) - main_layout.addWidget(copy_button, 0, 2) + main_layout.addWidget(self.receive_button, 0, 2) main_layout.addLayout(address_layout, 1, 1, 1, -1) t@@ -264,6 +269,10 @@ class MiniWindow(QDialog): else: self.valid_address.setChecked(False) + def copy_address(self): + receive_popup = ReceivePopup(self.receive_button) + self.actuator.copy_address(receive_popup) + def update_completions(self, completions): self.address_completions.setStringList(completions) t@@ -391,15 +400,48 @@ class PasswordDialog(QDialog): return return unicode(self.password_input.text()) +class ReceivePopup(QDialog): + + def __init__(self, parent=None): + super(QDialog, self).__init__(parent) + #self.setFrameStyle(QFrame.WinPanel|QFrame.Raised) + #self.setAlignment(Qt.AlignCenter) + self.setMouseTracking(True) + + def mouseMoveEvent(self, event): + if not self.rect().contains(event.pos()): + self.close() + + def set_address(self, address): + label = QLabel(_("Copied your Bitcoin address to the clipboard!")) + address_display = QLineEdit(address) + address_display.setReadOnly(True) + resize_line_edit_width(address_display, address) + + main_layout = QVBoxLayout(self) + main_layout.addWidget(label) + main_layout.addWidget(address_display) + + def popup(self): + parent = self.parent() + top_left_pos = parent.mapToGlobal(parent.rect().bottomLeft()) + self.move(top_left_pos) + center_mouse_pos = self.mapToGlobal(self.rect().center()) + QCursor.setPos(center_mouse_pos) + self.show() + class MiniActuator: def __init__(self, wallet): self.wallet = wallet - def copy_address(self): + def copy_address(self, receive_popup): addrs = [addr for addr in self.wallet.all_addresses() if not self.wallet.is_change(addr)] - qApp.clipboard().setText(random.choice(addrs)) + copied_address = random.choice(addrs) + qApp.clipboard().setText(copied_address) + receive_popup.set_address(copied_address) + receive_popup.popup() def send(self, address, amount, parent_window): dest_address = self.fetch_destination(address)