Move selection_changed to Completer
This commit is contained in:
parent
7d440426eb
commit
968bb3d430
@ -349,6 +349,7 @@ class QuteBrowser(QApplication):
|
||||
completion = self.mainwindow.completion
|
||||
tabs = self.mainwindow.tabs
|
||||
cmd = self.mainwindow.status.cmd
|
||||
completer = self.mainwindow.completion.completer
|
||||
|
||||
# misc
|
||||
self.lastWindowClosed.connect(self.shutdown)
|
||||
@ -410,9 +411,8 @@ class QuteBrowser(QApplication):
|
||||
cmd.clear_completion_selection.connect(
|
||||
completion.on_clear_completion_selection)
|
||||
cmd.hide_completion.connect(completion.hide)
|
||||
cmd.update_completion.connect(
|
||||
completion.completer.on_update_completion)
|
||||
completion.change_completed_part.connect(cmd.on_change_completed_part)
|
||||
cmd.update_completion.connect(completer.on_update_completion)
|
||||
completer.change_completed_part.connect(cmd.on_change_completed_part)
|
||||
|
||||
def _recover_pages(self):
|
||||
"""Try to recover all open pages.
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
"""Completer attached to a CompletionView."""
|
||||
|
||||
from PyQt5.QtCore import QObject, pyqtSlot
|
||||
from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject
|
||||
|
||||
import qutebrowser.config.config as config
|
||||
import qutebrowser.config.configdata as configdata
|
||||
@ -41,8 +41,18 @@ class Completer(QObject):
|
||||
ignore_change: Whether to ignore the next completion update.
|
||||
_models: dict of available completion models.
|
||||
_lastmodel: The model set in the last iteration.
|
||||
|
||||
Signals:
|
||||
change_completed_part: Text which should be substituted for the word
|
||||
we're currently completing.
|
||||
arg 0: The text to change to.
|
||||
arg 1: True if the text should be set
|
||||
immediately, without continuing
|
||||
completing the current field.
|
||||
"""
|
||||
|
||||
change_completed_part = pyqtSignal(str, bool)
|
||||
|
||||
def __init__(self, view):
|
||||
super().__init__(view)
|
||||
self.view = view
|
||||
@ -129,6 +139,35 @@ class Completer(QObject):
|
||||
model = self._models.get(completion_name)
|
||||
return model
|
||||
|
||||
def selection_changed(self, selected, deselected):
|
||||
"""Emit change_completed_part if a new item was selected.
|
||||
|
||||
Called from the views selectionChanged method.
|
||||
|
||||
Args:
|
||||
selected: New selection.
|
||||
delected: Previous selection.
|
||||
|
||||
Emit:
|
||||
change_completed_part: Emitted when there's data for the new item.
|
||||
"""
|
||||
indexes = selected.indexes()
|
||||
if not indexes:
|
||||
return
|
||||
model = self.view.model()
|
||||
data = model.data(indexes[0])
|
||||
if data is None:
|
||||
return
|
||||
if model.item_count == 1 and config.get('completion',
|
||||
'quick-complete'):
|
||||
# If we only have one item, we want to apply it immediately
|
||||
# and go on to the next part.
|
||||
self.change_completed_part.emit(data, True)
|
||||
else:
|
||||
self.ignore_change = True
|
||||
self.change_completed_part.emit(data, False)
|
||||
self.ignore_change = False
|
||||
|
||||
@pyqtSlot(str, list, int)
|
||||
def on_update_completion(self, prefix, parts, cursor_part):
|
||||
"""Check if completions are available and activate them.
|
||||
|
@ -47,19 +47,12 @@ class CompletionView(QTreeView):
|
||||
|
||||
Attributes:
|
||||
completer: The Completer instance to use.
|
||||
_lastmodel: The model set in the last iteration.
|
||||
_enabled: Whether showing the CompletionView is enabled.
|
||||
_height: The height to use for the CompletionView.
|
||||
_height_perc: Either None or a percentage if height should be relative.
|
||||
_delegate: The item delegate used.
|
||||
|
||||
Signals:
|
||||
change_completed_part: Text which should be substituted for the word
|
||||
we're currently completing.
|
||||
arg 0: The text to change to.
|
||||
arg 1: True if the text should be set
|
||||
immediately, without continuing
|
||||
completing the current field.
|
||||
resize_completion: Emitted when the completion should be resized.
|
||||
"""
|
||||
|
||||
@ -95,14 +88,12 @@ class CompletionView(QTreeView):
|
||||
|
||||
# FIXME style scrollbar
|
||||
|
||||
change_completed_part = pyqtSignal(str, bool)
|
||||
resize_completion = pyqtSignal()
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.completer = Completer(self)
|
||||
self._enabled = config.get('completion', 'show')
|
||||
self._lastmodel = None
|
||||
|
||||
self._delegate = CompletionItemDelegate(self)
|
||||
self.setItemDelegate(self._delegate)
|
||||
@ -222,29 +213,9 @@ class CompletionView(QTreeView):
|
||||
self._next_prev_item(prev=False)
|
||||
|
||||
def selectionChanged(self, selected, deselected):
|
||||
"""Extend selectionChanged to emit change_completed_part if necessary.
|
||||
|
||||
Args:
|
||||
selected: New selection.
|
||||
delected: Previous selection.
|
||||
|
||||
Emit:
|
||||
change_completed_part: Emitted when there's data for the new item.
|
||||
"""
|
||||
indexes = selected.indexes()
|
||||
if indexes:
|
||||
data = self.model().data(indexes[0])
|
||||
if data is not None:
|
||||
if self.model().item_count == 1 and config.get(
|
||||
'completion', 'quick-complete'):
|
||||
# If we only have one item, we want to apply it immediately
|
||||
# and go on to the next part.
|
||||
self.change_completed_part.emit(data, True)
|
||||
else:
|
||||
self.completer.ignore_change = True
|
||||
self.change_completed_part.emit(data, False)
|
||||
self.completer.ignore_change = False
|
||||
"""Extend selectionChanged to call completers selection_changed."""
|
||||
super().selectionChanged(selected, deselected)
|
||||
self.completer.selection_changed(selected, deselected)
|
||||
|
||||
def resizeEvent(self, e):
|
||||
"""Extend resizeEvent to adjust column size."""
|
||||
|
Loading…
Reference in New Issue
Block a user