mirror of
https://github.com/m-labs/artiq.git
synced 2024-12-25 19:28:26 +08:00
artiq_gui: add a search box in parameters dock
This commit is contained in:
parent
3636025e69
commit
1ad5165cc7
@ -1,7 +1,8 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from quamash import QtGui
|
from quamash import QtGui, QtCore
|
||||||
from pyqtgraph import dockarea
|
from pyqtgraph import dockarea
|
||||||
|
from pyqtgraph import LayoutWidget
|
||||||
|
|
||||||
from artiq.protocols.sync_struct import Subscriber
|
from artiq.protocols.sync_struct import Subscriber
|
||||||
from artiq.gui.tools import DictSyncModel
|
from artiq.gui.tools import DictSyncModel
|
||||||
@ -28,9 +29,32 @@ class ParametersDock(dockarea.Dock):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
dockarea.Dock.__init__(self, "Parameters", size=(400, 300))
|
dockarea.Dock.__init__(self, "Parameters", size=(400, 300))
|
||||||
|
|
||||||
|
splitter = QtGui.QSplitter(QtCore.Qt.Horizontal)
|
||||||
|
self.addWidget(splitter)
|
||||||
|
grid = LayoutWidget()
|
||||||
|
splitter.addWidget(grid)
|
||||||
|
|
||||||
|
self.search = QtGui.QLineEdit()
|
||||||
|
self.search.setPlaceholderText("search...")
|
||||||
|
self.search.editingFinished.connect(self.search_parameters)
|
||||||
|
grid.addWidget(self.search, 0, 0)
|
||||||
|
|
||||||
self.table = QtGui.QTableView()
|
self.table = QtGui.QTableView()
|
||||||
self.table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
|
self.table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
|
||||||
self.addWidget(self.table)
|
grid.addWidget(self.table, 1, 0)
|
||||||
|
|
||||||
|
def search_parameters(self):
|
||||||
|
model = self.table.model()
|
||||||
|
parentIndex = model.index(0, 0)
|
||||||
|
numRows = model.rowCount(parentIndex)
|
||||||
|
|
||||||
|
for row in range(numRows):
|
||||||
|
index = model.index(row, 0)
|
||||||
|
parameter = model.data(index, QtCore.Qt.DisplayRole)
|
||||||
|
if parameter.startswith(self.search.displayText()):
|
||||||
|
self.table.showRow(row)
|
||||||
|
else:
|
||||||
|
self.table.hideRow(row)
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def sub_connect(self, host, port):
|
def sub_connect(self, host, port):
|
||||||
|
@ -17,13 +17,13 @@ class _DictSyncSubstruct:
|
|||||||
class DictSyncModel(QtCore.QAbstractTableModel):
|
class DictSyncModel(QtCore.QAbstractTableModel):
|
||||||
def __init__(self, headers, parent, init):
|
def __init__(self, headers, parent, init):
|
||||||
self.headers = headers
|
self.headers = headers
|
||||||
self.data = init
|
self.backing_store = init
|
||||||
self.row_to_key = sorted(self.data.keys(),
|
self.row_to_key = sorted(self.backing_store.keys(),
|
||||||
key=lambda k: self.sort_key(k, self.data[k]))
|
key=lambda k: self.sort_key(k, self.backing_store[k]))
|
||||||
QtCore.QAbstractTableModel.__init__(self, parent)
|
QtCore.QAbstractTableModel.__init__(self, parent)
|
||||||
|
|
||||||
def rowCount(self, parent):
|
def rowCount(self, parent):
|
||||||
return len(self.data)
|
return len(self.backing_store)
|
||||||
|
|
||||||
def columnCount(self, parent):
|
def columnCount(self, parent):
|
||||||
return len(self.headers)
|
return len(self.headers)
|
||||||
@ -34,7 +34,7 @@ class DictSyncModel(QtCore.QAbstractTableModel):
|
|||||||
elif role != QtCore.Qt.DisplayRole:
|
elif role != QtCore.Qt.DisplayRole:
|
||||||
return None
|
return None
|
||||||
k = self.row_to_key[index.row()]
|
k = self.row_to_key[index.row()]
|
||||||
return self.convert(k, self.data[k], index.column())
|
return self.convert(k, self.backing_store[k], index.column())
|
||||||
|
|
||||||
def headerData(self, col, orientation, role):
|
def headerData(self, col, orientation, role):
|
||||||
if (orientation == QtCore.Qt.Horizontal
|
if (orientation == QtCore.Qt.Horizontal
|
||||||
@ -48,7 +48,7 @@ class DictSyncModel(QtCore.QAbstractTableModel):
|
|||||||
while lo < hi:
|
while lo < hi:
|
||||||
mid = (lo + hi)//2
|
mid = (lo + hi)//2
|
||||||
if (self.sort_key(self.row_to_key[mid],
|
if (self.sort_key(self.row_to_key[mid],
|
||||||
self.data[self.row_to_key[mid]])
|
self.backing_store[self.row_to_key[mid]])
|
||||||
< self.sort_key(k, v)):
|
< self.sort_key(k, v)):
|
||||||
lo = mid + 1
|
lo = mid + 1
|
||||||
else:
|
else:
|
||||||
@ -56,7 +56,7 @@ class DictSyncModel(QtCore.QAbstractTableModel):
|
|||||||
return lo
|
return lo
|
||||||
|
|
||||||
def __setitem__(self, k, v):
|
def __setitem__(self, k, v):
|
||||||
if k in self.data:
|
if k in self.backing_store:
|
||||||
old_row = self.row_to_key.index(k)
|
old_row = self.row_to_key.index(k)
|
||||||
new_row = self._find_row(k, v)
|
new_row = self._find_row(k, v)
|
||||||
if old_row == new_row:
|
if old_row == new_row:
|
||||||
@ -65,7 +65,7 @@ class DictSyncModel(QtCore.QAbstractTableModel):
|
|||||||
else:
|
else:
|
||||||
self.beginMoveRows(QtCore.QModelIndex(), old_row, old_row,
|
self.beginMoveRows(QtCore.QModelIndex(), old_row, old_row,
|
||||||
QtCore.QModelIndex(), new_row)
|
QtCore.QModelIndex(), new_row)
|
||||||
self.data[k] = v
|
self.backing_store[k] = v
|
||||||
self.row_to_key[old_row], self.row_to_key[new_row] = \
|
self.row_to_key[old_row], self.row_to_key[new_row] = \
|
||||||
self.row_to_key[new_row], self.row_to_key[old_row]
|
self.row_to_key[new_row], self.row_to_key[old_row]
|
||||||
if old_row != new_row:
|
if old_row != new_row:
|
||||||
@ -73,7 +73,7 @@ class DictSyncModel(QtCore.QAbstractTableModel):
|
|||||||
else:
|
else:
|
||||||
row = self._find_row(k, v)
|
row = self._find_row(k, v)
|
||||||
self.beginInsertRows(QtCore.QModelIndex(), row, row)
|
self.beginInsertRows(QtCore.QModelIndex(), row, row)
|
||||||
self.data[k] = v
|
self.backing_store[k] = v
|
||||||
self.row_to_key.insert(row, k)
|
self.row_to_key.insert(row, k)
|
||||||
self.endInsertRows()
|
self.endInsertRows()
|
||||||
|
|
||||||
@ -81,13 +81,13 @@ class DictSyncModel(QtCore.QAbstractTableModel):
|
|||||||
row = self.row_to_key.index(k)
|
row = self.row_to_key.index(k)
|
||||||
self.beginRemoveRows(QtCore.QModelIndex(), row, row)
|
self.beginRemoveRows(QtCore.QModelIndex(), row, row)
|
||||||
del self.row_to_key[row]
|
del self.row_to_key[row]
|
||||||
del self.data[k]
|
del self.backing_store[k]
|
||||||
self.endRemoveRows()
|
self.endRemoveRows()
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
def update():
|
def update():
|
||||||
self[key] = self.data[key]
|
self[key] = self.backing_store[key]
|
||||||
return _DictSyncSubstruct(update, self.data[key])
|
return _DictSyncSubstruct(update, self.backing_store[key])
|
||||||
|
|
||||||
def sort_key(self, k, v):
|
def sort_key(self, k, v):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
Loading…
Reference in New Issue
Block a user