mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-23 17:47:31 +00:00
Have AmountEdit return an int if is_int, otherwise a Decimal Set the tray tooltip unconditionally. More verbose logging for exchage_rate plugin. Get rate_float from Coindesk as rate can have commas. Plugin tracks windows itself, and doesn't create its own members in the window objects. Clean up the edit handling.
104 lines
3.1 KiB
Python
104 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from PyQt4.QtCore import *
|
|
from PyQt4.QtGui import *
|
|
|
|
from decimal import Decimal
|
|
from electrum.util import format_satoshis_plain
|
|
|
|
class MyLineEdit(QLineEdit):
|
|
frozen = pyqtSignal()
|
|
|
|
def setFrozen(self, b):
|
|
self.setReadOnly(b)
|
|
self.setFrame(not b)
|
|
self.frozen.emit()
|
|
|
|
class AmountEdit(MyLineEdit):
|
|
shortcut = pyqtSignal()
|
|
|
|
def __init__(self, base_unit, is_int = False, parent=None):
|
|
QLineEdit.__init__(self, parent)
|
|
# This seems sufficient for hundred-BTC amounts with 8 decimals
|
|
self.setFixedWidth(140)
|
|
self.base_unit = base_unit
|
|
self.textChanged.connect(self.numbify)
|
|
self.is_int = is_int
|
|
self.is_shortcut = False
|
|
self.help_palette = QPalette()
|
|
|
|
def decimal_point(self):
|
|
return 8
|
|
|
|
def numbify(self):
|
|
text = unicode(self.text()).strip()
|
|
if text == '!':
|
|
self.shortcut.emit()
|
|
return
|
|
pos = self.cursorPosition()
|
|
chars = '0123456789'
|
|
if not self.is_int: chars +='.'
|
|
s = ''.join([i for i in text if i in chars])
|
|
if not self.is_int:
|
|
if '.' in s:
|
|
p = s.find('.')
|
|
s = s.replace('.','')
|
|
s = s[:p] + '.' + s[p:p+self.decimal_point()]
|
|
self.setText(s)
|
|
# setText sets Modified to False. Instead we want to remember
|
|
# if updates were because of user modification.
|
|
self.setModified(self.hasFocus())
|
|
self.setCursorPosition(pos)
|
|
|
|
def paintEvent(self, event):
|
|
QLineEdit.paintEvent(self, event)
|
|
if self.base_unit:
|
|
panel = QStyleOptionFrameV2()
|
|
self.initStyleOption(panel)
|
|
textRect = self.style().subElementRect(QStyle.SE_LineEditContents, panel, self)
|
|
textRect.adjust(2, 0, -10, 0)
|
|
painter = QPainter(self)
|
|
painter.setPen(self.help_palette.brush(QPalette.Disabled, QPalette.Text).color())
|
|
painter.drawText(textRect, Qt.AlignRight | Qt.AlignVCenter, self.base_unit())
|
|
|
|
def get_amount(self):
|
|
try:
|
|
return (int if self.is_int else Decimal)(str(self.text()))
|
|
except:
|
|
return None
|
|
|
|
|
|
class BTCAmountEdit(AmountEdit):
|
|
|
|
def __init__(self, decimal_point, is_int = False, parent=None):
|
|
AmountEdit.__init__(self, self._base_unit, is_int, parent)
|
|
self.decimal_point = decimal_point
|
|
|
|
def _base_unit(self):
|
|
p = self.decimal_point()
|
|
assert p in [2, 5, 8]
|
|
if p == 8:
|
|
return 'BTC'
|
|
if p == 5:
|
|
return 'mBTC'
|
|
if p == 2:
|
|
return 'bits'
|
|
raise Exception('Unknown base unit')
|
|
|
|
def get_amount(self):
|
|
try:
|
|
x = Decimal(str(self.text()))
|
|
except:
|
|
return None
|
|
p = pow(10, self.decimal_point())
|
|
return int( p * x )
|
|
|
|
def setAmount(self, amount):
|
|
if amount is None:
|
|
self.setText("")
|
|
else:
|
|
self.setText(format_satoshis_plain(amount, self.decimal_point()))
|
|
|
|
class BTCkBEdit(BTCAmountEdit):
|
|
def _base_unit(self):
|
|
return BTCAmountEdit._base_unit(self) + '/kB'
|