41 #include "sensormodel.h"
67 : QAbstractTableModel(parent)
68 , m_iCurrentLayoutId(0)
76 : QAbstractTableModel(parent)
77 , m_iCurrentLayoutId(0)
79 if(!this->read(device))
80 qWarning() <<
"Not able to read sensor layout.";
86 void SensorModel::createSelection()
88 QList<qint32> listSelection = m_qMapSelection.keys(
true);
98 if(m_qListSensorLayouts.size() > 0 && m_iCurrentLayoutId < m_qListSensorLayouts.size())
99 return m_qListSensorLayouts[m_iCurrentLayoutId].numChannels();
119 if (index.isValid()) {
120 qint32 row = index.row();
123 if(index.column() == 0)
124 return QVariant(m_qListSensorLayouts[m_iCurrentLayoutId].shortChNames()[row]);
127 if(index.column() == 1)
128 return QVariant(m_qListSensorLayouts[m_iCurrentLayoutId].fullChNames()[row]);
131 if(index.column() == 2)
132 return QVariant(m_qListSensorLayouts[m_iCurrentLayoutId].loc()[row]);
138 if(index.column() == 3)
140 QString fullName = m_qListSensorLayouts[m_iCurrentLayoutId].fullChNames()[row];
141 qint32 chNum = m_qMapNameId[fullName];
142 return QVariant(m_qMapSelection[chNum]);
152 bool SensorModel::read(QIODevice* device)
154 QDomDocument domDocument;
160 if (!domDocument.setContent(device,
true, &errorStr, &errorLine, &errorColumn))
162 qCritical() << QString(
"Parse error at line %1, column %2:\n%3").arg(errorLine).arg(errorColumn).arg(errorStr);
166 QDomElement root = domDocument.documentElement();
167 if (root.tagName() !=
"MNEXSensorLayout")
169 qCritical() << QString(
"The file is not a MNE-X Sensor Layout file.");
173 QString t_sDevice = root.attribute(
"Device",
"No Device");
178 QDomElement childSensorsLayouts = root.firstChildElement(
"SensorLayouts");
179 QDomElement childSensors = childSensorsLayouts.firstChildElement(
"Sensors");
180 while (!childSensors.isNull())
183 childSensors = childSensors.nextSiblingElement(
"Sensors");
189 QDomElement childSensorGroups = root.firstChildElement(
"SensorGroups");
190 QDomElement childGroup = childSensorGroups.firstChildElement(
"Group");
191 while (!childGroup.isNull())
194 childGroup = childGroup.nextSiblingElement(
"Group");
208 QList<qint32> selection;
210 for(qint32 i = 0; i < m_qListSensorGroups[id].getChannelNames().size(); ++i)
211 selection.append(m_qMapNameId[m_qListSensorGroups[
id].getChannelNames()[i]]);
224 int oldLayout = m_iCurrentLayoutId;
226 if(
id >= 0 &&
id < m_qListSensorLayouts.size())
227 m_iCurrentLayoutId =
id;
231 if(oldLayout != m_iCurrentLayoutId)
240 m_qMapSelection.clear();
241 m_qMapNameId.clear();
242 for(qint32 i = 0; i < chInfoList.size(); ++i)
244 m_qMapSelection.insert(i,
true);
245 m_qMapNameId.insert(chInfoList.at(i).getChannelName(), i);
263 QMap<qint32, bool>::iterator it;
264 for (it = m_qMapSelection.begin(); it != m_qMapSelection.end(); ++it)
267 for(qint32 i = 0; i < selection.size(); ++i)
268 m_qMapSelection[selection[i]] =
true;
271 QModelIndex topLeft = this->index(0,3);
273 QModelIndex bottomRight = this->index(m_qMapSelection.size()-1,3);
275 QVector<int> roles; roles << Qt::DisplayRole;
277 emit dataChanged(topLeft, bottomRight, roles);
void applySensorGroup(int id)
QVariant data(int row, int column, int role=Qt::DisplayRole) const
void newSelection(QList< qint32 > selection)
qint32 getChNumber() const
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
Declaration of the SensorItem Class.
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const
void mapChannelInfo(const QList< XMEASLIB::RealTimeSampleArrayChInfo > &chInfoList)
void silentUpdateSelection(const QList< qint32 > &selection)
void setCurrentLayout(int id)
SensorModel(QObject *parent=0)
static SensorGroup parseSensorGroup(const QDomElement &sensorGroupElement)
The SensorItem class represents a channel item, plottet at the graphics scene.
static SensorLayout parseSensorLayout(const QDomElement &sensorLayoutElement)
void updateChannelState(SensorItem *item)