59 EventModel::EventModel(QObject *parent)
60 : QAbstractTableModel(parent)
62 , m_bFileloaded(false)
63 , m_sFilterEventType(
"All")
66 m_eventTypeColor[1] = QColor(Qt::black);
67 m_eventTypeColor[2] = QColor(Qt::magenta);
68 m_eventTypeColor[3] = QColor(Qt::green);
69 m_eventTypeColor[4] = QColor(Qt::red);
70 m_eventTypeColor[5] = QColor(Qt::cyan);
71 m_eventTypeColor[32] = QColor(Qt::yellow);
72 m_eventTypeColor[998] = QColor(Qt::darkBlue);
73 m_eventTypeColor[999] = QColor(Qt::darkCyan);
81 EventModel::EventModel(QFile &qFile, QObject *parent)
82 : QAbstractTableModel(parent)
84 , m_bFileloaded(false)
85 , m_sFilterEventType(
"All")
88 m_eventTypeColor[1] = QColor(Qt::black);
89 m_eventTypeColor[2] = QColor(Qt::magenta);
90 m_eventTypeColor[3] = QColor(Qt::green);
91 m_eventTypeColor[4] = QColor(Qt::red);
92 m_eventTypeColor[5] = QColor(Qt::cyan);
93 m_eventTypeColor[32] = QColor(Qt::yellow);
94 m_eventTypeColor[998] = QColor(Qt::darkBlue);
95 m_eventTypeColor[999] = QColor(Qt::darkCyan);
103 int EventModel::rowCount(
const QModelIndex & )
const
106 if(!m_dataSamples_Filtered.size()==0)
107 return m_dataSamples_Filtered.size();
115 int EventModel::columnCount(
const QModelIndex & )
const
123 QVariant EventModel::headerData(
int section, Qt::Orientation orientation,
int role)
const
125 if(role != Qt::DisplayRole && role != Qt::TextAlignmentRole)
128 if(role==Qt::TextAlignmentRole)
129 return Qt::AlignHCenter + Qt::AlignVCenter;
131 if(orientation == Qt::Horizontal) {
134 return QVariant(
"Sample");
136 return QVariant(
"Time (s)");
138 return QVariant(
"Type");
141 else if(orientation == Qt::Vertical) {
142 return QString(
"Event %1").arg(section);
151 QVariant EventModel::data(
const QModelIndex &index,
int role)
const
153 if(role == Qt::TextAlignmentRole)
154 return QVariant(Qt::AlignCenter | Qt::AlignVCenter);
156 if(role != Qt::DisplayRole && role != Qt::BackgroundRole)
159 if(index.row()>=m_dataSamples_Filtered.size())
162 if (index.isValid()) {
164 if(index.column()==0) {
166 case Qt::DisplayRole:
167 return QVariant(m_dataSamples_Filtered.at(index.row())-m_iFirstSample);
169 case Qt::BackgroundRole:
171 if(m_dataIsUserEvent_Filtered.at(index.row()) == 1) {
173 brush.setStyle(Qt::SolidPattern);
174 QColor colorTemp(Qt::red);
175 colorTemp.setAlpha(15);
176 brush.setColor(colorTemp);
177 return QVariant(brush);
183 if(index.column()==1){
185 case Qt::DisplayRole: {
186 int time = ((m_dataSamples_Filtered.at(index.row()) - m_iFirstSample) / m_fiffInfo.sfreq) * 100;
188 return QVariant((
double)time / 100);
191 case Qt::BackgroundRole:
193 if(m_dataIsUserEvent_Filtered.at(index.row()) == 1) {
195 brush.setStyle(Qt::SolidPattern);
196 QColor colorTemp(Qt::red);
197 colorTemp.setAlpha(15);
198 brush.setColor(colorTemp);
199 return QVariant(brush);
205 if(index.column()==2) {
207 case Qt::DisplayRole:
208 return QVariant(m_dataTypes_Filtered.at(index.row()));
210 case Qt::BackgroundRole: {
212 brush.setStyle(Qt::SolidPattern);
213 brush.setColor(m_eventTypeColor.value(m_dataTypes_Filtered.at(index.row()), Qt::black));
215 QColor colorTemp = brush.color();
216 colorTemp.setAlpha(EVENT_MARKER_OPACITY);
217 brush.setColor(colorTemp);
218 return QVariant(brush);
231 bool EventModel::insertRows(
int position,
int span,
const QModelIndex & parent)
235 if(m_dataSamples.isEmpty()) {
236 m_dataSamples.insert(0, m_iCurrentMarkerPos);
237 m_dataTypes.insert(0, 1);
238 m_dataIsUserEvent.insert(0, 1);
241 for (
int i = 0; i < span; ++i) {
242 for(
int t = 0; t<m_dataSamples.size(); t++) {
243 if(m_dataSamples[t] >= m_iCurrentMarkerPos) {
244 m_dataSamples.insert(t, m_iCurrentMarkerPos);
246 if(m_sFilterEventType ==
"All")
247 m_dataTypes.insert(t, 1);
249 m_dataTypes.insert(t, m_sFilterEventType.toInt());
251 m_dataIsUserEvent.insert(t, 1);
255 if(t == m_dataSamples.size()-1) {
256 m_dataSamples.append(m_iCurrentMarkerPos);
258 if(m_sFilterEventType ==
"All")
259 m_dataTypes.append(1);
261 m_dataTypes.append(m_sFilterEventType.toInt());
263 m_dataIsUserEvent.append(1);
269 beginInsertRows(QModelIndex(), position, position+span-1);
274 setEventFilterType(m_sFilterEventType);
282 bool EventModel::removeRows(
int position,
int span,
const QModelIndex & parent)
286 for (
int i = 0; i < span; ++i) {
288 if(m_dataIsUserEvent[position] == 1) {
289 m_dataSamples.removeAt(position);
290 m_dataTypes.removeAt(position);
291 m_dataIsUserEvent.removeAt(position);
295 beginRemoveRows(QModelIndex(), position, position+span-1);
300 setEventFilterType(m_sFilterEventType);
308 Qt::ItemFlags EventModel::flags(
const QModelIndex & index)
const
311 if(m_dataIsUserEvent_Filtered[index.row()] == 1 && m_sFilterEventType ==
"All")
312 return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
314 return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
320 bool EventModel::setData(
const QModelIndex & index,
const QVariant & value,
int role)
322 if(index.row() >= m_dataSamples.size() || index.column() >= columnCount())
325 if(role == Qt::EditRole) {
326 int column = index.column();
329 m_dataSamples[index.row()] = value.toInt() + m_iFirstSample;
333 m_dataSamples[index.row()] = value.toDouble() * m_fiffInfo.sfreq + m_iFirstSample;
337 QString
string = value.toString();
338 m_dataTypes[index.row()] =
string.toInt();
344 setEventFilterType(m_sFilterEventType);
352 bool EventModel::loadEventData(QFile& qFile)
361 qDebug() <<
"Error while reading events.";
367 qDebug() << QString(
"Events read from %1").arg(qFile.fileName());
370 for(
int i = 0; i < events.rows(); i++) {
371 m_dataSamples.append(events(i,0));
372 m_dataTypes.append(events(i,2));
373 m_dataIsUserEvent.append(0);
377 m_dataSamples_Filtered = m_dataSamples;
378 m_dataTypes_Filtered = m_dataTypes;
379 m_dataIsUserEvent_Filtered = m_dataIsUserEvent;
382 m_eventTypeList.clear();
383 for(
int i = 0; i<m_dataTypes.size(); i++)
384 if(!m_eventTypeList.contains(QString().number(m_dataTypes[i])))
385 m_eventTypeList<<QString().number(m_dataTypes[i]);
387 emit updateEventTypes(
"All");
391 m_bFileloaded =
true;
399 bool EventModel::saveEventData(QFile& qFile)
415 void EventModel::setFiffInfo(FiffInfo& fiffInfo)
417 m_fiffInfo = fiffInfo;
423 void EventModel::setFirstLastSample(
int firstSample,
int lastSample)
425 m_iFirstSample = firstSample;
426 m_iLastSample = lastSample;
432 void EventModel::setCurrentMarkerPos(
int markerPos)
435 m_iCurrentMarkerPos = markerPos + m_iFirstSample;
441 FiffInfo EventModel::getFiffInfo()
const
449 QPair<int, int> EventModel::getFirstLastSample()
const
451 QPair<int, int> pair(m_iFirstSample, m_iLastSample);
458 void EventModel::setEventFilterType(
const QString eventType)
460 m_sFilterEventType = eventType;
463 m_dataSamples_Filtered.clear();
464 m_dataTypes_Filtered.clear();
465 m_dataIsUserEvent_Filtered.clear();
468 if(eventType ==
"All") {
469 m_dataSamples_Filtered = m_dataSamples;
470 m_dataTypes_Filtered = m_dataTypes;
471 m_dataIsUserEvent_Filtered = m_dataIsUserEvent;
474 for(
int i = 0; i<m_dataSamples.size(); i++) {
475 if(m_dataTypes[i] == eventType.toInt()) {
476 m_dataSamples_Filtered.append(m_dataSamples[i]);
477 m_dataTypes_Filtered.append(m_dataTypes[i]);
478 m_dataIsUserEvent_Filtered.append(m_dataIsUserEvent[i]);
483 emit dataChanged(createIndex(0,0), createIndex(m_dataSamples_Filtered.size(), 0));
484 emit headerDataChanged(Qt::Vertical, 0, m_dataSamples_Filtered.size());
490 QStringList EventModel::getEventTypeList()
const
492 return m_eventTypeList;
498 const QMap<int, QColor> & EventModel::getEventTypeColors()
500 return m_eventTypeColor;
506 void EventModel::clearModel()
510 m_dataSamples.clear();
512 m_dataIsUserEvent.clear();
514 m_dataSamples_Filtered.clear();
515 m_dataTypes_Filtered.clear();
516 m_dataIsUserEvent_Filtered.clear();
518 m_bFileloaded =
false;
522 qDebug(
"EventModel cleared.");
528 void EventModel::addNewEventType(
const QString &eventType,
const QColor &typeColor)
531 m_eventTypeColor[eventType.toInt()] = typeColor;
534 if(!m_eventTypeList.contains(eventType))
535 m_eventTypeList<<eventType;
537 emit updateEventTypes(eventType);
This class represents the event model of the model/view framework of mne_browse_raw_qt application...
static bool read_events(QIODevice &p_IODevice, MatrixXi &eventlist)