Skip to content

Commit

Permalink
artiq_gui: add a search box in parameters dock
Browse files Browse the repository at this point in the history
fallen committed Jun 18, 2015
1 parent 3636025 commit 1ad5165
Showing 2 changed files with 38 additions and 14 deletions.
28 changes: 26 additions & 2 deletions artiq/gui/parameters.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import asyncio

from quamash import QtGui
from quamash import QtGui, QtCore
from pyqtgraph import dockarea
from pyqtgraph import LayoutWidget

from artiq.protocols.sync_struct import Subscriber
from artiq.gui.tools import DictSyncModel
@@ -28,9 +29,32 @@ class ParametersDock(dockarea.Dock):
def __init__(self):
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.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
def sub_connect(self, host, port):
24 changes: 12 additions & 12 deletions artiq/gui/tools.py
Original file line number Diff line number Diff line change
@@ -17,13 +17,13 @@ def __setitem__(self, key, value):
class DictSyncModel(QtCore.QAbstractTableModel):
def __init__(self, headers, parent, init):
self.headers = headers
self.data = init
self.row_to_key = sorted(self.data.keys(),
key=lambda k: self.sort_key(k, self.data[k]))
self.backing_store = init
self.row_to_key = sorted(self.backing_store.keys(),
key=lambda k: self.sort_key(k, self.backing_store[k]))
QtCore.QAbstractTableModel.__init__(self, parent)

def rowCount(self, parent):
return len(self.data)
return len(self.backing_store)

def columnCount(self, parent):
return len(self.headers)
@@ -34,7 +34,7 @@ def data(self, index, role):
elif role != QtCore.Qt.DisplayRole:
return None
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):
if (orientation == QtCore.Qt.Horizontal
@@ -48,15 +48,15 @@ def _find_row(self, k, v):
while lo < hi:
mid = (lo + hi)//2
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)):
lo = mid + 1
else:
hi = mid
return lo

def __setitem__(self, k, v):
if k in self.data:
if k in self.backing_store:
old_row = self.row_to_key.index(k)
new_row = self._find_row(k, v)
if old_row == new_row:
@@ -65,29 +65,29 @@ def __setitem__(self, k, v):
else:
self.beginMoveRows(QtCore.QModelIndex(), old_row, old_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[new_row], self.row_to_key[old_row]
if old_row != new_row:
self.endMoveRows()
else:
row = self._find_row(k, v)
self.beginInsertRows(QtCore.QModelIndex(), row, row)
self.data[k] = v
self.backing_store[k] = v
self.row_to_key.insert(row, k)
self.endInsertRows()

def __delitem__(self, k):
row = self.row_to_key.index(k)
self.beginRemoveRows(QtCore.QModelIndex(), row, row)
del self.row_to_key[row]
del self.data[k]
del self.backing_store[k]
self.endRemoveRows()

def __getitem__(self, key):
def update():
self[key] = self.data[key]
return _DictSyncSubstruct(update, self.data[key])
self[key] = self.backing_store[key]
return _DictSyncSubstruct(update, self.backing_store[key])

def sort_key(self, k, v):
raise NotImplementedError

0 comments on commit 1ad5165

Please sign in to comment.