From c7edba0990be451352c77cb6ca7431fdf907779d Mon Sep 17 00:00:00 2001 From: ThomasV Date: Sat, 5 Jan 2013 15:23:35 +0100 Subject: [PATCH] currency conversions (bkkcoins) --- lib/exchange_rate.py | 5 ++++- lib/gui_qt.py | 40 ++++++++++++++++++++++++++++++++++++---- lib/simple_config.py | 2 +- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/lib/exchange_rate.py b/lib/exchange_rate.py index bde5f52d..dc6ad13a 100644 --- a/lib/exchange_rate.py +++ b/lib/exchange_rate.py @@ -46,9 +46,12 @@ class Exchanger(threading.Thread): self.parent.emit(SIGNAL("refresh_balance()")) except KeyError: pass + + def get_currencies(self): + return [] if self.quote_currencies == None else sorted(self.quote_currencies.keys()) def _lookup_rate(self, response, quote_id): - return decimal.Decimal(response[str(quote_id)]["15m"]) + return decimal.Decimal(str(response[str(quote_id)]["15m"])) if __name__ == "__main__": exch = Exchanger(("BRL", "CNY", "EUR", "GBP", "RUB", "USD")) diff --git a/lib/gui_qt.py b/lib/gui_qt.py index 914e1e91..54b2bdc7 100644 --- a/lib/gui_qt.py +++ b/lib/gui_qt.py @@ -38,6 +38,7 @@ except: from wallet import format_satoshis import bmp, mnemonic, pyqrnative, qrscanner +import exchange_rate from decimal import Decimal @@ -334,6 +335,9 @@ class ElectrumWindow(QMainWindow): self.connect(self, QtCore.SIGNAL('updatesignal'), self.update_wallet) #self.connect(self, SIGNAL('editamount'), self.edit_amount) self.history_list.setFocus(True) + + self.exchanger = exchange_rate.Exchanger(self) + self.connect(self, SIGNAL("refresh_balance()"), self.update_wallet) # dark magic fix by flatfly; https://bitcointalk.org/index.php?topic=73651.msg959913#msg959913 if platform.system() == 'Windows': @@ -383,6 +387,7 @@ class ElectrumWindow(QMainWindow): c, u = self.wallet.get_balance() text = _( "Balance" ) + ": %s "%( format_satoshis(c,False,self.wallet.num_zeros) ) if u: text += "[%s unconfirmed]"%( format_satoshis(u,True,self.wallet.num_zeros).strip() ) + text += self.create_quote_text(Decimal(c+u)/100000000) icon = QIcon(":icons/status_connected.png") else: text = _( "Not connected" ) @@ -401,7 +406,15 @@ class ElectrumWindow(QMainWindow): self.update_contacts_tab() self.update_completions() - + def create_quote_text(self, btc_balance): + quote_currency = self.config.get("currency", "None") + quote_balance = self.exchanger.exchange(btc_balance, quote_currency) + if quote_balance is None: + quote_text = "" + else: + quote_text = " (%.2f %s)" % (quote_balance, quote_currency) + return quote_text + def create_history_tab(self): self.history_list = l = MyTreeWidget(self) l.setColumnCount(5) @@ -1586,19 +1599,33 @@ class ElectrumWindow(QMainWindow): if not self.config.is_modifiable('language'): for w in [lang_combo, lang_label]: w.setEnabled(False) + currencies = self.exchanger.get_currencies() + currencies.insert(0, "None") + cur_label=QLabel(_('Currency') + ':') + grid_ui.addWidget(cur_label , 9, 0) + cur_combo = QComboBox() + cur_combo.addItems(currencies) + try: + index = currencies.index(self.config.get('currency', "None")) + except: + index = 0 + cur_combo.setCurrentIndex(index) + grid_ui.addWidget(cur_combo, 9, 1) + grid_ui.addWidget(HelpButton(_('Select which currency is used for quotes. ')), 9, 2) + view_label=QLabel(_('Receive Tab') + ':') - grid_ui.addWidget(view_label , 9, 0) + grid_ui.addWidget(view_label , 10, 0) view_combo = QComboBox() view_combo.addItems([_('Simple'), _('Advanced'), _('Point of Sale')]) view_combo.setCurrentIndex(self.receive_tab_mode) - grid_ui.addWidget(view_combo, 9, 1) + grid_ui.addWidget(view_combo, 10, 1) hh = _('This selects the interaction mode of the "Receive" tab. ') + '\n\n' \ + _('Simple') + ': ' + _('Show only addresses and labels.') + '\n\n' \ + _('Advanced') + ': ' + _('Show address balances and add extra menu items to freeze/prioritize addresses.') + '\n\n' \ + _('Point of Sale') + ': ' + _('Show QR code window and amounts requested for each address. Add menu item to request amount.') + '\n\n' - grid_ui.addWidget(HelpButton(hh), 9, 2) + grid_ui.addWidget(HelpButton(hh), 10, 2) vbox.addLayout(ok_cancel_buttons(d)) d.setLayout(vbox) @@ -1661,6 +1688,11 @@ class ElectrumWindow(QMainWindow): if lang_request != self.config.get('language'): self.config.set_key("language", lang_request, True) need_restart = True + + cur_request = str(currencies[cur_combo.currentIndex()]) + if cur_request != self.config.get('currency', "None"): + self.config.set_key('currency', cur_request, True) + self.update_wallet() if need_restart: QMessageBox.warning(self, _('Success'), _('Please restart Electrum to activate the new GUI settings'), _('OK')) diff --git a/lib/simple_config.py b/lib/simple_config.py index a94b837e..8cfa24dd 100644 --- a/lib/simple_config.py +++ b/lib/simple_config.py @@ -94,7 +94,7 @@ a SimpleConfig instance then reads the wallet file. try: out = ast.literal_eval(out) except: - print "type error, using default value" + print "type error for '%s': using default value"%key out = default return out