X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=gui%2Fqt%2Fpaytoedit.py;h=8b3e24c3d68357c2c610ddff22c2604a0a6b3014;hb=1bb00ff5af3a7f23f23c92b69cc2ff412731a7f3;hp=89d4e87976df3381892f435467b56a78ad42b56d;hpb=10e5ec56a1ab7ffb6eee78b9fe7a0470bc373988;p=electrum-nvc.git diff --git a/gui/qt/paytoedit.py b/gui/qt/paytoedit.py index 89d4e87..8b3e24c 100644 --- a/gui/qt/paytoedit.py +++ b/gui/qt/paytoedit.py @@ -18,6 +18,7 @@ from PyQt4.QtCore import * from PyQt4.QtGui import * +from qrtextedit import QRTextEdit import re from decimal import Decimal @@ -27,20 +28,24 @@ RE_ADDRESS = '[1-9A-HJ-NP-Za-km-z]{26,}' RE_ALIAS = '(.*?)\s*\<([1-9A-HJ-NP-Za-km-z]{26,})\>' frozen_style = "QWidget { background-color:none; border:none;}" -normal_style = "QTextEdit { }" +normal_style = "QPlainTextEdit { }" -class PayToEdit(QTextEdit): +class PayToEdit(QRTextEdit): - def __init__(self, amount_edit): - QTextEdit.__init__(self) - self.amount_edit = amount_edit + def __init__(self, win): + QRTextEdit.__init__(self) + self.win = win + self.amount_edit = win.amount_e self.document().contentsChanged.connect(self.update_size) self.heightMin = 0 self.heightMax = 150 - self.setMinimumHeight(27) - self.setMaximumHeight(27) self.c = None - + self.textChanged.connect(self.check_text) + self.outputs = [] + self.is_pr = False + self.scan_f = self.win.pay_from_URI + self.update_size() + self.payto_address = None def lock_amount(self): self.amount_edit.setFrozen(True) @@ -51,13 +56,28 @@ class PayToEdit(QTextEdit): def setFrozen(self, b): self.setReadOnly(b) self.setStyleSheet(frozen_style if b else normal_style) + self.button.setHidden(b) + + def setGreen(self): + self.is_pr = True + self.setStyleSheet("QWidget { background-color:#80ff80;}") + def setExpired(self): + self.is_pr = True + self.setStyleSheet("QWidget { background-color:#ffcccc;}") def parse_address_and_amount(self, line): - x, y = line.split(',') - address = self.parse_address(x) - amount = self.parse_amount(y) - return address, amount + m = re.match('^OP_RETURN\s+"(.+)"$', line.strip()) + if m: + type = 'op_return' + address = m.group(1) + amount = 0 + else: + x, y = line.split(',') + type = 'address' + address = self.parse_address(x) + amount = self.parse_amount(y) + return type, address, amount def parse_amount(self, x): @@ -74,16 +94,21 @@ class PayToEdit(QTextEdit): def check_text(self): + if self.is_pr: + return + # filter out empty lines lines = filter( lambda x: x, self.lines()) outputs = [] total = 0 + self.payto_address = None + if len(lines) == 1: try: self.payto_address = self.parse_address(lines[0]) except: - self.payto_address = None + pass if self.payto_address: self.unlock_amount() @@ -91,46 +116,39 @@ class PayToEdit(QTextEdit): for line in lines: try: - to_address, amount = self.parse_address_and_amount(line) + type, to_address, amount = self.parse_address_and_amount(line) except: continue - outputs.append((to_address, amount)) + outputs.append((type, to_address, amount)) total += amount self.outputs = outputs self.payto_address = None - if total: + if outputs: self.amount_edit.setAmount(total) else: self.amount_edit.setText("") + self.amount_edit.textEdited.emit("") + if total or len(lines)>1: self.lock_amount() else: self.unlock_amount() - def get_outputs(self): - if self.payto_address: - - if not bitcoin.is_address(self.payto_address): - QMessageBox.warning(self, _('Error'), _('Invalid Bitcoin Address') + ':\n' + to_address, _('OK')) - return - try: amount = self.amount_edit.get_amount() - except Exception: - QMessageBox.warning(self, _('Error'), _('Invalid Amount'), _('OK')) - return + except: + amount = None - outputs = [(self.payto_address, amount)] - return outputs + self.outputs = [('address', self.payto_address, amount)] - return self.outputs + return self.outputs[:] def lines(self): @@ -143,9 +161,11 @@ class PayToEdit(QTextEdit): def update_size(self): docHeight = self.document().size().height() - if self.heightMin <= docHeight <= self.heightMax: - self.setMinimumHeight(docHeight + 2) - self.setMaximumHeight(docHeight + 2) + h = docHeight*17 + 11 + if self.heightMin <= h <= self.heightMax: + self.setMinimumHeight(h) + self.setMaximumHeight(h) + self.verticalScrollBar().hide() def setCompleter(self, completer): @@ -164,7 +184,6 @@ class PayToEdit(QTextEdit): tc.movePosition(QTextCursor.EndOfWord) tc.insertText(completion.right(extra)) self.setTextCursor(tc) - self.check_text() def textUnderCursor(self): @@ -174,6 +193,9 @@ class PayToEdit(QTextEdit): def keyPressEvent(self, e): + if self.isReadOnly(): + return + if self.c.popup().isVisible(): if e.key() in [Qt.Key_Enter, Qt.Key_Return]: e.ignore() @@ -187,12 +209,7 @@ class PayToEdit(QTextEdit): e.ignore() return - isShortcut = (e.modifiers() and Qt.ControlModifier) and e.key() == Qt.Key_E - - if not self.c or not isShortcut: - QTextEdit.keyPressEvent(self, e) - self.check_text() - + QPlainTextEdit.keyPressEvent(self, e) ctrlOrShift = e.modifiers() and (Qt.ControlModifier or Qt.ShiftModifier) if self.c is None or (ctrlOrShift and e.text().isEmpty()): @@ -202,7 +219,7 @@ class PayToEdit(QTextEdit): hasModifier = (e.modifiers() != Qt.NoModifier) and not ctrlOrShift; completionPrefix = self.textUnderCursor() - if not isShortcut and (hasModifier or e.text().isEmpty() or completionPrefix.length() < 1 or eow.contains(e.text().right(1)) ): + if hasModifier or e.text().isEmpty() or completionPrefix.length() < 1 or eow.contains(e.text().right(1)): self.c.popup().hide() return @@ -214,4 +231,3 @@ class PayToEdit(QTextEdit): cr.setWidth(self.c.popup().sizeHintForColumn(0) + self.c.popup().verticalScrollBar().sizeHint().width()) self.c.complete(cr) -