MNE-CPP  beta 1.0
frequencyspectrumwidget.cpp
Go to the documentation of this file.
1 //=============================================================================================================
37 //ToDo Paint to render area
38 
39 //*************************************************************************************************************
40 //=============================================================================================================
41 // INCLUDES
42 //=============================================================================================================
43 
45 //#include "annotationwindow.h"
46 
48 
49 
50 //*************************************************************************************************************
51 //=============================================================================================================
52 // Eigen INCLUDES
53 //=============================================================================================================
54 
55 #include <Eigen/Core>
56 
57 
58 //*************************************************************************************************************
59 //=============================================================================================================
60 // STL INCLUDES
61 //=============================================================================================================
62 
63 #include <math.h>
64 
65 
66 //*************************************************************************************************************
67 //=============================================================================================================
68 // QT INCLUDES
69 //=============================================================================================================
70 
71 #include <QVBoxLayout>
72 #include <QLabel>
73 #include <QHeaderView>
74 #include <QSettings>
75 #include <QTableView>
76 
77 //*************************************************************************************************************
78 //=============================================================================================================
79 // USED NAMESPACES
80 //=============================================================================================================
81 
82 using namespace XDISPLIB;
83 using namespace XMEASLIB;
84 
85 
86 //=============================================================================================================
90 enum Tool
91 {
92  Freeze = 0,
94 };
95 
96 
97 //*************************************************************************************************************
98 //=============================================================================================================
99 // DEFINE MEMBER METHODS
100 //=============================================================================================================
101 
102 FrequencySpectrumWidget::FrequencySpectrumWidget(QSharedPointer<FrequencySpectrum> pFS, QSharedPointer<QTime> &pTime, QWidget* parent)
103 : NewMeasurementWidget(parent)
104 , m_pFSModel(Q_NULLPTR)
105 , m_pFSDelegate(Q_NULLPTR)
106 , m_pTableView(Q_NULLPTR)
107 , m_pFS(pFS)
108 , m_fLowerFrqBound(0)
109 , m_fUpperFrqBound(300)
110 , m_bInitialized(false)
111 {
112  Q_UNUSED(pTime)
113 
114 
115  m_pActionFrequencySettings = new QAction(QIcon(":/images/frqResolution.png"), tr("Shows the frequency spectrum settings widget (F12)"),this);
116  m_pActionFrequencySettings->setShortcut(tr("F12"));
117  m_pActionFrequencySettings->setStatusTip(tr("Shows the frequency spectrum settings widget (F12)"));
118  connect(m_pActionFrequencySettings, &QAction::triggered, this, &FrequencySpectrumWidget::showFrequencySpectrumSettingsWidget);
119  addDisplayAction(m_pActionFrequencySettings);
120 
121  m_pActionFrequencySettings->setVisible(false);
122 
123  if(m_pTableView)
124  delete m_pTableView;
125  m_pTableView = new QTableView;
126 
127  m_pTableView->setSelectionMode( QAbstractItemView::ExtendedSelection );
128  m_pTableView->setMouseTracking( true );
129  m_pTableView->viewport()->installEventFilter( this );
130 
131  //set vertical layout
132  QVBoxLayout *neLayout = new QVBoxLayout(this);
133 
134 // QLabel *t_pLabelFrequencySpectrum = new QLabel;
135 // t_pLabelFrequencySpectrum->setText("Noise Estimation Widget");
136 // neLayout->addWidget(t_pLabelFrequencySpectrum);
137 
138  neLayout->addWidget(m_pTableView);
139 
140  //set layouts
141  this->setLayout(neLayout);
142 
143  getData();
144 }
145 
146 
147 //*************************************************************************************************************
148 
150 {
151  //
152  // Store Settings
153  //
154  if(!m_pFS->getName().isEmpty())
155  {
156  QString t_sFSName = m_pFS->getName();
157 
158  QSettings settings;
159 
160  settings.setValue(QString("FSW/%1/lowerFrqBound").arg(t_sFSName), m_fLowerFrqBound);
161  settings.setValue(QString("FSW/%1/upperFrqBound").arg(t_sFSName), m_fUpperFrqBound);
162  }
163 }
164 
165 
166 //*************************************************************************************************************
167 
169 {
170  getData();
171 }
172 
173 
174 //*************************************************************************************************************
175 
177 {
178 // qDebug() << "get Data" << m_pNE->getValue()(0,1) << "Cols" << m_pNE->getValue().cols();
179 
180  if(!m_bInitialized)
181  {
182  if(m_pFS->isInit())
183  {
184  init();
185 
186  m_pFSModel->addData(m_pFS->getValue());
187 
189  }
190  }
191  else
192  m_pFSModel->addData(m_pFS->getValue());
193 }
194 
195 
196 //*************************************************************************************************************
197 
199 {
200  if(m_pFS->getFiffInfo())
201  {
202  QSettings settings;
203  if(!m_pFS->getName().isEmpty())
204  {
205  QString t_sFSName = m_pFS->getName();
206  m_fLowerFrqBound = settings.value(QString("FSW/%1/lowerFrqBound").arg(t_sFSName), 0).toFloat();
207  m_fUpperFrqBound = settings.value(QString("FSW/%1/upperFrqBound").arg(t_sFSName), 300).toFloat();
208  }
209 
210  m_pActionFrequencySettings->setVisible(true);
211 
212  if(m_pFSModel)
213  delete m_pFSModel;
214  m_pFSModel = new FrequencySpectrumModel(this);
215 
216  m_pFSModel->setInfo(m_pFS->getFiffInfo());
217  m_pFSModel->setScaleType(m_pFS->getScaleType()); /*Added by Limin; 10/19/2014 for passing the scale type to the model*/
218 
219  if(m_pFSDelegate)
220  delete m_pFSDelegate;
221 // m_pFSDelegate = new FrequencySpectrumDelegate(this);
222  m_pFSDelegate = new FrequencySpectrumDelegate(m_pTableView,this);
223  m_pFSDelegate->setScaleType(m_pFS->getScaleType()); /*Added by Limin; 10/19/2014 for passing the scale type to the delegate*/
224 
225 
226  connect(m_pTableView, &QTableView::doubleClicked, m_pFSModel, &FrequencySpectrumModel::toggleFreeze);
227 
228  // add a connection for sending mouse location to the delegate; Dr. -Ing. Limin Sun 8/21/14
231 
232 
233  m_pTableView->setModel(m_pFSModel);
234  m_pTableView->setItemDelegate(m_pFSDelegate);
235 
236  //set some size settings for m_pTableView
237  m_pTableView->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
238 
239  m_pTableView->setShowGrid(false);
240 
241  m_pTableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); //Stretch 2 column to maximal width
242  m_pTableView->horizontalHeader()->hide();
243  m_pTableView->verticalHeader()->setDefaultSectionSize(140);//m_fZoomFactor*m_fDefaultSectionSize);//Row Height
244 
245  m_pTableView->setAutoScroll(false);
246  m_pTableView->setColumnHidden(0,true); //because content is plotted jointly with column=1
247 
248  m_pTableView->resizeColumnsToContents();
249 
250  m_pTableView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
251 
252  //set context menu
253  m_pTableView->setContextMenuPolicy(Qt::CustomContextMenu);
254  //connect(m_pTableView,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(channelContextMenu(QPoint)));
255 
256  m_bInitialized = true;
257 
258 
259 
260  }
261 }
262 
263 
264 //*************************************************************************************************************
265 
267 {
268  if(!m_pFrequencySpectrumSettingsWidget)
269  {
270  m_pFrequencySpectrumSettingsWidget = QSharedPointer<FrequencySpectrumSettingsWidget>(new FrequencySpectrumSettingsWidget(this));
271 
272  m_pFrequencySpectrumSettingsWidget->setWindowTitle("Frequency Spectrum Settings");
273 
274  connect(m_pFrequencySpectrumSettingsWidget.data(), &FrequencySpectrumSettingsWidget::settingsChanged, this, &FrequencySpectrumWidget::broadcastSettings);
275  }
276 
277  if(m_pFS->isInit() && m_pFS->getFiffInfo())
278  {
279  m_fUpperFrqBound = m_fLowerFrqBound < m_fUpperFrqBound ? m_fUpperFrqBound : m_fLowerFrqBound;
280  m_pFrequencySpectrumSettingsWidget->m_pSliderLowerBound->setMinimum(0);
281  m_pFrequencySpectrumSettingsWidget->m_pSliderLowerBound->setMaximum((qint32)(m_pFS->getFiffInfo()->sfreq/2)*1000);
282  m_pFrequencySpectrumSettingsWidget->m_pSliderLowerBound->setValue((qint32)(m_fLowerFrqBound*1000));
283 
284  m_pFrequencySpectrumSettingsWidget->m_pSliderUpperBound->setMinimum(0);
285  m_pFrequencySpectrumSettingsWidget->m_pSliderUpperBound->setMaximum((qint32)(m_pFS->getFiffInfo()->sfreq/2)*1000);
286  m_pFrequencySpectrumSettingsWidget->m_pSliderUpperBound->setValue((qint32)(m_fUpperFrqBound*1000));
287  }
288 
289 }
290 
291 
292 //*************************************************************************************************************
293 
294 void FrequencySpectrumWidget::broadcastSettings()
295 {
296  if(m_pFrequencySpectrumSettingsWidget)
297  {
298  m_fLowerFrqBound = m_pFrequencySpectrumSettingsWidget->m_pSliderLowerBound->value()/1000.0f;
299  m_fUpperFrqBound = m_pFrequencySpectrumSettingsWidget->m_pSliderUpperBound->value()/1000.0f;
300  m_pFSModel->setBoundaries(m_fLowerFrqBound,m_fUpperFrqBound);
301  }
302 }
303 
304 
305 //*************************************************************************************************************
306 
307 void FrequencySpectrumWidget::showFrequencySpectrumSettingsWidget()
308 {
310  m_pFrequencySpectrumSettingsWidget->show();
311 }
312 
313 
314 //*************************************************************************************************************
315 
316 bool FrequencySpectrumWidget::eventFilter(QObject * watched, QEvent * event)
317 {
318  if(event->type() == QEvent::MouseMove){
319  QMouseEvent *mouseEvent = static_cast <QMouseEvent*>( event );
320  //qDebug()<<"MouseMove event!@"<<mouseEvent->x()<<":"<<mouseEvent->y();
321 
322  int currentRow = m_pTableView->rowAt(mouseEvent->y());
323  m_pTableView->selectRow(currentRow);
324 
325  QModelIndex item = m_pTableView->currentIndex();
326 
327  emit sendMouseLoc(item.row(), mouseEvent->x(), mouseEvent->y(),m_pTableView->visualRect(item) );
328 
329  return true;
330  }
331  else
332  {
333  return QWidget::eventFilter(watched, event);
334  }
335 
336 }
Free surfer annotation.
Definition: annotation.h:97
The FrequencySpectrumModel class implements the data access model for a real-time multi sample array ...
The FrequencySpectrumDelegate class represents a RTMSA delegate which creates the plot paths...
void rcvMouseLoc(int row, int x, int y, QRect visRect)
void setBoundaries(float fLowerFrqBound, float fUpperFrqBound)
void toggleFreeze(const QModelIndex &index)
virtual void update(XMEASLIB::NewMeasurement::SPtr pMeasurement)
QSharedPointer< NewMeasurement > SPtr
FrequencySpectrumWidget(QSharedPointer< FrequencySpectrum > pNE, QSharedPointer< QTime > &pTime, QWidget *parent=0)
Contains the declaration of the FrequencySpectrum class.
void sendMouseLoc(int row, int x, int y, QRect visRect)
The FrequencySpectrumWidget class provides the settings widget.
Declaration of the FrequencySpectrumWidget Class.
The MeasurementWidget class is the base class of all measurement widgets.
void addDisplayAction(QAction *pAction)