def loadElements(self, rows): """ elemplist - a list of (elem obj, field). *field=None* means separator. """ self.beginResetModel() self.clear() for i, (elem, fld) in enumerate(rows): pvsp = elem.pv(field=fld, handle="setpoint") for j, pv in enumerate(pvsp): self._pvidx.setdefault(pv, []) self._pvidx[pv].append((i, C_VAL_SP, j)) pvrb = elem.pv(field=fld, handle="readback") for j, pv in enumerate(pvrb): self._pvidx.setdefault(pv, []) self._pvidx[pv].append((i, C_VAL_RB, j)) # one data record, pvs are all list rec = [elem, fld, [None] * len(pvsp), [None] * len(pvrb)] for j, s in enumerate(self._unitsys): rec.append([None] * len(pvrb)) self._data.append(tuple(rec)) self._pvlst.append(pvsp + pvrb) self._block = [0] k = 0 for i in range(1, len(rows)): elem, fld = rows[i] if elem != rows[i - 1][0]: k += 1 self._block.append(k) self._cadata = CaDataMonitor(wait=0.0) for pv in self._pvidx.keys(): #self._cadata.addHook(pv, self._ca_update) self._cadata.addHook(pv, self._ca_update) self._cadata.addPv(self._pvidx.keys()) self.endResetModel() self._cadata.start()