def __init__(self, actuator, expand_callback, config): super(MiniWindow, self).__init__() self.actuator = actuator self.config = config self.btc_balance = None self.use_exchanges = ["Blockchain", "CoinDesk"] self.quote_currencies = ["BRL", "CNY", "EUR", "GBP", "RUB", "USD"] self.actuator.set_configured_currency(self.set_quote_currency) self.actuator.set_configured_exchange(self.set_exchange) # Needed because price discovery is done in a different thread # which needs to be sent back to this main one to update the GUI self.connect(self, SIGNAL("refresh_balance()"), self.refresh_balance) self.balance_label = BalanceLabel(self.change_quote_currency, self) self.balance_label.setObjectName("balance_label") # Bitcoin address code self.address_input = QLineEdit() self.address_input.setPlaceholderText( _("Enter a Bitcoin address or contact")) self.address_input.setObjectName("address_input") self.address_input.setFocusPolicy(Qt.ClickFocus) self.address_input.textChanged.connect(self.address_field_changed) resize_line_edit_width(self.address_input, "1BtaFUr3qVvAmwrsuDuu5zk6e4s2rxd2Gy") self.address_completions = QStringListModel() address_completer = QCompleter(self.address_input) address_completer.setCaseSensitivity(False) address_completer.setModel(self.address_completions) self.address_input.setCompleter(address_completer) address_layout = QHBoxLayout() address_layout.addWidget(self.address_input) self.amount_input = QLineEdit() self.amount_input.setPlaceholderText( _("... and amount") + " (%s)" % self.actuator.g.base_unit()) self.amount_input.setObjectName("amount_input") self.amount_input.setFocusPolicy(Qt.ClickFocus) # This is changed according to the user's displayed balance self.amount_validator = QDoubleValidator(self.amount_input) self.amount_validator.setNotation(QDoubleValidator.StandardNotation) self.amount_validator.setDecimals(8) self.amount_input.setValidator(self.amount_validator) # This removes the very ugly OSX highlighting, please leave this in :D self.address_input.setAttribute(Qt.WA_MacShowFocusRect, 0) self.amount_input.setAttribute(Qt.WA_MacShowFocusRect, 0) self.amount_input.textChanged.connect(self.amount_input_changed) #if self.actuator.g.wallet.seed: self.send_button = QPushButton(_("&Send")) #else: # self.send_button = QPushButton(_("&Create")) self.send_button.setObjectName("send_button") self.send_button.setDisabled(True) self.send_button.clicked.connect(self.send) # Creating the receive button self.switch_button = QPushButton(QIcon(":icons/switchgui.png"), '') self.switch_button.setMaximumWidth(25) self.switch_button.setFlat(True) self.switch_button.clicked.connect(expand_callback) main_layout = QGridLayout(self) main_layout.addWidget(self.balance_label, 0, 0, 1, 3) main_layout.addWidget(self.switch_button, 0, 3) main_layout.addWidget(self.address_input, 1, 0, 1, 4) main_layout.addWidget(self.amount_input, 2, 0, 1, 2) main_layout.addWidget(self.send_button, 2, 2, 1, 2) self.send_button.setMaximumWidth(125) self.history_list = history_widget_lite.HistoryWidget() self.history_list.setObjectName("history") self.history_list.hide() self.history_list.setAlternatingRowColors(True) main_layout.addWidget(self.history_list, 3, 0, 1, 4) self.receiving = receiving_widget.ReceivingWidget(self) self.receiving.setObjectName("receiving") # Add to the right side self.receiving_box = QGroupBox(_("Select a receiving address")) extra_layout = QGridLayout() # Checkbox to filter used addresses hide_used = QCheckBox(_('Hide used addresses')) hide_used.setChecked(True) hide_used.stateChanged.connect(self.receiving.toggle_used) # Events for receiving addresses self.receiving.clicked.connect(self.receiving.copy_address) self.receiving.itemDoubleClicked.connect(self.receiving.edit_label) self.receiving.itemChanged.connect(self.receiving.update_label) # Label extra_layout.addWidget( QLabel( _('Selecting an address will copy it to the clipboard.') + '\n' + _('Double clicking the label will allow you to edit it.')), 0, 0) extra_layout.addWidget(self.receiving, 1, 0) extra_layout.addWidget(hide_used, 2, 0) extra_layout.setColumnMinimumWidth(0, 200) self.receiving_box.setLayout(extra_layout) main_layout.addWidget(self.receiving_box, 0, 4, -1, 3) self.receiving_box.hide() self.main_layout = main_layout quit_shortcut = QShortcut(QKeySequence("Ctrl+Q"), self) quit_shortcut.activated.connect(self.close) close_shortcut = QShortcut(QKeySequence("Ctrl+W"), self) close_shortcut.activated.connect(self.close) g = self.config.get("winpos-lite", [4, 25, 351, 149]) self.setGeometry(g[0], g[1], g[2], g[3]) show_hist = self.config.get("gui_show_history", False) self.show_history(show_hist) show_hist = self.config.get("gui_show_receiving", False) self.toggle_receiving_layout(show_hist) self.setWindowIcon(QIcon(":icons/electrum.png")) self.setWindowTitle("Electrum") self.setWindowFlags(Qt.Window | Qt.MSWindowsFixedSizeDialogHint) self.layout().setSizeConstraint(QLayout.SetFixedSize) self.setObjectName("main_window")
def __init__(self, actuator, expand_callback, config): super(MiniWindow, self).__init__() tx = "e08115d0f7819aee65b9d24f81ef9d46eb62bb67ddef5318156cbc3ceb7b703e" self.actuator = actuator self.config = config self.btc_balance = None self.quote_currencies = ["BRL", "CNY", "EUR", "GBP", "RUB", "USD"] self.actuator.set_configured_currency(self.set_quote_currency) self.exchanger = exchange_rate.Exchanger(self) # Needed because price discovery is done in a different thread # which needs to be sent back to this main one to update the GUI self.connect(self, SIGNAL("refresh_balance()"), self.refresh_balance) self.balance_label = BalanceLabel(self.change_quote_currency) self.balance_label.setObjectName("balance_label") # Bitcoin address code self.address_input = QLineEdit() self.address_input.setPlaceholderText( _("Enter a Bitcoin address or contact")) self.address_input.setObjectName("address_input") self.address_input.setFocusPolicy(Qt.ClickFocus) self.address_input.textChanged.connect(self.address_field_changed) resize_line_edit_width(self.address_input, "1BtaFUr3qVvAmwrsuDuu5zk6e4s2rxd2Gy") self.address_completions = QStringListModel() address_completer = QCompleter(self.address_input) address_completer.setCaseSensitivity(False) address_completer.setModel(self.address_completions) self.address_input.setCompleter(address_completer) address_layout = QHBoxLayout() address_layout.addWidget(self.address_input) self.amount_input = QLineEdit() self.amount_input.setPlaceholderText(_("... and amount")) self.amount_input.setObjectName("amount_input") self.amount_input.setFocusPolicy(Qt.ClickFocus) # This is changed according to the user's displayed balance self.amount_validator = QDoubleValidator(self.amount_input) self.amount_validator.setNotation(QDoubleValidator.StandardNotation) self.amount_validator.setDecimals(8) self.amount_input.setValidator(self.amount_validator) # This removes the very ugly OSX highlighting, please leave this in :D self.address_input.setAttribute(Qt.WA_MacShowFocusRect, 0) self.amount_input.setAttribute(Qt.WA_MacShowFocusRect, 0) self.amount_input.textChanged.connect(self.amount_input_changed) if self.actuator.wallet.seed: self.send_button = QPushButton(_("&Send")) else: self.send_button = QPushButton(_("&Create")) self.send_button.setObjectName("send_button") self.send_button.setDisabled(True) self.send_button.clicked.connect(self.send) # Creating the receive button self.switch_button = QPushButton(QIcon(":icons/switchgui.png"), '') self.switch_button.setMaximumWidth(25) self.switch_button.setFlat(True) self.switch_button.clicked.connect(expand_callback) main_layout = QGridLayout(self) main_layout.addWidget(self.balance_label, 0, 0, 1, 3) main_layout.addWidget(self.switch_button, 0, 3) main_layout.addWidget(self.address_input, 1, 0, 1, 4) main_layout.addWidget(self.amount_input, 2, 0, 1, 2) main_layout.addWidget(self.send_button, 2, 2, 1, 2) self.send_button.setMaximumWidth(125) self.history_list = history_widget.HistoryWidget() self.history_list.setObjectName("history") self.history_list.hide() self.history_list.setAlternatingRowColors(True) main_layout.addWidget(self.history_list, 3, 0, 1, 4) self.receiving = receiving_widget.ReceivingWidget(self) self.receiving.setObjectName("receiving") # Add to the right side self.receiving_box = QGroupBox(_("Select a receiving address")) extra_layout = QGridLayout() # Checkbox to filter used addresses hide_used = QCheckBox(_('Hide used addresses')) hide_used.setChecked(True) hide_used.stateChanged.connect(self.receiving.toggle_used) # Events for receiving addresses self.receiving.clicked.connect(self.receiving.copy_address) self.receiving.itemDoubleClicked.connect(self.receiving.edit_label) self.receiving.itemChanged.connect(self.receiving.update_label) # Label extra_layout.addWidget( QLabel( _('Selecting an address will copy it to the clipboard.') + '\n' + _('Double clicking the label will allow you to edit it.')), 0, 0) extra_layout.addWidget(self.receiving, 1, 0) extra_layout.addWidget(hide_used, 2, 0) extra_layout.setColumnMinimumWidth(0, 200) self.receiving_box.setLayout(extra_layout) main_layout.addWidget(self.receiving_box, 0, 4, -1, 3) self.receiving_box.hide() # Creating the menu bar menubar = QMenuBar() electrum_menu = menubar.addMenu(_("&Electrum")) quit_option = electrum_menu.addAction(_("&Close")) quit_option.triggered.connect(self.close) view_menu = menubar.addMenu(_("&View")) extra_menu = menubar.addMenu(_("&Extra")) backup_wallet = extra_menu.addAction(_("&Create wallet backup")) backup_wallet.triggered.connect(self.backup_wallet) export_csv = extra_menu.addAction(_("&Export transactions to CSV")) export_csv.triggered.connect( lambda: csv_transaction(self.actuator.wallet)) master_key = extra_menu.addAction( _("Copy master public key to clipboard")) master_key.triggered.connect(self.actuator.copy_master_public_key) expert_gui = view_menu.addAction(_("&Classic GUI")) expert_gui.triggered.connect(expand_callback) 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_toggle = self.config.get("gui_show_receiving", False) show_receiving.setChecked(show_receiving_toggle) self.show_receiving = show_receiving self.toggle_receiving_layout(show_receiving_toggle) show_history = view_menu.addAction(_("Show History")) show_history.setCheckable(True) show_history.toggled.connect(self.show_history) help_menu = menubar.addMenu(_("&Help")) the_website = help_menu.addAction(_("&Website")) the_website.triggered.connect(self.the_website) help_menu.addSeparator() report_bug = help_menu.addAction(_("&Report Bug")) report_bug.triggered.connect(self.show_report_bug) show_about = help_menu.addAction(_("&About")) show_about.triggered.connect(self.show_about) main_layout.setMenuBar(menubar) self.main_layout = main_layout quit_shortcut = QShortcut(QKeySequence("Ctrl+Q"), self) quit_shortcut.activated.connect(self.close) close_shortcut = QShortcut(QKeySequence("Ctrl+W"), self) close_shortcut.activated.connect(self.close) g = self.config.get("winpos-lite", [4, 25, 351, 149]) self.setGeometry(g[0], g[1], g[2], g[3]) show_hist = self.config.get("gui_show_history", False) show_history.setChecked(show_hist) self.show_history(show_hist) self.setWindowIcon(QIcon(":electrum.png")) self.setWindowTitle("Electrum") self.setWindowFlags(Qt.Window | Qt.MSWindowsFixedSizeDialogHint) self.layout().setSizeConstraint(QLayout.SetFixedSize) self.setObjectName("main_window") self.show()