~emihalac/mnemosyne-proj/mnemosyne-proj

« back to all changes in this revision

Viewing changes to mnemosyne/mnemosyne/pyqt_ui/tag_completer.py

  • Committer: Emilian Mihalache
  • Date: 2017-04-07 05:09:15 UTC
  • Revision ID: emihalac@gmail.com-20170407050915-4j5e1d5evt3vzmlm
Fix tag autocompletion when selection is done with mouse

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from PyQt5 import QtWidgets, QtGui
 
2
 
 
3
class TagCompleter(QtWidgets.QCompleter):
 
4
    def __init__(self, parent = None):
 
5
        super(TagCompleter, self).__init__(parent)
 
6
 
 
7
    def handle_prefix_change(self, new_prefix):
 
8
        if new_prefix:
 
9
            self.setCompletionPrefix(new_prefix)
 
10
            self.complete()
 
11
 
 
12
    def refresh_completion_model(self, new_model):
 
13
        """Sets the completion model that the completer will use.
 
14
 
 
15
        Ideally, we'd be able to just set the completion model once and then
 
16
        forget about it. However, this would result in unwanted behavior
 
17
        wherein word prefixes are added to the completion list by Qt.
 
18
 
 
19
        Example: user types in 'myf' and then selects the pop-up completion
 
20
        of 'myfancytag'. This results in 'myf' getting added as a potential
 
21
        completion suggestion, which is obviously wrong (... and infuriating
 
22
        to debug).
 
23
 
 
24
        That's why we only update the model: (1) at the start, with all
 
25
        available tags, and (2) when the user actually creates a new tag.
 
26
        """
 
27
        initial_tag_model_ = QtGui.QStandardItemModel()
 
28
        for index in range(0, new_model.rowCount()):
 
29
            initial_tag_model_.appendRow(new_model.item(index).clone())
 
30
        self.setModel(initial_tag_model_)