Use object registry for CompletionView.

This commit is contained in:
Florian Bruhin 2014-09-24 20:43:03 +02:00
parent 7e8e9ee21f
commit 6a5c9ba138
3 changed files with 21 additions and 17 deletions

View File

@ -33,7 +33,6 @@ class Completer(QObject):
"""Completer which manages completions in a CompletionView.
Attributes:
view: The CompletionView associated with this completer.
ignore_change: Whether to ignore the next completion update.
_models: dict of available completion models.
@ -48,9 +47,8 @@ class Completer(QObject):
change_completed_part = pyqtSignal(str, bool)
def __init__(self, view):
super().__init__(view)
self.view = view
def __init__(self, parent=None):
super().__init__()
self.ignore_change = False
self._models = {
@ -63,6 +61,10 @@ class Completer(QObject):
def __repr__(self):
return '<{}>'.format(self.__class__.__name__)
def _model(self):
"""Convienience method to get the current completion model."""
return objreg.get('completion').model()
def _init_static_completions(self):
"""Initialize the static completion models."""
self._models[usertypes.Completion.command] = CFM(
@ -165,7 +167,7 @@ class Completer(QObject):
indexes = selected.indexes()
if not indexes:
return
model = self.view.model()
model = self._model()
data = model.data(indexes[0])
if data is None:
return
@ -193,36 +195,38 @@ class Completer(QObject):
log.completion.debug("Ignoring completion update")
return
completion = objreg.get('completion')
if prefix != ':':
# This is a search or gibberish, so we don't need to complete
# anything (yet)
# FIXME complete searchs
self.view.hide()
completion.hide()
return
model = self._get_new_completion(parts, cursor_part)
if model != self.view.model():
if model != self._model():
if model is None:
self.view.hide()
completion.hide()
else:
self.view.set_model(model)
completion.set_model(model)
if model is None:
log.completion.debug("No completion model for {}.".format(parts))
return
pattern = parts[cursor_part] if parts else ''
self.view.model().set_pattern(pattern)
self._model().set_pattern(pattern)
log.completion.debug(
"New completion for {}: {}, with pattern '{}'".format(
parts, model.srcmodel.__class__.__name__, pattern))
if self.view.model().count() == 0:
self.view.hide()
if self._model().count() == 0:
completion.hide()
return
self.view.model().mark_all_items(pattern)
if self.view.enabled:
self.view.show()
self._model().mark_all_items(pattern)
if completion.enabled:
completion.show()

View File

@ -91,7 +91,8 @@ class CompletionView(QTreeView):
def __init__(self, parent=None):
super().__init__(parent)
completer_obj = completer.Completer(self)
objreg.register('completion', self)
completer_obj = completer.Completer()
objreg.register('completer', completer_obj)
self.enabled = config.get('completion', 'show')

View File

@ -87,7 +87,6 @@ class MainWindow(QWidget):
self._vbox.addWidget(self._tabbed_browser)
self._completion = completion.CompletionView(self)
objreg.register('completion', self._completion)
self.status = bar.StatusBar()
self._vbox.addWidget(self.status)