forked from M-Labs/artiq
gui/tools: add ListSyncModel
This commit is contained in:
parent
179ca36d09
commit
e247fb5415
|
@ -1,7 +1,7 @@
|
||||||
from quamash import QtCore
|
from quamash import QtCore
|
||||||
|
|
||||||
|
|
||||||
class _DictSyncSubstruct:
|
class _SyncSubstruct:
|
||||||
def __init__(self, update_cb, ref):
|
def __init__(self, update_cb, ref):
|
||||||
self.update_cb = update_cb
|
self.update_cb = update_cb
|
||||||
self.ref = ref
|
self.ref = ref
|
||||||
|
@ -27,7 +27,7 @@ class _DictSyncSubstruct:
|
||||||
self.update_cb()
|
self.update_cb()
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
return _DictSyncSubstruct(self.update_cb, self.ref[key])
|
return _SyncSubstruct(self.update_cb, self.ref[key])
|
||||||
|
|
||||||
|
|
||||||
class DictSyncModel(QtCore.QAbstractTableModel):
|
class DictSyncModel(QtCore.QAbstractTableModel):
|
||||||
|
@ -100,13 +100,63 @@ class DictSyncModel(QtCore.QAbstractTableModel):
|
||||||
del self.backing_store[k]
|
del self.backing_store[k]
|
||||||
self.endRemoveRows()
|
self.endRemoveRows()
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, k):
|
||||||
def update():
|
def update():
|
||||||
self[key] = self.backing_store[key]
|
self[k] = self.backing_store[k]
|
||||||
return _DictSyncSubstruct(update, self.backing_store[key])
|
return _SyncSubstruct(update, self.backing_store[k])
|
||||||
|
|
||||||
def sort_key(self, k, v):
|
def sort_key(self, k, v):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def convert(self, k, v, column):
|
def convert(self, k, v, column):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
class ListSyncModel(QtCore.QAbstractTableModel):
|
||||||
|
def __init__(self, headers, parent, init):
|
||||||
|
self.headers = headers
|
||||||
|
self.backing_store = init
|
||||||
|
QtCore.QAbstractTableModel.__init__(self, parent)
|
||||||
|
|
||||||
|
def rowCount(self, parent):
|
||||||
|
return len(self.backing_store)
|
||||||
|
|
||||||
|
def columnCount(self, parent):
|
||||||
|
return len(self.headers)
|
||||||
|
|
||||||
|
def data(self, index, role):
|
||||||
|
if not index.isValid():
|
||||||
|
return None
|
||||||
|
elif role != QtCore.Qt.DisplayRole:
|
||||||
|
return None
|
||||||
|
return self.convert(self.backing_store[index.row()], index.column())
|
||||||
|
|
||||||
|
def headerData(self, col, orientation, role):
|
||||||
|
if (orientation == QtCore.Qt.Horizontal
|
||||||
|
and role == QtCore.Qt.DisplayRole):
|
||||||
|
return self.headers[col]
|
||||||
|
return None
|
||||||
|
|
||||||
|
def __setitem__(self, k, v):
|
||||||
|
self.dataChanged.emit(self.index(k, 0),
|
||||||
|
self.index(k, len(self.headers)))
|
||||||
|
self.backing_store[k] = v
|
||||||
|
|
||||||
|
def __delitem__(self, k):
|
||||||
|
self.beginRemoveRows(QtCore.QModelIndex(), k, k)
|
||||||
|
del self.backing_store[k]
|
||||||
|
self.endRemoveRows()
|
||||||
|
|
||||||
|
def __getitem__(self, k):
|
||||||
|
def update():
|
||||||
|
self[k] = self.backing_store[k]
|
||||||
|
return _SyncSubstruct(update, self.backing_store[k])
|
||||||
|
|
||||||
|
def append(self, v):
|
||||||
|
row = len(self.backing_store)
|
||||||
|
self.beginInsertRows(QtCore.QModelIndex(), row, row)
|
||||||
|
self.backing_store.append(v)
|
||||||
|
self.endInsertRows()
|
||||||
|
|
||||||
|
def convert(self, v, column):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
Loading…
Reference in New Issue