def add_io(self, vbox): if self.tx.locktime > 0: vbox.addWidget(QLabel("LockTime: %d\n" % self.tx.locktime)) vbox.addWidget(QLabel(_("Inputs"))) def format_input(x): if x.get('is_coinbase'): return 'coinbase' else: _hash = x.get('prevout_hash') return _hash[0:16] + '...' + _hash[-8:] + ":%d" % x.get( 'prevout_n') + u'\t' + "%s" % x.get('address') lines = map(format_input, self.tx.inputs) i_text = QTextEdit() i_text.setText('\n'.join(lines)) i_text.setReadOnly(True) i_text.setMaximumHeight(100) vbox.addWidget(i_text) vbox.addWidget(QLabel(_("Outputs"))) lines = map(lambda x: x[0] + u'\t\t' + self.parent.format_amount(x[1]), self.tx.outputs) o_text = QTextEdit() o_text.setText('\n'.join(lines)) o_text.setReadOnly(True) o_text.setMaximumHeight(100) vbox.addWidget(o_text)
def context_menu(self): view_menu = QMenu() themes_menu = view_menu.addMenu(_("&Themes")) selected_theme = self.actuator.selected_theme() theme_group = QActionGroup(self) for theme_name in self.actuator.theme_names(): theme_action = themes_menu.addAction(theme_name) theme_action.setCheckable(True) if selected_theme == theme_name: theme_action.setChecked(True) class SelectThemeFunctor: def __init__(self, theme_name, toggle_theme): self.theme_name = theme_name self.toggle_theme = toggle_theme def __call__(self, checked): if checked: self.toggle_theme(self.theme_name) delegate = SelectThemeFunctor(theme_name, self.toggle_theme) theme_action.toggled.connect(delegate) theme_group.addAction(theme_action) view_menu.addSeparator() show_receiving = view_menu.addAction(_("Show Receiving addresses")) show_receiving.setCheckable(True) show_receiving.toggled.connect(self.toggle_receiving_layout) show_receiving.setChecked(self.config.get("gui_show_receiving",False)) show_history = view_menu.addAction(_("Show History")) show_history.setCheckable(True) show_history.toggled.connect(self.show_history) show_history.setChecked(self.config.get("gui_show_history",False)) return view_menu
def add_io(self, vbox): if self.tx.locktime > 0: vbox.addWidget(QLabel("LockTime: %d\n" % self.tx.locktime)) vbox.addWidget(QLabel(_("Inputs"))) def format_input(x): if x.get('is_coinbase'): return 'coinbase' else: _hash = x.get('prevout_hash') return _hash[0:16] + '...' + _hash[-8:] + ":%d"%x.get('prevout_n') + u'\t' + "%s"%x.get('address') lines = map(format_input, self.tx.inputs ) i_text = QTextEdit() i_text.setText('\n'.join(lines)) i_text.setReadOnly(True) i_text.setMaximumHeight(100) vbox.addWidget(i_text) vbox.addWidget(QLabel(_("Outputs"))) lines = map(lambda x: x[0] + u'\t\t' + self.parent.format_amount(x[1]), self.tx.outputs) o_text = QTextEdit() o_text.setText('\n'.join(lines)) o_text.setReadOnly(True) o_text.setMaximumHeight(100) vbox.addWidget(o_text)
def save(self): name = 'signed_%s.txn' % (self.tx.hash()[0:8]) if self.tx.is_complete() else 'unsigned.txn' fileName = self.parent.getSaveFileName(_("Select where to save your signed transaction"), name, "*.txn") if fileName: with open(fileName, "w+") as f: f.write(json.dumps(self.tx.as_dict(),indent=4) + '\n') self.show_message(_("Transaction saved successfully"))
def do_full_push(self): try: bundle = {"labels": {}} for key, value in self.wallet.labels.iteritems(): encoded = self.encode(key) bundle["labels"][encoded] = self.encode(value) params = json.dumps(bundle) connection = httplib.HTTPConnection(self.target_host) connection.request( "POST", ("/api/wallets/%s/labels/batch.json?auth_token=%s" % (self.wallet_id, self.auth_token())), params, {'Content-Type': 'application/json'}) response = connection.getresponse() if response.reason == httplib.responses[httplib.NOT_FOUND]: return try: response = json.loads(response.read()) except ValueError as e: return False if "error" in response: QMessageBox.warning( None, _("Error"), _("Could not sync labels: %s" % response["error"])) return False return True except socket.gaierror as e: print_error('Error connecting to service: %s ' % e) return False
def do_full_push(self): try: bundle = {"labels": {}} for key, value in self.wallet.labels.iteritems(): encoded = self.encode(key) bundle["labels"][encoded] = self.encode(value) params = json.dumps(bundle) connection = httplib.HTTPConnection(self.target_host) connection.request("POST", ("/api/wallets/%s/labels/batch.json?auth_token=%s" % (self.wallet_id, self.auth_token())), params, {'Content-Type': 'application/json'}) response = connection.getresponse() if response.reason == httplib.responses[httplib.NOT_FOUND]: return try: response = json.loads(response.read()) except ValueError as e: return False if "error" in response: QMessageBox.warning(None, _("Error"),_("Could not sync labels: %s" % response["error"])) return False return True except socket.gaierror as e: print_error('Error connecting to service: %s ' % e) return False
def do_full_pull(self, force = False): try: connection = httplib.HTTPConnection(self.target_host) connection.request("GET", ("/api/wallets/%s/labels.json?auth_token=%s" % (self.wallet_id, self.auth_token())),"", {'Content-Type': 'application/json'}) response = connection.getresponse() if response.reason == httplib.responses[httplib.NOT_FOUND]: return try: response = json.loads(response.read()) except ValueError as e: return False if "error" in response: QMessageBox.warning(None, _("Error"),_("Could not sync labels: %s" % response["error"])) return False for label in response: decoded_key = self.decode(label["external_id"]) decoded_label = self.decode(label["text"]) if force or not self.wallet.labels.get(decoded_key): self.wallet.labels[decoded_key] = decoded_label return True except socket.gaierror as e: print_error('Error connecting to service: %s ' % e) return False
def do_full_pull(self, force=False): try: connection = httplib.HTTPConnection(self.target_host) connection.request("GET", ("/api/wallets/%s/labels.json?auth_token=%s" % (self.wallet_id, self.auth_token())), "", {'Content-Type': 'application/json'}) response = connection.getresponse() if response.reason == httplib.responses[httplib.NOT_FOUND]: return try: response = json.loads(response.read()) except ValueError as e: return False if "error" in response: QMessageBox.warning( None, _("Error"), _("Could not sync labels: %s" % response["error"])) return False for label in response: decoded_key = self.decode(label["external_id"]) decoded_label = self.decode(label["text"]) if force or not self.wallet.labels.get(decoded_key): self.wallet.labels[decoded_key] = decoded_label return True except socket.gaierror as e: print_error('Error connecting to service: %s ' % e) return False
def full_pull(self, force = False): if self.do_full_pull(force) and force: QMessageBox.information(None, _("Labels synchronized"), _("Your labels have been synchronized.")) self.window.update_history_tab() self.window.update_completions() self.window.update_receive_tab() self.window.update_contacts_tab()
def mouseReleaseEvent(self, event): dialog = QDialog(self) dialog.setWindowTitle(_('Electrum update')) dialog.setModal(1) main_layout = QGridLayout() main_layout.addWidget(QLabel(_("A new version of Electrum is available:")+" " + self.latest_version), 0,0,1,3) ignore_version = QPushButton(_("Ignore this version")) ignore_version.clicked.connect(self.ignore_this_version) ignore_all_versions = QPushButton(_("Ignore all versions")) ignore_all_versions.clicked.connect(self.ignore_all_version) open_website = QPushButton(_("Goto download page")) open_website.clicked.connect(self.open_website) main_layout.addWidget(ignore_version, 1, 0) main_layout.addWidget(ignore_all_versions, 1, 1) main_layout.addWidget(open_website, 1, 2) dialog.setLayout(main_layout) self.dialog = dialog if not dialog.exec_(): return
def build_tray_menu(self): m = QMenu() m.addAction(_("Show/Hide"), self.show_or_hide) m.addAction(_("Dark/Light"), self.toggle_tray_icon) m.addSeparator() m.addAction(_("Exit Electrum-VIOR"), self.close) self.tray.setContextMenu(m)
def __init__(self, transaction_id, parent): super(TransactionWindow, self).__init__() self.tx_id = str(transaction_id) self.parent = parent self.setModal(True) self.resize(200,100) self.setWindowTitle(_("Transaction successfully sent")) self.layout = QGridLayout(self) history_label = "%s\n%s" % (_("Your transaction has been sent."), _("Please enter a label for this transaction for future reference.")) self.layout.addWidget(QLabel(history_label)) self.label_edit = QLineEdit() self.label_edit.setPlaceholderText(_("Transaction label")) self.label_edit.setObjectName("label_input") self.label_edit.setAttribute(Qt.WA_MacShowFocusRect, 0) self.label_edit.setFocusPolicy(Qt.ClickFocus) self.layout.addWidget(self.label_edit) self.save_button = QPushButton(_("Save")) self.layout.addWidget(self.save_button) self.save_button.clicked.connect(self.set_label) self.exec_()
def full_pull(self, force=False): if self.do_full_pull(force) and force: QMessageBox.information(None, _("Labels synchronized"), _("Your labels have been synchronized.")) self.window.update_history_tab() self.window.update_completions() self.window.update_receive_tab() self.window.update_contacts_tab()
def save(self): name = 'signed_%s.txn' % ( self.tx.hash()[0:8]) if self.tx.is_complete() else 'unsigned.txn' fileName = self.parent.getSaveFileName( _("Select where to save your signed transaction"), name, "*.txn") if fileName: with open(fileName, "w+") as f: f.write(json.dumps(self.tx.as_dict(), indent=4) + '\n') self.show_message(_("Transaction saved successfully"))
def __init__(self, parent, seed, imported_keys): QDialog.__init__(self, parent) self.setModal(1) self.setWindowTitle('Electrum' + ' - ' + _('Seed')) vbox = show_seed_box(seed) if imported_keys: vbox.addWidget(QLabel("<b>"+_("WARNING")+":</b> " + _("Your wallet contains imported keys. These keys cannot be recovered from seed.") + "</b><p>")) vbox.addLayout(close_button(self)) self.setLayout(vbox)
def broadcast(self): result, result_message = self.wallet.sendtx(self.tx) if result: self.show_message( _("Transaction successfully sent") + ': %s' % (result_message)) else: self.show_message( _("There was a problem sending your transaction:") + '\n %s' % (result_message))
def ok_cancel_buttons(dialog): row_layout = QHBoxLayout() row_layout.addStretch(1) ok_button = QPushButton(_("OK")) row_layout.addWidget(ok_button) ok_button.clicked.connect(dialog.accept) cancel_button = QPushButton(_("Cancel")) row_layout.addWidget(cancel_button) cancel_button.clicked.connect(dialog.reject) return row_layout
def on_change_hist(checked): if checked: self.config.set_key('history_rates', 'checked') self.history_tab_update() else: self.config.set_key('history_rates', 'unchecked') self.gui.main_window.history_list.setHeaderLabels( [ '', _('Date'), _('Description') , _('Amount'), _('Balance')] ) self.gui.main_window.history_list.setColumnCount(5) for i,width in enumerate(self.gui.main_window.column_widths['history']): self.gui.main_window.history_list.setColumnWidth(i, width)
def verify_seed(self, seed, sid): r = self.enter_seed_dialog(MSG_VERIFY_SEED, sid) if not r: return if r != seed: QMessageBox.warning(None, _('Error'), _('Incorrect seed'), _('OK')) return False else: return True
def settings_dialog(self): def check_for_api_key(api_key): if api_key and len(api_key) > 12: self.config.set_key("plugin_label_api_key", str(self.auth_token_edit.text())) self.upload.setEnabled(True) self.download.setEnabled(True) self.accept.setEnabled(True) else: self.upload.setEnabled(False) self.download.setEnabled(False) self.accept.setEnabled(False) d = QDialog() layout = QGridLayout(d) layout.addWidget(QLabel("API Key: "), 0, 0) self.auth_token_edit = QLineEdit(self.auth_token()) self.auth_token_edit.textChanged.connect(check_for_api_key) layout.addWidget(QLabel("Label sync options: "), 2, 0) layout.addWidget(self.auth_token_edit, 0, 1, 1, 2) decrypt_key_text = QLineEdit(self.encode_password) decrypt_key_text.setReadOnly(True) layout.addWidget(decrypt_key_text, 1, 1) layout.addWidget(QLabel("Decryption key: "), 1, 0) layout.addWidget( HelpButton( "This key can be used on the LabElectrum website to decrypt your data in case you want to review it online." ), 1, 2) self.upload = QPushButton("Force upload") self.upload.clicked.connect(self.full_push) layout.addWidget(self.upload, 2, 1) self.download = QPushButton("Force download") self.download.clicked.connect(lambda: self.full_pull(True)) layout.addWidget(self.download, 2, 2) c = QPushButton(_("Cancel")) c.clicked.connect(d.reject) self.accept = QPushButton(_("Done")) self.accept.clicked.connect(d.accept) layout.addWidget(c, 3, 1) layout.addWidget(self.accept, 3, 2) check_for_api_key(self.auth_token()) if d.exec_(): return True else: return False
def ok_cancel_buttons2(dialog, ok_label=_("OK") ): hbox = QHBoxLayout() hbox.addStretch(1) b = QPushButton(_("Cancel")) hbox.addWidget(b) b.clicked.connect(dialog.reject) b = QPushButton(ok_label) hbox.addWidget(b) b.clicked.connect(dialog.accept) b.setDefault(True) return hbox, b
def __init__(self, owner=None): self.owner = owner self.editing = False QTreeWidget.__init__(self, owner) self.setColumnCount(3) self.setHeaderLabels([_("Address"), _("Label"), _("Used")]) self.setIndentation(0) self.hide_used = True self.setColumnHidden(2, True)
def append(self, address, amount, date): if address is None: address = _("Unknown") if amount is None: amount = _("Unknown") if date is None: date = _("Unknown") item = QTreeWidgetItem([amount, address, date]) if float(amount) < 0: item.setForeground(0, QBrush(QColor("#BC1E1E"))) self.insertTopLevelItem(0, item)
def init(self): self.window = self.gui.main_window self.wallet = self.window.wallet self.qr_window = None self.merchant_name = self.config.get('merchant_name', 'Invoice') self.window.expert_mode = True self.window.receive_list.setColumnCount(5) self.window.receive_list.setHeaderLabels([ _('Address'), _('Label'), _('Balance'), _('Tx'), _('Request')]) self.requested_amounts = {} self.toggle_QR_window(True)
def __init__(self, parent, seed, imported_keys): QDialog.__init__(self, parent) self.setModal(1) self.setWindowTitle('Electrum' + ' - ' + _('Seed')) vbox = show_seed_box(seed) if imported_keys: vbox.addWidget( QLabel("<b>" + _("WARNING") + ":</b> " + _( "Your wallet contains imported keys. These keys cannot be recovered from seed." ) + "</b><p>")) vbox.addLayout(close_button(self)) self.setLayout(vbox)
def fiat_dialog(self): if not self.config.get('use_exchange_rate'): self.gui.main_window.show_message( _("To use this feature, first enable the exchange rate plugin." )) return if not self.gui.main_window.network.is_connected(): self.gui.main_window.show_message( _("To use this feature, you must have a network connection.")) return quote_currency = self.fiat_unit() d = QDialog(self.gui.main_window) d.setWindowTitle("Fiat") vbox = QVBoxLayout(d) text = "Amount to Send in " + quote_currency vbox.addWidget(QLabel(_(text) + ':')) grid = QGridLayout() fiat_e = AmountEdit(self.fiat_unit) grid.addWidget(fiat_e, 1, 0) r = {} self.get_fiat_price_text(r) quote = r.get(0) if quote: text = "1 VIOR~%s" % quote grid.addWidget(QLabel(_(text)), 4, 0, 3, 0) else: self.gui.main_window.show_message( _("Exchange rate not available. Please check your network connection." )) return vbox.addLayout(grid) vbox.addLayout(ok_cancel_buttons(d)) if not d.exec_(): return fiat = str(fiat_e.text()) if str(fiat) == "" or str(fiat) == ".": fiat = "0" quote = quote[:-4] btcamount = Decimal(fiat) / Decimal(quote) if str(self.gui.main_window.base_unit()) == "mVIOR": btcamount = btcamount * 1000 quote = "%.8f" % btcamount self.gui.main_window.amount_e.setText(quote)
def settings_dialog(self): def check_for_api_key(api_key): if api_key and len(api_key) > 12: self.config.set_key("plugin_label_api_key", str(self.auth_token_edit.text())) self.upload.setEnabled(True) self.download.setEnabled(True) self.accept.setEnabled(True) else: self.upload.setEnabled(False) self.download.setEnabled(False) self.accept.setEnabled(False) d = QDialog() layout = QGridLayout(d) layout.addWidget(QLabel("API Key: "),0,0) self.auth_token_edit = QLineEdit(self.auth_token()) self.auth_token_edit.textChanged.connect(check_for_api_key) layout.addWidget(QLabel("Label sync options: "),2,0) layout.addWidget(self.auth_token_edit, 0,1,1,2) decrypt_key_text = QLineEdit(self.encode_password) decrypt_key_text.setReadOnly(True) layout.addWidget(decrypt_key_text, 1,1) layout.addWidget(QLabel("Decryption key: "),1,0) layout.addWidget(HelpButton("This key can be used on the LabElectrum website to decrypt your data in case you want to review it online."),1,2) self.upload = QPushButton("Force upload") self.upload.clicked.connect(self.full_push) layout.addWidget(self.upload, 2,1) self.download = QPushButton("Force download") self.download.clicked.connect(lambda: self.full_pull(True)) layout.addWidget(self.download, 2,2) c = QPushButton(_("Cancel")) c.clicked.connect(d.reject) self.accept = QPushButton(_("Done")) self.accept.clicked.connect(d.accept) layout.addWidget(c,3,1) layout.addWidget(self.accept,3,2) check_for_api_key(self.auth_token()) if d.exec_(): return True else: return False
def show_seed_box(seed, sid=None): save_msg = _("Please save these %d words on paper (order is important)." ) % len(seed.split()) + " " qr_msg = _( "Your seed is also displayed as QR code, in case you want to transfer it to a mobile phone." ) + "<p>" warning_msg = "<b>" + _("WARNING") + ":</b> " + _( "Never disclose your seed. Never type it on a website.") + "</b><p>" if sid is None: msg = _("Your wallet generation seed is") msg2 = save_msg + " " \ + _("This seed will allow you to recover your wallet in case of computer failure.") + "<br/>" \ + warning_msg elif sid == 'cold': msg = _("Your cold storage seed is") msg2 = save_msg + " " \ + _("This seed will be permanently deleted from your wallet file. Make sure you have saved it before you press 'next'") + " " \ elif sid == 'hot': msg = _("Your hot seed is") msg2 = save_msg + " " \ + _("If you ever need to recover your wallet from seed, you will need both this seed and your cold seed.") + " " \ label1 = QLabel(msg + ":") seed_text = QTextEdit(seed) seed_text.setReadOnly(True) seed_text.setMaximumHeight(130) label2 = QLabel(msg2) label2.setWordWrap(True) logo = QLabel() logo.setPixmap(QPixmap(icon_filename(sid)).scaledToWidth(56)) logo.setMaximumWidth(60) grid = QGridLayout() grid.addWidget(logo, 0, 0) grid.addWidget(label1, 0, 1) grid.addWidget(seed_text, 1, 0, 1, 2) #qrw = QRCodeWidget(seed) #grid.addWidget(qrw, 0, 2, 2, 1) vbox = QVBoxLayout() vbox.addLayout(grid) vbox.addWidget(label2) vbox.addStretch(1) return vbox
def setup(self, address): label = QLabel(_("Copied your ViorCoin 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) self.setMouseTracking(True) self.setWindowTitle("Electrum - " + _("Receive ViorCoin payment")) self.setWindowFlags(Qt.Window|Qt.FramelessWindowHint| Qt.MSWindowsFixedSizeDialogHint) self.layout().setSizeConstraint(QLayout.SetFixedSize)
def fiat_dialog(self): if not self.config.get('use_exchange_rate'): self.gui.main_window.show_message(_("To use this feature, first enable the exchange rate plugin.")) return if not self.gui.main_window.network.is_connected(): self.gui.main_window.show_message(_("To use this feature, you must have a network connection.")) return quote_currency = self.fiat_unit() d = QDialog(self.gui.main_window) d.setWindowTitle("Fiat") vbox = QVBoxLayout(d) text = "Amount to Send in " + quote_currency vbox.addWidget(QLabel(_(text)+':')) grid = QGridLayout() fiat_e = AmountEdit(self.fiat_unit) grid.addWidget(fiat_e, 1, 0) r = {} self.get_fiat_price_text(r) quote = r.get(0) if quote: text = "1 VIOR~%s"%quote grid.addWidget(QLabel(_(text)), 4, 0, 3, 0) else: self.gui.main_window.show_message(_("Exchange rate not available. Please check your network connection.")) return vbox.addLayout(grid) vbox.addLayout(ok_cancel_buttons(d)) if not d.exec_(): return fiat = str(fiat_e.text()) if str(fiat) == "" or str(fiat) == ".": fiat = "0" quote = quote[:-4] btcamount = Decimal(fiat) / Decimal(quote) if str(self.gui.main_window.base_unit()) == "mVIOR": btcamount = btcamount * 1000 quote = "%.8f"%btcamount self.gui.main_window.amount_e.setText( quote )
def exec_menu(self, position,l): item = l.itemAt(position) if not item: return addr = unicode(item.text(0)) menu = QMenu() menu.addAction(_("Copy to clipboard"), lambda: self.parent.app.clipboard().setText(addr)) menu.exec_(l.viewport().mapToGlobal(position))
def __init__(self, change_quote_currency, parent=None): super(QLabel, self).__init__(_("Connecting..."), parent) self.change_quote_currency = change_quote_currency self.state = self.SHOW_CONNECTING self.balance_text = "" self.amount_text = "" self.parent = parent
def toggle(self): out = BasePlugin.toggle(self) self.win.update_status() self.win.tabs.removeTab(1) new_send_tab = self.gui.main_window.create_send_tab() self.win.tabs.insertTab(1, new_send_tab, _('Send')) return out
def __init__(self, exchanger): QWidget.__init__(self) self.exchanger = exchanger self.setWindowTitle('Electrum - '+_('Invoice')) self.setMinimumSize(800, 250) self.address = '' self.label = '' self.amount = 0 self.setFocusPolicy(QtCore.Qt.NoFocus) main_box = QHBoxLayout() self.qrw = QRCodeWidget() main_box.addWidget(self.qrw, 1) vbox = QVBoxLayout() main_box.addLayout(vbox) self.address_label = QLabel("") #self.address_label.setFont(QFont(MONOSPACE_FONT)) vbox.addWidget(self.address_label) self.label_label = QLabel("") vbox.addWidget(self.label_label) self.amount_label = QLabel("") vbox.addWidget(self.amount_label) vbox.addStretch(1) self.setLayout(main_box)
def show_seed_box(seed, sid=None): save_msg = _("Please save these %d words on paper (order is important).")%len(seed.split()) + " " qr_msg = _("Your seed is also displayed as QR code, in case you want to transfer it to a mobile phone.") + "<p>" warning_msg = "<b>"+_("WARNING")+":</b> " + _("Never disclose your seed. Never type it on a website.") + "</b><p>" if sid is None: msg = _("Your wallet generation seed is") msg2 = save_msg + " " \ + _("This seed will allow you to recover your wallet in case of computer failure.") + "<br/>" \ + warning_msg elif sid == 'cold': msg = _("Your cold storage seed is") msg2 = save_msg + " " \ + _("This seed will be permanently deleted from your wallet file. Make sure you have saved it before you press 'next'") + " " \ elif sid == 'hot': msg = _("Your hot seed is") msg2 = save_msg + " " \ + _("If you ever need to recover your wallet from seed, you will need both this seed and your cold seed.") + " " \ label1 = QLabel(msg+ ":") seed_text = QTextEdit(seed) seed_text.setReadOnly(True) seed_text.setMaximumHeight(130) label2 = QLabel(msg2) label2.setWordWrap(True) logo = QLabel() logo.setPixmap(QPixmap(icon_filename(sid)).scaledToWidth(56)) logo.setMaximumWidth(60) grid = QGridLayout() grid.addWidget(logo, 0, 0) grid.addWidget(label1, 0, 1) grid.addWidget(seed_text, 1, 0, 1, 2) #qrw = QRCodeWidget(seed) #grid.addWidget(qrw, 0, 2, 2, 1) vbox = QVBoxLayout() vbox.addLayout(grid) vbox.addWidget(label2) vbox.addStretch(1) return vbox
def network_dialog(self): grid = QGridLayout() grid.setSpacing(5) label = QLabel(_("Electrum communicates with remote servers to get information about your transactions and addresses. The servers all fulfil the same purpose only differing in hardware. In most cases you simply want to let Electrum pick one at random if you have a preference though feel free to select a server manually.") + "\n\n" \ + _("How do you want to connect to a server:")+" ") label.setWordWrap(True) grid.addWidget(label, 0, 0) gb = QGroupBox() b1 = QRadioButton(gb) b1.setText(_("Auto connect")) b1.setChecked(True) b2 = QRadioButton(gb) b2.setText(_("Select server manually")) #b3 = QRadioButton(gb) #b3.setText(_("Stay offline")) grid.addWidget(b1,1,0) grid.addWidget(b2,2,0) #grid.addWidget(b3,3,0) vbox = QVBoxLayout() vbox.addLayout(grid) vbox.addStretch(1) vbox.addLayout(ok_cancel_buttons(self, _('Next'))) self.set_layout(vbox) if not self.exec_(): return if b2.isChecked(): return NetworkDialog(self.network, self.config, None).do_exec() elif b1.isChecked(): self.config.set_key('auto_cycle', True, True) return else: self.config.set_key("server", None, True) self.config.set_key('auto_cycle', False, True) return
def exec_menu(self, position, l): item = l.itemAt(position) if not item: return addr = unicode(item.text(0)) menu = QMenu() menu.addAction(_("Copy to clipboard"), lambda: self.parent.app.clipboard().setText(addr)) menu.exec_(l.viewport().mapToGlobal(position))
def on_change_hist(checked): if checked: self.config.set_key('history_rates', 'checked') self.history_tab_update() else: self.config.set_key('history_rates', 'unchecked') self.gui.main_window.history_list.setHeaderLabels([ '', _('Date'), _('Description'), _('Amount'), _('Balance') ]) self.gui.main_window.history_list.setColumnCount(5) for i, width in enumerate( self.gui.main_window.column_widths['history']): self.gui.main_window.history_list.setColumnWidth(i, width)
def close_button(dialog, label=_("Close") ): hbox = QHBoxLayout() hbox.addStretch(1) b = QPushButton(label) hbox.addWidget(b) b.clicked.connect(dialog.close) b.setDefault(True) return hbox
def filename_field(parent, config, defaultname, select_msg): vbox = QVBoxLayout() vbox.addWidget(QLabel(_("Format"))) gb = QGroupBox("format", parent) b1 = QRadioButton(gb) b1.setText(_("CSV")) b1.setChecked(True) b2 = QRadioButton(gb) b2.setText(_("json")) vbox.addWidget(b1) vbox.addWidget(b2) hbox = QHBoxLayout() directory = config.get('io_dir', unicode(os.path.expanduser('~'))) path = os.path.join( directory, defaultname ) filename_e = QLineEdit() filename_e.setText(path) def func(): text = unicode(filename_e.text()) _filter = "*.csv" if text.endswith(".csv") else "*.json" if text.endswith(".json") else None p = unicode( QFileDialog.getSaveFileName(None, select_msg, text, _filter)) if p: filename_e.setText(p) button = QPushButton(_('File')) button.clicked.connect(func) hbox.addWidget(button) hbox.addWidget(filename_e) vbox.addLayout(hbox) def set_csv(v): text = unicode(filename_e.text()) text = text.replace(".json",".csv") if v else text.replace(".csv",".json") filename_e.setText(text) b1.clicked.connect(lambda: set_csv(True)) b2.clicked.connect(lambda: set_csv(False)) return vbox, filename_e, b1
def enter_seed_dialog(self, msg, sid): vbox, seed_e = seed_dialog.enter_seed_box(msg, sid) vbox.addStretch(1) hbox, button = ok_cancel_buttons2(self, _('Next')) vbox.addLayout(hbox) button.setEnabled(False) seed_e.textChanged.connect(lambda: button.setEnabled(self.is_any(seed_e))) self.set_layout(vbox) if not self.exec_(): return return self.get_seed_text(seed_e)
def __init__(self, parent): super(QDialog, self).__init__(parent) self.setModal(True) self.password_input = QLineEdit() self.password_input.setEchoMode(QLineEdit.Password) main_layout = QVBoxLayout(self) message = _('Please enter your password') main_layout.addWidget(QLabel(message)) grid = QGridLayout() grid.setSpacing(8) grid.addWidget(QLabel(_('Password')), 1, 0) grid.addWidget(self.password_input, 1, 1) main_layout.addLayout(grid) main_layout.addLayout(ok_cancel_buttons(self)) self.setLayout(main_layout)