Skip to content
Snippets Groups Projects
spellcheck_whitelist_dialog_wrapper.py 2.19 KiB
# wrapper from https://stackoverflow.com/questions/2398800/linking-a-qtdesigner-ui-file-to-python-pyqt
from PySide6.QtCore import Qt
from PySide6.QtCore import Slot # for signal/slot support
from PySide6.QtWidgets import QDialog, QPlainTextEdit
from PySide6.QtGui import QKeyEvent
from spellcheck_whitelist_dialog import Ui_SpellcheckWhitelistDialog
from spellcheck import user_whitelist

class SpellcheckWhitelistView(QPlainTextEdit):
    def __init__(self):
        super().__init__()

    # intercept keyPress to prohibit select ascii text
    @Slot(QKeyEvent)
    def keyPressEvent(self, e):
        text = e.text()
        if text != '' \
                and text in '0123456789!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~':
            print("text dropped: '%s'"%text)

            # drop the text
            return
        else:
            # keep the text
            super().keyPressEvent(e)

class SpellcheckWhitelistDialogWrapper(QDialog):

    def __init__(self, parent_window, spellcheck_manager):
        super().__init__(parent_window)
        self.spellcheck_manager = spellcheck_manager
        self.ui = Ui_SpellcheckWhitelistDialog()
        self.ui.setupUi(self) # we refine this further below
        self.setFixedSize(self.width(), self.height())
        self.setWindowFlags(self.windowFlags() | Qt.Tool)
        self.setAttribute(Qt.WA_MacAlwaysShowToolWindow)
        self.setWindowTitle("MP Code Spellcheck Whitelist")
        self.ui.copy_pb.setDisabled(True)

        # the QPlainTextEdit view
        self.view = SpellcheckWhitelistView()
        self.ui.layout.addWidget(self.view)
        self.document = self.view.document()
        self.document.setPlainText(user_whitelist())

        # connect buttons
        self.view.textChanged.connect(self._text_changed)
        self.ui.copy_pb.clicked.connect(self.view.copy)
        self.ui.close_pb.clicked.connect(self.close) # superclass close
        self.view.copyAvailable.connect(self._copy_available)

    @Slot()
    def _text_changed(self):
        text = self.document.toPlainText()
        self.spellcheck_manager.set_user_whitelist(text)

    @Slot(bool)
    def _copy_available(self, copy_is_available):
        self.ui.copy_pb.setDisabled(not copy_is_available)