70 #include <QPaintEvent>
72 #include <QHeaderView>
74 #include <QMessageBox>
108 , m_pRTEModel(Q_NULLPTR)
109 , m_pButterflyPlot(Q_NULLPTR)
111 , m_bInitialized(false)
115 m_pActionSelectModality =
new QAction(QIcon(
":/images/evokedSettings.png"), tr(
"Shows the covariance modality selection widget (F12)"),
this);
116 m_pActionSelectModality->setShortcut(tr(
"F12"));
117 m_pActionSelectModality->setStatusTip(tr(
"Shows the covariance modality selection widget (F12)"));
118 connect(m_pActionSelectModality, &QAction::triggered,
this, &RealTimeEvokedWidget::showModalitySelectionWidget);
121 m_pActionSelectModality->setVisible(
false);
123 m_pActionSelectSensors =
new QAction(QIcon(
":/images/selectSensors.png"), tr(
"Shows the region selection widget (F12)"),
this);
124 m_pActionSelectSensors->setShortcut(tr(
"F12"));
125 m_pActionSelectSensors->setStatusTip(tr(
"Shows the region selection widget (F12)"));
126 m_pActionSelectSensors->setVisible(
false);
127 connect(m_pActionSelectSensors, &QAction::triggered,
this, &RealTimeEvokedWidget::showSensorSelectionWidget);
131 m_pRteLayout =
new QVBoxLayout(
this);
133 m_pLabelInit=
new QLabel;
134 m_pLabelInit->setText(
"Acquiring Data");
135 m_pLabelInit->setAlignment(Qt::AlignCenter);
136 QFont font;font.setBold(
true);font.setPointSize(20);
137 m_pLabelInit->setFont(font);
138 m_pRteLayout->addWidget(m_pLabelInit);
141 delete m_pButterflyPlot;
143 m_pButterflyPlot->hide();
145 m_pRteLayout->addWidget(m_pButterflyPlot);
148 this->setLayout(m_pRteLayout);
151 m_pChInfoModel = QSharedPointer<ChInfoModel>(
new ChInfoModel(
this));
152 m_pSelectionManagerWindow = QSharedPointer<SelectionManagerWindow>(
new SelectionManagerWindow(
this, m_pChInfoModel.data()));
165 if(!m_pRTE->getName().isEmpty())
167 QString t_sRTEWName = m_pRTE->getName();
171 for(qint32 i = 0; i < m_qListModalities.size(); ++i)
173 settings.setValue(QString(
"RTEW/%1/%2/active").arg(t_sRTEWName).arg(m_qListModalities[i].m_sName), m_qListModalities[i].m_bActive);
174 settings.setValue(QString(
"RTEW/%1/%2/norm").arg(t_sRTEWName).arg(m_qListModalities[i].m_sName), m_qListModalities[i].m_fNorm);
184 m_pButterflyPlot->setSettings(m_qListModalities);
203 if(m_pRTE->isInitialized())
219 m_qListChInfo = m_pRTE->chInfo();
220 m_fiffInfo = m_pRTE->info();
236 if(m_pRTE->isInitialized())
238 QString t_sRTEWName = m_pRTE->getName();
239 m_pRteLayout->removeWidget(m_pLabelInit);
240 m_pLabelInit->hide();
242 m_pButterflyPlot->show();
248 m_pRTEModel->
setRTE(m_pRTE);
250 m_pButterflyPlot->setModel(m_pRTEModel);
252 m_qListModalities.clear();
254 bool hasGrad =
false;
257 bool hasMISC =
false;
258 for(qint32 i = 0; i < m_pRTE->info().nchan; ++i)
260 if(m_pRTE->info().chs[i].kind == FIFFV_MEG_CH)
262 if(!hasMag && m_pRTE->info().chs[i].unit == FIFF_UNIT_T)
264 else if(!hasGrad && m_pRTE->info().chs[i].unit ==
FIFF_UNIT_T_M)
267 else if(!hasEEG && m_pRTE->info().chs[i].kind == FIFFV_EEG_CH)
269 else if(!hasEOG && m_pRTE->info().chs[i].kind == FIFFV_EOG_CH)
271 else if(!hasMISC && m_pRTE->info().chs[i].kind == FIFFV_MISC_CH)
279 sel = settings.value(QString(
"RTEW/%1/MAG/active").arg(t_sRTEWName),
true).toBool();
280 val = settings.value(QString(
"RTEW/%1/MAG/norm").arg(t_sRTEWName), 1e-11f).toFloat();
281 m_qListModalities.append(
Modality(
"MAG",sel,val));
285 sel = settings.value(QString(
"RTEW/%1/GRAD/active").arg(t_sRTEWName),
true).toBool();
286 val = settings.value(QString(
"RTEW/%1/GRAD/norm").arg(t_sRTEWName), 1e-10f).toFloat();
287 m_qListModalities.append(
Modality(
"GRAD",sel,val));
291 sel = settings.value(QString(
"RTEW/%1/EEG/active").arg(t_sRTEWName),
true).toBool();
292 val = settings.value(QString(
"RTEW/%1/EEG/norm").arg(t_sRTEWName), 1e-4f).toFloat();
293 m_qListModalities.append(
Modality(
"EEG",sel,val));
297 sel = settings.value(QString(
"RTEW/%1/EOG/active").arg(t_sRTEWName),
true).toBool();
298 val = settings.value(QString(
"RTEW/%1/EOG/norm").arg(t_sRTEWName), 1e-3f).toFloat();
299 m_qListModalities.append(
Modality(
"EOG",sel,val));
303 sel = settings.value(QString(
"RTEW/%1/MISC/active").arg(t_sRTEWName),
true).toBool();
304 val = settings.value(QString(
"RTEW/%1/MISC/norm").arg(t_sRTEWName), 1e-3f).toFloat();
305 m_qListModalities.append(
Modality(
"MISC",sel,val));
308 m_pButterflyPlot->setSettings(m_qListModalities);
310 m_pActionSelectModality->setVisible(
true);
311 m_pActionSelectSensors->setVisible(
true);
315 this, &RealTimeEvokedWidget::showSelectedChannelsOnly);
324 m_pChInfoModel->fiffInfoChanged(m_fiffInfo);
327 m_bInitialized =
true;
334 void RealTimeEvokedWidget::showModalitySelectionWidget()
336 if(!m_pEvokedModalityWidget)
338 m_pEvokedModalityWidget = QSharedPointer<EvokedModalityWidget>(
new EvokedModalityWidget(
this,
this));
340 m_pEvokedModalityWidget->setWindowTitle(
"Modality Selection");
344 m_pEvokedModalityWidget->show();
350 void RealTimeEvokedWidget::showSensorSelectionWidget()
352 if(!m_pSelectionManagerWindow) {
356 m_pSelectionManagerWindow->show();
362 void RealTimeEvokedWidget::applySelection()
372 void RealTimeEvokedWidget::resetSelection()
385 void RealTimeEvokedWidget::showSelectedChannelsOnly(QStringList selectedChannels)
387 QList<int> selectedChannelsIndexes;
389 for(
int i = 0; i<selectedChannels.size(); i++)
390 selectedChannelsIndexes<<m_pChInfoModel->getIndexFromOrigChName(selectedChannels.at(i));
392 m_pButterflyPlot->setSelectedChannels(selectedChannelsIndexes);
void setCurrentlyMappedFiffChannels(const QStringList &mappedLayoutChNames)
void showSelectedChannelsOnly(QStringList selectedChannels)
The SelectionManagerWindow class provides a channel selection window.
void loadedLayoutMap(const QMap< QString, QPointF > &layoutMap)
Contains the declaration of the RealTimeEvoked class.
void layoutChanged(const QMap< QString, QPointF > &layoutMap)
QSharedPointer< NewMeasurement > SPtr
The RealTimeEvokedModel class implements the data access model for a real-time multi sample array dat...
void setRTE(QSharedPointer< RealTimeEvoked > &pRTE)
void channelsMappedToLayout(const QStringList &mappedLayoutChNames)