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

View File

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

View File

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