MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
averagelayoutview.cpp
Go to the documentation of this file.
1//=============================================================================================================
36//=============================================================================================================
37// INCLUDES
38//=============================================================================================================
39
40#include "averagelayoutview.h"
41
47
48#include <fiff/fiff_info.h>
49
50//=============================================================================================================
51// QT INCLUDES
52//=============================================================================================================
53
54#include <QLabel>
55#include <QVBoxLayout>
56#include <QGraphicsView>
57#include <QSvgGenerator>
58#include <QDebug>
59#include <QGraphicsItem>
60#include <QSettings>
61#if !defined(NO_QOPENGLWIDGET)
62 #include <QOpenGLWidget>
63#endif
64
65//=============================================================================================================
66// USED NAMESPACES
67//=============================================================================================================
68
69using namespace DISPLIB;
70using namespace FIFFLIB;
71
72//=============================================================================================================
73// DEFINE MEMBER METHODS
74//=============================================================================================================
75
76AverageLayoutView::AverageLayoutView(const QString& sSettingsPath,
77 QWidget *parent,
78 Qt::WindowFlags f)
79: AbstractView(parent, f)
80, m_qMapAverageColor(QSharedPointer<QMap<QString, QColor> >::create())
81, m_qMapAverageActivation(QSharedPointer<QMap<QString, bool> >::create())
82{
83 m_sSettingsPath = sSettingsPath;
84 this->setWindowTitle("Average Layout");
85
86 m_pAverageLayoutView = new QGraphicsView();
87
88#if !defined(NO_QOPENGLWIDGET)
89 m_pAverageLayoutView->setViewport(new QOpenGLWidget);
90#endif
91
92 m_pAverageLayoutView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
93 m_pAverageLayoutView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
94
96 m_pAverageScene->setBackgroundBrush(QBrush(Qt::white));
97
98 m_pAverageLayoutView->setScene(m_pAverageScene.data());
99
100 //set layouts
101 QVBoxLayout *neLayout = new QVBoxLayout(this);
102 neLayout->setContentsMargins(0,0,0,0);
103 neLayout->addWidget(m_pAverageLayoutView);
104 this->setLayout(neLayout);
105 loadSettings();
106}
107
108//=============================================================================================================
109
114
115//=============================================================================================================
116
118{
119#if !defined(NO_QOPENGLWIDGET)
121 m_pAverageLayoutView->setViewport(new QOpenGLWidget);
122 }
123#endif
124}
125
126//=============================================================================================================
127
128void AverageLayoutView::setChannelInfoModel(QSharedPointer<ChannelInfoModel> &pChannelInfoModel)
129{
130 m_pChannelInfoModel = pChannelInfoModel;
131}
132
133//=============================================================================================================
134
135void AverageLayoutView::setEvokedSetModel(QSharedPointer<EvokedSetModel> pEvokedSetModel)
136{
137 if (pEvokedSetModel){
138 connect(pEvokedSetModel.data(), &EvokedSetModel::dataChanged,
139 this, &AverageLayoutView::updateData, Qt::UniqueConnection);
140 }
141
142 m_pEvokedSetModel = pEvokedSetModel;
143}
144
145//=============================================================================================================
146
147void AverageLayoutView::setBackgroundColor(const QColor& backgroundColor)
148{
149 if(!m_pAverageScene) {
150 qDebug() << "AverageLayoutView::setBackgroundColor - m_pAverageScene is NULL. Returning. ";
151 return;
152 }
153
154 QBrush backgroundBrush = m_pAverageScene->backgroundBrush();
155 backgroundBrush.setColor(backgroundColor);
156 m_pAverageScene->setBackgroundBrush(backgroundBrush);
157}
158
159//=============================================================================================================
160
162{
163 if(!m_pAverageScene) {
164 qDebug() << "AverageLayoutView::getBackgroundColor - m_pAverageScene is NULL. Returning. ";
165 return QColor();
166 }
167
168 return m_pAverageScene->backgroundBrush().color();
169}
170
171//=============================================================================================================
172
173void AverageLayoutView::takeScreenshot(const QString& fileName)
174{
175 if(!m_pAverageScene) {
176 qDebug() << "AverageLayoutView::takeScreenshot - m_pAverageScene is NULL. Returning. ";
177 return;
178 }
179
180 if(fileName.contains(".svg", Qt::CaseInsensitive))
181 {
182 // Generate screenshot
183 QSvgGenerator svgGen;
184 svgGen.setFileName(fileName);
185 QRectF rect = m_pAverageScene->itemsBoundingRect();
186 svgGen.setSize(QSize(rect.width(), rect.height()));
187
188 QPainter painter(&svgGen);
189 m_pAverageScene->render(&painter);
190 }
191
192 if(fileName.contains(".png", Qt::CaseInsensitive))
193 {
194 QRect rect = m_pAverageLayoutView->frameRect();
195 QPixmap pixMap = QWidget::grab(rect);
196 pixMap.save(fileName);
197 }
198}
199
200//=============================================================================================================
201
202void AverageLayoutView::setScaleMap(const QMap<qint32,float> &scaleMap)
203{
204 if(!m_pAverageScene) {
205 qDebug() << "AverageLayoutView::setScaleMap - m_pAverageScene is NULL. Returning. ";
206 return;
207 }
208
209 m_scaleMap = scaleMap;
210
211 m_pAverageScene->setScaleMap(scaleMap);
212
213 updateData();
214}
215
216//=============================================================================================================
217
218QSharedPointer<QMap<QString, QColor> > AverageLayoutView::getAverageColor() const
219{
220 return m_qMapAverageColor;
221}
222
223//=============================================================================================================
224
225QSharedPointer<QMap<QString, bool> > AverageLayoutView::getAverageActivation() const
226{
228}
229
230//=============================================================================================================
231
232void AverageLayoutView::setAverageColor(const QSharedPointer<QMap<QString, QColor> > qMapAverageColor)
233{
234 if(!m_pAverageScene) {
235 qDebug() << "AverageLayoutView::setAverageColor - m_pAverageScene is NULL. Returning. ";
236 return;
237 }
238
239 m_qMapAverageColor = qMapAverageColor;
240 m_pAverageScene->setColorPerAverage(m_qMapAverageColor);
241}
242
243//=============================================================================================================
244
246{
247 for (QString mapKey : m_qMapAverageColor->keys()){
248 m_qMapAverageColor->insert(mapKey, avgColor);
249 }
250
251 m_pAverageScene->setColorPerAverage(m_qMapAverageColor);
252 m_pAverageScene->setSignalItemColor(avgColor);
253}
254
255//=============================================================================================================
256
257void AverageLayoutView::setAverageActivation(const QSharedPointer<QMap<QString, bool> > qMapAverageActivation)
258{
259 if(!m_pAverageScene) {
260 qDebug() << "AverageLayoutView::setAverageActivation - m_pAverageScene is NULL. Returning. ";
261 return;
262 }
263
264 m_qMapAverageActivation = qMapAverageActivation;
265 m_pAverageScene->setActivationPerAverage(qMapAverageActivation);
266}
267
268//=============================================================================================================
269
270void AverageLayoutView::channelSelectionManagerChanged(const QList<QGraphicsItem*> &selectedChannelItems)
271{
272 if(!m_pAverageScene) {
273 qDebug() << "AverageLayoutView::channelSelectionManagerChanged - m_pAverageScene is NULL. Returning. ";
274 return;
275 }
276 //Repaint the average items in the average scene based on the input parameter selectedChannelItems and update them with current data
277 m_pAverageScene->repaintItems(selectedChannelItems);
281 updateData();
282}
283
284//=============================================================================================================
285
287{
288 if(!m_pAverageScene) {
289 qDebug() << "AverageLayoutView::channelSelectionManagerChanged - m_pAverageScene is NULL. Returning. ";
290 return;
291 }
292
293 SelectionItem* pSelectionItem = data.value<DISPLIB::SelectionItem*>();
294
295 //Repaint the average items in the average scene based on the input parameter selectedChannelItems and update them with current data
296 m_pAverageScene->repaintSelectionItems(*pSelectionItem);
300 updateData();
301}
302
303//=============================================================================================================
304
306{
307 if(m_pFiffInfo) {
308 QList<QGraphicsItem *> currentAverageSceneItems = m_pAverageScene->items();
309
310 //Set new data for all averageSceneItems
311 for(int i = 0; i < currentAverageSceneItems.size(); i++) {
312 AverageSceneItem* averageSceneItemTemp = static_cast<AverageSceneItem*>(currentAverageSceneItems.at(i));
313
314 averageSceneItemTemp->m_lAverageData.clear();
315
317 //Get only the necessary data from the average model (use column 2)
318 QList<QPair<QString, DISPLIB::RowVectorPair> > averageData = m_pEvokedSetModel->data(0, 2, EvokedSetModelRoles::GetAverageData).value<QList<QPair<QString, DISPLIB::RowVectorPair> > >();
319
320 //Get the averageScenItem specific data row
321 int channelNumber = averageSceneItemTemp->m_iChannelNumber;
322
323 if(channelNumber != -1) {
324 averageSceneItemTemp->m_iChannelKind = m_pFiffInfo->chs.at(channelNumber).kind;
325 averageSceneItemTemp->m_iChannelUnit = m_pFiffInfo->chs.at(channelNumber).unit;
326 averageSceneItemTemp->m_firstLastSample.first = (-1)*m_pEvokedSetModel->getNumPreStimSamples();
327
328 if(!averageData.isEmpty()) {
329 averageSceneItemTemp->m_firstLastSample.second = averageData.first().second.second - m_pEvokedSetModel->getNumPreStimSamples();
330 }
331
332 averageSceneItemTemp->m_iTotalNumberChannels = m_pEvokedSetModel->rowCount();
333 averageSceneItemTemp->m_lAverageData = averageData;
334 averageSceneItemTemp->m_bIsBad = m_pEvokedSetModel->getIsChannelBad(channelNumber);
335 }
336 }
337 }
338
339 m_pAverageScene->updateScene();
340 return;
341 }
342
344 qDebug() << "AverageLayoutView::updateData - m_pAverageScene, m_pEvokedSetModel or m_pChannelInfoModel are NULL. Returning. ";
345 return;
346 }
347 //Get current items from the average scene
348 QList<QGraphicsItem *> currentAverageSceneItems = m_pAverageScene->items();
349
350 //Set new data for all averageSceneItems
351 for(int i = 0; i < currentAverageSceneItems.size(); i++) {
352 AverageSceneItem* averageSceneItemTemp = static_cast<AverageSceneItem*>(currentAverageSceneItems.at(i));
353
354 averageSceneItemTemp->m_lAverageData.clear();
355
356 //Get only the necessary data from the average model (use column 2)
357 QList<QPair<QString, DISPLIB::RowVectorPair> > averageData = m_pEvokedSetModel->data(0, 2, EvokedSetModelRoles::GetAverageData).value<QList<QPair<QString, DISPLIB::RowVectorPair> > >();
358
359 //Get the averageScenItem specific data row
360 int channelNumber = m_pChannelInfoModel->getIndexFromMappedChName(averageSceneItemTemp->m_sChannelName);
361
362 if(channelNumber != -1) {
363 //qDebug() << "Change data for" << channelNumber << "" << averageSceneItemTemp->m_sChannelName;
364
365 averageSceneItemTemp->m_iChannelKind = m_pChannelInfoModel->data(m_pChannelInfoModel->index(channelNumber, 4), ChannelInfoModelRoles::GetChKind).toInt();
366 averageSceneItemTemp->m_iChannelUnit = m_pChannelInfoModel->data(m_pChannelInfoModel->index(channelNumber, 6), ChannelInfoModelRoles::GetChUnit).toInt();
367 averageSceneItemTemp->m_firstLastSample.first = (-1)*m_pEvokedSetModel->getNumPreStimSamples();
368
369 if(!averageData.isEmpty()) {
370 averageSceneItemTemp->m_firstLastSample.second = averageData.first().second.second - m_pEvokedSetModel->getNumPreStimSamples();
371 }
372
373 averageSceneItemTemp->m_iChannelNumber = channelNumber;
374 averageSceneItemTemp->m_iTotalNumberChannels = m_pEvokedSetModel->rowCount();
375 averageSceneItemTemp->m_lAverageData = averageData;
376 averageSceneItemTemp->m_bIsBad = m_pEvokedSetModel->getIsChannelBad(channelNumber);
377 }
378 }
379
380 m_pAverageScene->updateScene();
381}
382
383//=============================================================================================================
384
386{
387 if(m_sSettingsPath.isEmpty()) {
388 return;
389 }
390
391 QSettings settings("MNECPP");
392}
393
394//=============================================================================================================
395
397{
398 if(m_sSettingsPath.isEmpty()) {
399 return;
400 }
401
402 QSettings settings("MNECPP");
403}
404
405//=============================================================================================================
406
408{
409 switch(mode) {
410 case GuiMode::Clinical:
411 break;
412 default: // default is research mode
413 break;
414 }
415}
416
417//=============================================================================================================
418
420{
421 switch(mode) {
422 case ProcessingMode::Offline:
423 break;
424 default: // default is realtime mode
425 break;
426 }
427}
428
429//=============================================================================================================
430
431void AverageLayoutView::setFiffInfo(const QSharedPointer<FIFFLIB::FiffInfo> pFiffInfo)
432{
433 m_pFiffInfo = pFiffInfo;
434}
435
436//=============================================================================================================
437
438QSharedPointer<EvokedSetModel> AverageLayoutView::getEvokedSetModel()
439{
440 return m_pEvokedSetModel;
441}
442
443//=============================================================================================================
444
446{
447 setEvokedSetModel(Q_NULLPTR);
448 updateData();
449}
Declaration of the AverageLayoutView Class.
Contains the declaration of the AverageSceneItem class.
The declaration for ChannelInfoModel..
Contains the declaration of the AverageScene class.
Declaration of the EvokedSetModel Class.
Contains the declaration of the SelectionSceneItem class.
FiffInfo class declaration.
The AbstractView class provides the base calss for all Disp viewers.
void setBackgroundColor(const QColor &backgroundColor)
QMap< qint32, float > m_scaleMap
void setEvokedSetModel(QSharedPointer< EvokedSetModel > pEvokedSetModel)
void channelSelectionChanged(const QVariant &data)
void setChannelInfoModel(QSharedPointer< ChannelInfoModel > &pChannelInfoModel)
QSharedPointer< QMap< QString, bool > > getAverageActivation() const
QSharedPointer< FIFFLIB::FiffInfo > m_pFiffInfo
QSharedPointer< DISPLIB::EvokedSetModel > m_pEvokedSetModel
void setAverageColor(const QSharedPointer< QMap< QString, QColor > > qMapAverageColor)
QPointer< QGraphicsView > m_pAverageLayoutView
QSharedPointer< AverageScene > m_pAverageScene
QSharedPointer< QMap< QString, QColor > > m_qMapAverageColor
QSharedPointer< QMap< QString, QColor > > getAverageColor() const
QSharedPointer< QMap< QString, bool > > m_qMapAverageActivation
void setScaleMap(const QMap< qint32, float > &scaleMap)
void takeScreenshot(const QString &fileName)
void setAverageActivation(const QSharedPointer< QMap< QString, bool > > qMapAverageActivation)
QSharedPointer< DISPLIB::ChannelInfoModel > m_pChannelInfoModel
void setFiffInfo(const QSharedPointer< FIFFLIB::FiffInfo > pFiffInfo)
AverageLayoutView(const QString &sSettingsPath="", QWidget *parent=0, Qt::WindowFlags f=Qt::Widget)
void updateProcessingMode(ProcessingMode mode)
void channelSelectionManagerChanged(const QList< QGraphicsItem * > &selectedChannelItems)
void setSingleAverageColor(const QColor &avgColor)
QSharedPointer< EvokedSetModel > getEvokedSetModel()
The AverageScene class provides a reimplemented QGraphicsScene for 2D layout plotting.
QSharedPointer< AverageScene > SPtr
The AverageSceneItem class provides a new data structure for visualizing averages in a 2D layout.
QList< QPair< QString, RowVectorPair > > m_lAverageData
QPair< int, int > m_firstLastSample
The SelectionSceneItem class provides a new data structure for visualizing channels in a 2D layout.