forked from M-Labs/artiq
gui: improve search of hierarchical datasets. Closes #258
This commit is contained in:
parent
17582047cb
commit
b7151a253f
|
@ -4,7 +4,7 @@ import asyncio
|
||||||
from PyQt5 import QtCore, QtWidgets
|
from PyQt5 import QtCore, QtWidgets
|
||||||
|
|
||||||
from artiq.tools import short_format
|
from artiq.tools import short_format
|
||||||
from artiq.gui.tools import LayoutWidget
|
from artiq.gui.tools import LayoutWidget, QRecursiveFilterProxyModel
|
||||||
from artiq.gui.models import DictSyncTreeSepModel
|
from artiq.gui.models import DictSyncTreeSepModel
|
||||||
from artiq.protocols.pc_rpc import AsyncioClient as RPCClient
|
from artiq.protocols.pc_rpc import AsyncioClient as RPCClient
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ class DatasetsDock(QtWidgets.QDockWidget):
|
||||||
|
|
||||||
def set_model(self, model):
|
def set_model(self, model):
|
||||||
self.table_model = model
|
self.table_model = model
|
||||||
self.table_model_filter = QtCore.QSortFilterProxyModel()
|
self.table_model_filter = QRecursiveFilterProxyModel()
|
||||||
self.table_model_filter.setSourceModel(self.table_model)
|
self.table_model_filter.setSourceModel(self.table_model)
|
||||||
self.table.setModel(self.table_model_filter)
|
self.table.setModel(self.table_model_filter)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ import numpy as np
|
||||||
from PyQt5 import QtCore, QtWidgets
|
from PyQt5 import QtCore, QtWidgets
|
||||||
|
|
||||||
from artiq.tools import short_format
|
from artiq.tools import short_format
|
||||||
from artiq.gui.tools import LayoutWidget
|
from artiq.gui.tools import LayoutWidget, QRecursiveFilterProxyModel
|
||||||
from artiq.gui.models import DictSyncTreeSepModel
|
from artiq.gui.models import DictSyncTreeSepModel
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ class DatasetsDock(QtWidgets.QDockWidget):
|
||||||
|
|
||||||
def set_model(self, model):
|
def set_model(self, model):
|
||||||
self.table_model = model
|
self.table_model = model
|
||||||
self.table_model_filter = QtCore.QSortFilterProxyModel()
|
self.table_model_filter = QRecursiveFilterProxyModel()
|
||||||
self.table_model_filter.setSourceModel(self.table_model)
|
self.table_model_filter.setSourceModel(self.table_model)
|
||||||
self.table.setModel(self.table_model_filter)
|
self.table.setModel(self.table_model_filter)
|
||||||
|
|
||||||
|
|
|
@ -61,3 +61,21 @@ async def get_open_file_name(parent, caption, dir, filter):
|
||||||
dialog.rejected.connect(fut.cancel)
|
dialog.rejected.connect(fut.cancel)
|
||||||
dialog.open()
|
dialog.open()
|
||||||
return await fut
|
return await fut
|
||||||
|
|
||||||
|
|
||||||
|
# Based on:
|
||||||
|
# http://stackoverflow.com/questions/250890/using-qsortfilterproxymodel-with-a-tree-model
|
||||||
|
class QRecursiveFilterProxyModel(QtCore.QSortFilterProxyModel):
|
||||||
|
def filterAcceptsRow(self, source_row, source_parent):
|
||||||
|
regexp = self.filterRegExp()
|
||||||
|
if not regexp.isEmpty():
|
||||||
|
source_index = self.sourceModel().index(
|
||||||
|
source_row, self.filterKeyColumn(), source_parent)
|
||||||
|
if source_index.isValid():
|
||||||
|
for i in range(self.sourceModel().rowCount(source_index)):
|
||||||
|
if self.filterAcceptsRow(i, source_index):
|
||||||
|
return True
|
||||||
|
key = self.sourceModel().data(source_index, self.filterRole())
|
||||||
|
return regexp.indexIn(key) != -1
|
||||||
|
return QtCore.QSortFilterProxyModel.filterAcceptsRow(
|
||||||
|
self, source_row, source_parent)
|
||||||
|
|
Loading…
Reference in New Issue