Remove srcmodel attribute from completionfilter.

This commit is contained in:
Florian Bruhin 2014-09-24 22:18:53 +02:00
parent cb35452cf0
commit f2b46dc2e9
2 changed files with 11 additions and 12 deletions

View File

@ -34,14 +34,12 @@ class CompletionFilterModel(QSortFilterProxyModel):
"""Subclass of QSortFilterProxyModel with custom sorting/filtering. """Subclass of QSortFilterProxyModel with custom sorting/filtering.
Attributes: Attributes:
srcmodel: The source model of this QSFPM.
_pattern: The pattern to filter with. _pattern: The pattern to filter with.
""" """
def __init__(self, source, parent=None): def __init__(self, source, parent=None):
super().__init__(parent) super().__init__(parent)
super().setSourceModel(source) super().setSourceModel(source)
self.srcmodel = source
self._pattern = '' self._pattern = ''
def set_pattern(self, val): def set_pattern(self, val):
@ -59,7 +57,7 @@ class CompletionFilterModel(QSortFilterProxyModel):
self.invalidateFilter() self.invalidateFilter()
sortcol = 0 sortcol = 0
try: try:
self.srcmodel.sort(sortcol) self.sourceModel().sort(sortcol)
except NotImplementedError: except NotImplementedError:
self.sort(sortcol) self.sort(sortcol)
self.invalidate() self.invalidate()
@ -109,13 +107,12 @@ class CompletionFilterModel(QSortFilterProxyModel):
qtutils.ensure_valid(index) qtutils.ensure_valid(index)
index = self.mapToSource(index) index = self.mapToSource(index)
qtutils.ensure_valid(index) qtutils.ensure_valid(index)
self.srcmodel.mark_item(index, text) self.sourceModel().mark_item(index, text)
def setSourceModel(self, model): def setSourceModel(self, model):
"""Override QSortFilterProxyModel's setSourceModel to clear pattern.""" """Override QSortFilterProxyModel's setSourceModel to clear pattern."""
log.completion.debug("Setting source model: {}".format(model)) log.completion.debug("Setting source model: {}".format(model))
self.set_pattern('') self.set_pattern('')
self.srcmodel = model
super().setSourceModel(model) super().setSourceModel(model)
def filterAcceptsRow(self, row, parent): def filterAcceptsRow(self, row, parent):
@ -133,9 +130,9 @@ class CompletionFilterModel(QSortFilterProxyModel):
""" """
if parent == QModelIndex(): if parent == QModelIndex():
return True return True
idx = self.srcmodel.index(row, 0, parent) idx = self.sourceModel().index(row, 0, parent)
qtutils.ensure_valid(idx) qtutils.ensure_valid(idx)
data = self.srcmodel.data(idx) data = self.sourceModel().data(idx)
# TODO more sophisticated filtering # TODO more sophisticated filtering
if not self._pattern: if not self._pattern:
return True return True
@ -157,14 +154,16 @@ class CompletionFilterModel(QSortFilterProxyModel):
qtutils.ensure_valid(lindex) qtutils.ensure_valid(lindex)
qtutils.ensure_valid(rindex) qtutils.ensure_valid(rindex)
left_sort = self.srcmodel.data(lindex, role=completion.Role.sort) srcmodel = self.sourceModel()
right_sort = self.srcmodel.data(rindex, role=completion.Role.sort)
left_sort = srcmodel.data(lindex, role=completion.Role.sort)
right_sort = srcmodel.data(rindex, role=completion.Role.sort)
if left_sort is not None and right_sort is not None: if left_sort is not None and right_sort is not None:
return left_sort < right_sort return left_sort < right_sort
left = self.srcmodel.data(lindex) left = srcmodel.data(lindex)
right = self.srcmodel.data(rindex) right = srcmodel.data(rindex)
leftstart = left.startswith(self._pattern) leftstart = left.startswith(self._pattern)
rightstart = right.startswith(self._pattern) rightstart = right.startswith(self._pattern)

View File

@ -221,7 +221,7 @@ class Completer(QObject):
log.completion.debug( log.completion.debug(
"New completion for {}: {}, with pattern '{}'".format( "New completion for {}: {}, with pattern '{}'".format(
parts, model.srcmodel.__class__.__name__, pattern)) parts, model.sourceModel().__class__.__name__, pattern))
if self._model().count() == 0: if self._model().count() == 0:
completion.hide() completion.hide()