qt: implement completer for PayToEdit
This commit is contained in:
@@ -64,6 +64,7 @@ class Contacts(dict, Logger):
|
|||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
self.db.put('contacts', dict(self))
|
self.db.put('contacts', dict(self))
|
||||||
|
trigger_callback('contacts_updated')
|
||||||
|
|
||||||
def import_file(self, path):
|
def import_file(self, path):
|
||||||
data = read_json_file(path)
|
data = read_json_file(path)
|
||||||
|
|||||||
@@ -26,13 +26,14 @@
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
from typing import Optional, TYPE_CHECKING
|
from typing import Optional, TYPE_CHECKING
|
||||||
|
|
||||||
from PyQt6.QtCore import Qt, QTimer, QSize
|
from PyQt6.QtCore import Qt, QTimer, QSize, QStringListModel
|
||||||
from PyQt6.QtCore import pyqtSignal
|
from PyQt6.QtCore import pyqtSignal
|
||||||
from PyQt6.QtGui import QFontMetrics, QFont
|
from PyQt6.QtGui import QFontMetrics, QFont
|
||||||
from PyQt6.QtWidgets import QTextEdit, QWidget, QLineEdit, QStackedLayout
|
from PyQt6.QtWidgets import QTextEdit, QWidget, QLineEdit, QStackedLayout, QCompleter
|
||||||
|
|
||||||
from electrum.payment_identifier import PaymentIdentifier
|
from electrum.payment_identifier import PaymentIdentifier
|
||||||
from electrum.logging import Logger
|
from electrum.logging import Logger
|
||||||
|
from electrum.util import EventListener, event_listener
|
||||||
|
|
||||||
from . import util
|
from . import util
|
||||||
from .util import MONOSPACE_FONT, GenericInputHandler, editor_contextMenuEvent, ColorScheme
|
from .util import MONOSPACE_FONT, GenericInputHandler, editor_contextMenuEvent, ColorScheme
|
||||||
@@ -94,7 +95,7 @@ class ResizingTextEdit(QTextEdit):
|
|||||||
return QSize(0, self.minimumHeight())
|
return QSize(0, self.minimumHeight())
|
||||||
|
|
||||||
|
|
||||||
class PayToEdit(QWidget, Logger, GenericInputHandler):
|
class PayToEdit(QWidget, Logger, GenericInputHandler, EventListener):
|
||||||
paymentIdentifierChanged = pyqtSignal()
|
paymentIdentifierChanged = pyqtSignal()
|
||||||
textChanged = pyqtSignal()
|
textChanged = pyqtSignal()
|
||||||
|
|
||||||
@@ -107,6 +108,8 @@ class PayToEdit(QWidget, Logger, GenericInputHandler):
|
|||||||
self._layout = QStackedLayout()
|
self._layout = QStackedLayout()
|
||||||
self.setLayout(self._layout)
|
self.setLayout(self._layout)
|
||||||
|
|
||||||
|
self.send_tab = send_tab
|
||||||
|
|
||||||
def text_edit_changed():
|
def text_edit_changed():
|
||||||
text = self.text_edit.toPlainText()
|
text = self.text_edit.toPlainText()
|
||||||
if self._text != text:
|
if self._text != text:
|
||||||
@@ -133,6 +136,21 @@ class PayToEdit(QWidget, Logger, GenericInputHandler):
|
|||||||
self.text_edit.textReallyChanged.connect(text_edit_changed)
|
self.text_edit.textReallyChanged.connect(text_edit_changed)
|
||||||
self.text_edit.resized.connect(text_edit_resized)
|
self.text_edit.resized.connect(text_edit_resized)
|
||||||
|
|
||||||
|
def on_completed(item: str):
|
||||||
|
text = self._completer_contacts[1][self._completer_contacts[0].index(item)]
|
||||||
|
self.try_payment_identifier(text)
|
||||||
|
self.completer.popup().hide()
|
||||||
|
|
||||||
|
self.completer = QCompleter()
|
||||||
|
self.completer.setCompletionMode(QCompleter.CompletionMode.PopupCompletion)
|
||||||
|
self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
|
||||||
|
self.completer.setFilterMode(Qt.MatchFlag.MatchContains)
|
||||||
|
self.completer.activated.connect(on_completed)
|
||||||
|
|
||||||
|
self.update_completer()
|
||||||
|
|
||||||
|
self.line_edit.setCompleter(self.completer)
|
||||||
|
|
||||||
self.textChanged.connect(self._handle_text_change)
|
self.textChanged.connect(self._handle_text_change)
|
||||||
|
|
||||||
self._layout.addWidget(self.line_edit)
|
self._layout.addWidget(self.line_edit)
|
||||||
@@ -185,6 +203,21 @@ class PayToEdit(QWidget, Logger, GenericInputHandler):
|
|||||||
|
|
||||||
self.payment_identifier = None # type: Optional[PaymentIdentifier]
|
self.payment_identifier = None # type: Optional[PaymentIdentifier]
|
||||||
|
|
||||||
|
self.register_callbacks()
|
||||||
|
self.destroyed.connect(lambda: self.unregister_callbacks())
|
||||||
|
|
||||||
|
@event_listener
|
||||||
|
def on_event_contacts_updated(self):
|
||||||
|
self.update_completer()
|
||||||
|
|
||||||
|
def update_completer(self):
|
||||||
|
self._completer_contacts = [], []
|
||||||
|
for k, v in self.send_tab.wallet.contacts.items():
|
||||||
|
self._completer_contacts[0].append(f'{v[1]} <{k}>')
|
||||||
|
self._completer_contacts[1].append(k)
|
||||||
|
|
||||||
|
self.completer.setModel(QStringListModel(self._completer_contacts[0]))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def multiline(self):
|
def multiline(self):
|
||||||
return self._multiline
|
return self._multiline
|
||||||
|
|||||||
Reference in New Issue
Block a user