Beispiel #1
0
    def __init__(self, parent, delimiters, entries, entries_updater):

        super(QDelimitedCompleter, self).__init__(parent)

        self.delimiters = delimiters
        if isinstance(parent, QtWidgets.QLineEdit):
            self.text_getter = parent.text
            self.cursor_pos = parent.cursorPosition
            self.insert_text = parent.insert
            parent.textChanged[str].connect(self.text_changed)
            self.completionNeeded.connect(self.complete)
        elif isinstance(parent, QtWidgets.QTextEdit):
            parent.textChanged.connect(self.text_changed)
            self.cursor_pos = lambda: parent.textCursor().position()
            self.insert_text =\
                lambda text: parent.textCursor().insertText(text)
            self.text_getter = parent.toPlainText
            self.completionNeeded.connect(self._text_edit_complete)
        else:
            msg = 'Parent of QtCompleter must QLineEdit or QTextEdit, not {}'
            raise ValueError(msg.format(parent))

        self.setCaseSensitivity(QtCore.Qt.CaseSensitive)
        self.setModel(QtCore.QStringListModel(entries, self))

        self.activated[str].connect(self.complete_text)
        self.setWidget(parent)

        self._upddate_entries = True
        self._popup_active = False
        self.entries_updater = entries_updater
Beispiel #2
0
    def text_changed(self, text=None):
        """Callback handling the text being edited on the parent.

        """
        if not text:
            text = self.text_getter()

        if self._upddate_entries and self.entries_updater:
            entries = self.entries_updater()
            self.setModel(QtCore.QStringListModel(entries, self))
            self._upddate_entries = False

        all_text = uni(text)
        text = all_text[:self.cursor_pos()]
        split = text.split(self.delimiters[0])
        prefix = split[-1].strip()

        if len(split) > 1:
            self.setCompletionPrefix(prefix)
            self.completionNeeded.emit()
        elif self.popup().isVisible():
            self.popup().hide()
Beispiel #3
0
    def _update_entries(self, entries):
        """Update the completer completion model.

        """
        self.setModel(QtCore.QStringListModel(entries))