52 #include <QPainterPath>
71 : QAbstractItemDelegate(parent)
81 float t_fPlotHeight = option.rect.height();
82 switch(index.column()) {
87 painter->drawText(QRectF(-option.rect.y()-t_fPlotHeight,0,t_fPlotHeight,20),Qt::AlignCenter,index.model()->data(index,Qt::DisplayRole).toString());
113 QVariant variant = index.model()->data(index,Qt::DisplayRole);
114 QList< QVector<float> > data = variant.value< QList< QVector<float> > >();
123 QPainterPath path(QPointF(option.rect.x(),option.rect.y()));
126 painter->setRenderHint(QPainter::Antialiasing,
false);
127 createGridPath(index, option, path, data);
131 pen.setStyle(Qt::DotLine);
133 painter->setPen(pen);
134 painter->drawPath(path);
138 path = QPainterPath(QPointF(option.rect.x(),option.rect.y()));
139 QPainterPath lastPath(QPointF(option.rect.x(),option.rect.y()));
141 createPlotPath(index, option, path, lastPath, data[0], data[1]);
144 painter->translate(0,t_fPlotHeight/2);
145 painter->setRenderHint(QPainter::Antialiasing,
true);
147 if(option.state & QStyle::State_Selected)
148 painter->setPen(QPen(t_pModel->isFreezed() ? Qt::darkRed : Qt::red, 1, Qt::SolidLine));
150 painter->setPen(QPen(t_pModel->isFreezed() ? Qt::darkGray : Qt::darkBlue, 1, Qt::SolidLine));
152 painter->drawPath(path);
156 painter->translate(0,t_fPlotHeight/2);
157 painter->setRenderHint(QPainter::Antialiasing,
true);
158 if(option.state & QStyle::State_Selected)
159 painter->setPen(QPen(t_pModel->isFreezed() ? Qt::darkRed : Qt::red, 1, Qt::SolidLine));
161 painter->setPen(QPen(t_pModel->isFreezed() ? Qt::darkGray : Qt::darkBlue, 1, Qt::SolidLine));
162 painter->drawPath(lastPath);
179 switch(index.column()) {
181 size = QSize(20,option.rect.height());
184 QList< QVector<float> > data = index.model()->data(index).value< QList<QVector<float> > >();
199 void RealTimeMultiSampleArrayDelegate::createPlotPath(
const QModelIndex &index,
const QStyleOptionViewItem &option, QPainterPath& path, QPainterPath& lastPath, QVector<float>& data, QVector<float>& lastData)
const
204 qint32 kind = t_pModel->
getKind(index.row());
205 float fMaxValue = 1e-9f;
209 qint32 unit =t_pModel->
getUnit(index.row());
215 else if(unit == FIFF_UNIT_T)
222 if(t_pModel->
getScaling().contains(FIFF_UNIT_T))
223 fMaxValue = t_pModel->
getScaling()[FIFF_UNIT_T];
228 case FIFFV_REF_MEG_CH: {
230 if(t_pModel->
getScaling().contains(FIFF_UNIT_T))
231 fMaxValue = t_pModel->
getScaling()[FIFF_UNIT_T];
236 if(t_pModel->
getScaling().contains(FIFFV_EEG_CH))
237 fMaxValue = t_pModel->
getScaling()[FIFFV_EEG_CH];
242 if(t_pModel->
getScaling().contains(FIFFV_EOG_CH))
243 fMaxValue = t_pModel->
getScaling()[FIFFV_EOG_CH];
246 case FIFFV_STIM_CH: {
248 if(t_pModel->
getScaling().contains(FIFFV_STIM_CH))
249 fMaxValue = t_pModel->
getScaling()[FIFFV_STIM_CH];
252 case FIFFV_MISC_CH: {
254 if(t_pModel->
getScaling().contains(FIFFV_MISC_CH))
255 fMaxValue = t_pModel->
getScaling()[FIFFV_MISC_CH];
261 float fScaleY = option.rect.height()/(2*fMaxValue);
263 float y_base = path.currentPosition().y();
264 QPointF qSamplePosition;
266 float fDx = ((float)option.rect.width()) / t_pModel->
getMaxSamples();
274 float newY = y_base-fValue;
276 qSamplePosition.setY(newY);
277 qSamplePosition.setX(path.currentPosition().x());
279 path.moveTo(qSamplePosition);
284 for(i = 1; i < data.size(); ++i) {
285 float val = data[i] - data[0];
286 fValue = val*fScaleY;
289 float newY = y_base-fValue;
291 qSamplePosition.setY(newY);
292 qSamplePosition.setX(path.currentPosition().x()+fDx);
294 path.lineTo(qSamplePosition);
298 qint32 sample_offset = t_pModel->
numVLines() + 1;
299 qSamplePosition.setX(qSamplePosition.x() + fDx*sample_offset);
300 lastPath.moveTo(qSamplePosition);
302 for(i += sample_offset; i < lastData.size(); ++i) {
303 float val = lastData[i] - lastData[0];
304 fValue = val*fScaleY;
306 float newY = y_base-fValue;
308 qSamplePosition.setY(newY);
309 qSamplePosition.setX(lastPath.currentPosition().x()+fDx);
311 lastPath.lineTo(qSamplePosition);
318 void RealTimeMultiSampleArrayDelegate::createGridPath(
const QModelIndex &index,
const QStyleOptionViewItem &option, QPainterPath& path, QList< QVector<float> >& data)
const
324 if(t_pModel->numVLines() > 0)
327 float distance = option.rect.width()/(t_pModel->
numVLines()+1);
329 float yStart = option.rect.topLeft().y();
331 float yEnd = option.rect.bottomRight().y();
333 for(qint8 i = 0; i < t_pModel->
numVLines(); ++i) {
334 float x = distance*(i+1);
335 path.moveTo(x,yStart);
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
const QMap< qint32, float > & getScaling() const
fiff_int_t getUnit(qint32 row) const
RealTimeMultiSampleArrayDelegate(QObject *parent=0)
The RealTimeMultiSampleArrayModel class implements the data access model for a real-time multi sample...
fiff_int_t getKind(qint32 row) const
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
Declaration of the RealTimeMultiSampleArrayDelegate Class.
Declaration of the RealTimeMultiSampleArrayModel Class.
#define FIFFV_COIL_BABY_MAG
qint32 getMaxSamples() const
fiff_int_t getCoil(qint32 row) const