diff --git a/src/sakia/core/money/quant_zerosum.py b/src/sakia/core/money/quant_zerosum.py index 04ab148762af9e8c36ec410e5b9aed89dfaa803a..c8fb532f27dcbb69f201215ec6dde3ecff570d3d 100644 --- a/src/sakia/core/money/quant_zerosum.py +++ b/src/sakia/core/money/quant_zerosum.py @@ -58,7 +58,11 @@ class QuantitativeZSum: def localized(self, units=False, international_system=False): value = yield from self.value() - localized_value = QLocale().toString(float(value), 'f', 0) + prefix = "" + if international_system: + localized_value, prefix = Quantitative.to_si(value, self.app.preferences['digits_after_comma']) + else: + localized_value = QLocale().toString(float(value), 'f', 0) if units: return QCoreApplication.translate("QuantitativeZSum", diff --git a/src/sakia/core/money/quantitative.py b/src/sakia/core/money/quantitative.py index c54dd74ee3c2b1d67164a8f2f5bedc6f0c4ac38f..809ce5fe470f43b93d6cb682e9257fd119ea23ab 100644 --- a/src/sakia/core/money/quantitative.py +++ b/src/sakia/core/money/quantitative.py @@ -40,8 +40,15 @@ class Quantitative(): value = yield from self.value() return value - def _to_si(self, value): + @staticmethod + def to_si(value, digits): prefixes = ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y', 'z', 'y'] + if value < 0: + value = -value + multiplier = -1 + else: + multiplier = 1 + scientific_value = value prefix_index = 0 prefix = "" @@ -52,10 +59,9 @@ class Quantitative(): if prefix_index < len(prefixes): prefix = prefixes[prefix_index] - localized_value = QLocale().toString(float(scientific_value), 'f', - self.app.preferences['digits_after_comma']) + localized_value = QLocale().toString(float(scientific_value * multiplier), 'f', digits) else: - localized_value = QLocale().toString(float(value), 'f', 0) + localized_value = QLocale().toString(float(value * multiplier), 'f', 0) return localized_value, prefix @@ -64,7 +70,7 @@ class Quantitative(): value = yield from self.value() prefix = "" if international_system: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Quantitative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', 0) @@ -82,7 +88,7 @@ class Quantitative(): value = yield from self.differential() prefix = "" if international_system: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Quantitative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', 0) diff --git a/src/sakia/core/money/relative.py b/src/sakia/core/money/relative.py index eae0781f81db21f527e2f9881108e3b3d226203c..a524e468468f9e61265ea52fd0e1155c57473e30 100644 --- a/src/sakia/core/money/relative.py +++ b/src/sakia/core/money/relative.py @@ -43,8 +43,14 @@ class Relative: value = yield from self.value() return value - def _to_si(self, value): + @staticmethod + def to_si(value, digits): prefixes = ['', 'd', 'c', 'm', 'µ', 'n', 'p', 'f', 'a', 'z', 'y'] + if value < 0: + value = -value + multiplier = -1 + else: + multiplier = 1 scientific_value = value prefix_index = 0 prefix = "" @@ -58,11 +64,9 @@ class Relative: if prefix_index < len(prefixes): prefix = prefixes[prefix_index] - localized_value = QLocale().toString(float(scientific_value), 'f', - self.app.preferences['digits_after_comma']) + localized_value = QLocale().toString(float(scientific_value * multiplier), 'f', digits) else: - localized_value = QLocale().toString(float(value), 'f', - self.app.preferences['digits_after_comma']) + localized_value = QLocale().toString(float(value * multiplier), 'f', digits) return localized_value, prefix @@ -71,7 +75,7 @@ class Relative: value = yield from self.value() prefix = "" if international_system: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) @@ -88,7 +92,7 @@ class Relative: value = yield from self.differential() prefix = "" if international_system and value != 0: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) diff --git a/src/sakia/core/money/relative_zerosum.py b/src/sakia/core/money/relative_zerosum.py index 0e755413802765b2b0afc56d7cc2f110da2b6967..79629e88f829311c32c2583556f15c9d8c98ed69 100644 --- a/src/sakia/core/money/relative_zerosum.py +++ b/src/sakia/core/money/relative_zerosum.py @@ -2,6 +2,7 @@ from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP, QLocale from .relative import Relative import asyncio + class RelativeZSum: _NAME_STR_ = QT_TRANSLATE_NOOP('RelativeZSum', 'Relat Z-sum') _REF_STR_ = QT_TRANSLATE_NOOP('RelativeZSum', "{0} R0 {1}") @@ -59,7 +60,11 @@ class RelativeZSum: def localized(self, units=False, international_system=False): value = yield from self.value() - localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) + prefix = "" + if international_system: + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) + else: + localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) if units: return QCoreApplication.translate("RelativeZSum", RelativeZSum._REF_STR_)\ @@ -71,7 +76,11 @@ class RelativeZSum: def diff_localized(self, units=False, international_system=False): value = yield from self.differential() - localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) + prefix = "" + if international_system and value != 0: + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) + else: + localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) if units: return QCoreApplication.translate("RelativeZSum", RelativeZSum._REF_STR_)\ diff --git a/src/sakia/core/wallet.py b/src/sakia/core/wallet.py index 3a1ce1bc2c54e94e88ee5d6bf202e13ffe6c1e03..ae43c72e0d00958e22f2718f0c98b510ba4f614c 100644 --- a/src/sakia/core/wallet.py +++ b/src/sakia/core/wallet.py @@ -235,8 +235,6 @@ class Wallet(QObject): time = block['medianTime'] txid = len(block['transactions']) - key = None - logging.debug("Key : {0} : {1}".format(salt, password)) if self.walletid == 0: key = SigningKey(salt, password) else: diff --git a/src/sakia/gui/certification.py b/src/sakia/gui/certification.py index a46712688d28f62d1451b57036280ebac9b0f7d4..c79a964651cd2bda625abb2633856764e0a2a70a 100644 --- a/src/sakia/gui/certification.py +++ b/src/sakia/gui/certification.py @@ -36,8 +36,8 @@ class CertificationDialog(QDialog, Ui_CertificationDialog): for community in self.account.communities: self.combo_community.addItem(community.currency) - for contact in certifier.contacts: - self.combo_contact.addItem(contact['name']) + for contact_name in sorted([c['name'] for c in certifier.contacts], key=str.lower): + self.combo_contact.addItem(contact_name) if len(certifier.contacts) == 0: self.radio_pubkey.setChecked(True) self.radio_contact.setEnabled(False) @@ -55,8 +55,10 @@ class CertificationDialog(QDialog, Ui_CertificationDialog): @asyncio.coroutine def accept(self): if self.radio_contact.isChecked(): - index = self.combo_contact.currentIndex() - pubkey = self.account.contacts[index]['pubkey'] + for contact in self.account.contacts: + if contact['name'] == self.combo_contact.currentText(): + pubkey = contact['pubkey'] + break else: pubkey = self.edit_pubkey.text() diff --git a/src/sakia/gui/process_cfg_account.py b/src/sakia/gui/process_cfg_account.py index 02e6ffcc9c7edf0daf460ff9c350d41158a05473..cfdd5f3bffb890ce976eeada8da5944fe96859dd 100644 --- a/src/sakia/gui/process_cfg_account.py +++ b/src/sakia/gui/process_cfg_account.py @@ -13,6 +13,8 @@ from ..models.communities import CommunitiesListModel from ..tools.exceptions import KeyAlreadyUsed, Error, NoPeerAvailable from PyQt5.QtWidgets import QDialog, QMessageBox +from PyQt5.QtCore import QRegExp +from PyQt5.QtGui import QRegExpValidator class Step(): @@ -144,6 +146,9 @@ class ProcessConfigureAccount(QDialog, Ui_AccountConfigurationDialog): # Set up the user interface from Designer. super().__init__() self.setupUi(self) + regexp = QRegExp('[A-Za-z0-9_-]*') + validator = QRegExpValidator(regexp) + self.edit_account_name.setValidator(validator) self.account = account self.password_asker = None self.app = app diff --git a/src/sakia/gui/transfer.py b/src/sakia/gui/transfer.py index 3929b13a0a0159bbb932ef272e5dbf32e3173fce..25efea077fd3ce3f55fbcfb437956dad30936f9c 100644 --- a/src/sakia/gui/transfer.py +++ b/src/sakia/gui/transfer.py @@ -51,8 +51,8 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): for wallet in self.account.wallets: self.combo_wallets.addItem(wallet.name) - for contact in sender.contacts: - self.combo_contact.addItem(contact['name']) + for contact_name in sorted([c['name'] for c in sender.contacts], key=str.lower): + self.combo_contact.addItem(contact_name) if len(self.account.contacts) == 0: self.combo_contact.setEnabled(False) @@ -96,8 +96,10 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): comment = self.edit_message.text() if self.radio_contact.isChecked(): - index = self.combo_contact.currentIndex() - recipient = self.account.contacts[index]['pubkey'] + for contact in self.account.contacts: + if contact['name'] == self.combo_contact.currentText(): + recipient = contact['pubkey'] + break else: recipient = self.edit_pubkey.text() amount = self.spinbox_amount.value()