Sort items correctly
This commit is contained in:
parent
7a549b38a4
commit
3e47c89bac
@ -99,6 +99,9 @@ class CompletionModel(QAbstractItemModel):
|
|||||||
|
|
||||||
return len(pitem.children)
|
return len(pitem.children)
|
||||||
|
|
||||||
|
def sort(self, column, order=Qt.AscendingOrder):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
def init_data(self):
|
def init_data(self):
|
||||||
for (cat, items) in self._data.items():
|
for (cat, items) in self._data.items():
|
||||||
newcat = CompletionItem([cat], self.root)
|
newcat = CompletionItem([cat], self.root)
|
||||||
@ -145,7 +148,7 @@ class CompletionItem():
|
|||||||
|
|
||||||
class CompletionFilterModel(QSortFilterProxyModel):
|
class CompletionFilterModel(QSortFilterProxyModel):
|
||||||
_pattern = None
|
_pattern = None
|
||||||
# FIXME sort in a way strings starting with pattern are first
|
pattern_changed = pyqtSignal(str)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def pattern(self):
|
def pattern(self):
|
||||||
@ -154,7 +157,8 @@ class CompletionFilterModel(QSortFilterProxyModel):
|
|||||||
@pattern.setter
|
@pattern.setter
|
||||||
def pattern(self, val):
|
def pattern(self, val):
|
||||||
self._pattern = val
|
self._pattern = val
|
||||||
self.invalidateFilter()
|
self.invalidate()
|
||||||
|
self.pattern_changed.emit(val)
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
@ -169,3 +173,19 @@ class CompletionFilterModel(QSortFilterProxyModel):
|
|||||||
if not self.pattern:
|
if not self.pattern:
|
||||||
return True
|
return True
|
||||||
return self.pattern in data
|
return self.pattern in data
|
||||||
|
|
||||||
|
def lessThan(self, lindex, rindex):
|
||||||
|
left = self.sourceModel().data(lindex).value()
|
||||||
|
right = self.sourceModel().data(rindex).value()
|
||||||
|
|
||||||
|
leftstart = left.startswith(self.pattern)
|
||||||
|
rightstart = right.startswith(self.pattern)
|
||||||
|
|
||||||
|
if leftstart and rightstart:
|
||||||
|
return left < right
|
||||||
|
elif leftstart:
|
||||||
|
return True
|
||||||
|
elif rightstart:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return left < right
|
||||||
|
@ -51,6 +51,7 @@ class CompletionView(QTreeView):
|
|||||||
self.model = CompletionFilterModel()
|
self.model = CompletionFilterModel()
|
||||||
self.setModel(self.model)
|
self.setModel(self.model)
|
||||||
self.model.setSourceModel(self.completion_models['command'])
|
self.model.setSourceModel(self.completion_models['command'])
|
||||||
|
self.model.pattern_changed.connect(self.resort)
|
||||||
self.setItemDelegate(CompletionItemDelegate())
|
self.setItemDelegate(CompletionItemDelegate())
|
||||||
self.setStyleSheet(self._stylesheet.strip())
|
self.setStyleSheet(self._stylesheet.strip())
|
||||||
self.expandAll()
|
self.expandAll()
|
||||||
@ -71,6 +72,12 @@ class CompletionView(QTreeView):
|
|||||||
self.model.pattern = ''
|
self.model.pattern = ''
|
||||||
self.expandAll()
|
self.expandAll()
|
||||||
|
|
||||||
|
def resort(self, pattern):
|
||||||
|
try:
|
||||||
|
self.model.sourceModel().sort(0)
|
||||||
|
except NotImplementedError:
|
||||||
|
self.model.sort(0)
|
||||||
|
|
||||||
def resize_to_bar(self, geom):
|
def resize_to_bar(self, geom):
|
||||||
bottomleft = geom.topLeft()
|
bottomleft = geom.topLeft()
|
||||||
bottomright = geom.topRight()
|
bottomright = geom.topRight()
|
||||||
|
Loading…
Reference in New Issue
Block a user