MNE-CPP  beta 1.0
sensorwidget.cpp
Go to the documentation of this file.
1 //=============================================================================================================
36 //*************************************************************************************************************
37 //=============================================================================================================
38 // INCLUDES
39 //=============================================================================================================
40 
41 #include "sensorwidget.h"
42 #include "sensoritem.h"
43 
44 
45 //*************************************************************************************************************
46 //=============================================================================================================
47 // Qt INCLUDES
48 //=============================================================================================================
49 
50 #include <QFile>
51 #include <QToolButton>
52 #include <QButtonGroup>
53 #include <QVBoxLayout>
54 #include <QHBoxLayout>
55 
56 #include <QDebug>
57 
58 
59 //*************************************************************************************************************
60 //=============================================================================================================
61 // USED NAMESPACES
62 //=============================================================================================================
63 
64 using namespace XDISPLIB;
65 
66 
67 //*************************************************************************************************************
68 //=============================================================================================================
69 // DEFINE MEMBER METHODS
70 //=============================================================================================================
71 
72 SensorWidget::SensorWidget(QWidget *parent, Qt::WindowFlags f)
73 : QWidget(parent, f)
74 , m_pSensorModel(NULL)
75 {
76  m_pGraphicsView = new QGraphicsView(this);
77 
78  m_pGraphicsScene = new QGraphicsScene(this);
79 
80  m_pGraphicsView->setScene(m_pGraphicsScene);
81 
82  createUI();
83 }
84 
85 
86 //*************************************************************************************************************
87 
88 void SensorWidget::contextUpdate(const QModelIndex & topLeft, const QModelIndex & bottomRight, const QVector<int> & roles)
89 {
90  Q_UNUSED(topLeft)
91  Q_UNUSED(bottomRight)
92  Q_UNUSED(roles)
93  contextUpdate();
94 }
95 
96 
97 //*************************************************************************************************************
98 
100 {
101  drawChannels();
102 }
103 
104 
105 //*************************************************************************************************************
106 
108 {
109  if(m_pSensorModel)
110  {
111  // Sensor Selection
112  QButtonGroup *qBGSensorSelection = new QButtonGroup;
113  qBGSensorSelection->setExclusive(true);
114 
115  QVBoxLayout *VBoxSensorSelection = new QVBoxLayout;
116  for(qint32 i = 0; i < m_pSensorModel->getSensorGroups().size(); ++i)
117  {
118  QToolButton *sensorSelectionButton = new QToolButton;
119  sensorSelectionButton->setText(m_pSensorModel->getSensorGroups()[i].getGroupName());
120  qBGSensorSelection->addButton(sensorSelectionButton,i);
121  VBoxSensorSelection->addWidget(sensorSelectionButton);
122  }
123 
124  connect(qBGSensorSelection, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), m_pSensorModel, &SensorModel::applySensorGroup);
125 
126 
127  // Layout Selection
128  QButtonGroup *qBGLayout = new QButtonGroup;
129  qBGLayout->setExclusive(true);
130 
131  QHBoxLayout *HBoxButtonGroupLayout = new QHBoxLayout;
132 
133  for(qint32 i = 0; i < m_pSensorModel->getNumLayouts(); ++i)
134  {
135  QToolButton *buttonLayout = new QToolButton;
136  buttonLayout->setText(m_pSensorModel->getSensorLayouts()[i].getName());
137  buttonLayout->setCheckable(true);
138 
139  if(i == 0)
140  buttonLayout->setChecked(true);
141  else
142  buttonLayout->setChecked(false);
143 
144  qBGLayout->addButton(buttonLayout, i);
145 
146  HBoxButtonGroupLayout->addWidget(buttonLayout);
147  }
148 
149  connect(qBGLayout, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), m_pSensorModel, &SensorModel::setCurrentLayout);
150 
151 
152  QGridLayout *topLayout = new QGridLayout;
153  topLayout->addWidget(m_pGraphicsView, 0, 0);
154  topLayout->addLayout(VBoxSensorSelection, 0, 1);
155  topLayout->addLayout(HBoxButtonGroupLayout, 1, 0);
156 
157  setLayout(topLayout);
158  }
159 }
160 
161 
162 //*************************************************************************************************************
163 
165 {
166  m_pSensorModel = model;
167 
168  drawChannels();
169 
170  connect(m_pSensorModel, &QAbstractTableModel::dataChanged, this, static_cast<void (SensorWidget::*)(const QModelIndex &, const QModelIndex &, const QVector<int> &)>(&SensorWidget::contextUpdate));
171  connect(m_pSensorModel, &QAbstractTableModel::modelReset, this, static_cast<void (SensorWidget::*)(void)>(&SensorWidget::contextUpdate));
172 
173  connect(m_pSensorModel, &SensorModel::newLayout, this, &SensorWidget::drawChannels);
174 
175  createUI();
176 }
177 
178 
179 //*************************************************************************************************************
180 
182 {
183  if(m_pGraphicsScene)
184  {
185  m_pGraphicsScene->clear();
186 
187  for(qint32 i = 0; i < m_pSensorModel->rowCount(); ++i)
188  {
189  QString dispChName = m_pSensorModel->data(i, 0).toString();
190  QString fullChName = m_pSensorModel->data(i, 1).toString();
191  QPointF loc = m_pSensorModel->data(i, 2).toPointF();
192  qint32 chNum = m_pSensorModel->getNameIdMap()[fullChName];
193  SensorItem *item = new SensorItem(dispChName, chNum, loc, Qt::darkBlue);
194  item->setChoosen(m_pSensorModel->data(i, 3).toBool());
195  item->setPos(loc);
196 
197  connect(item, &SensorItem::itemChanged, m_pSensorModel, &SensorModel::updateChannelState);
198  m_pGraphicsScene->addItem(item);
199  }
200  }
201 }
void applySensorGroup(int id)
QVariant data(int row, int column, int role=Qt::DisplayRole) const
Definition: sensormodel.h:225
void itemChanged(SensorItem *item)
void setChoosen(bool choosen)
Definition: sensoritem.h:285
const QList< SensorGroup > & getSensorGroups() const
Definition: sensormodel.h:249
The SensorWidget class provides the sensor selection widget.
Definition: sensorwidget.h:72
The SensorModel class implements a table model which holds the sensor model properties.
Definition: sensormodel.h:37
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
Definition: sensormodel.cpp:95
const QList< SensorLayout > & getSensorLayouts() const
Definition: sensormodel.h:233
Declaration of the SensorItem Class.
const QMap< QString, qint32 > & getNameIdMap() const
Definition: sensormodel.h:265
void setModel(SensorModel *model)
SensorWidget(QWidget *parent=0, Qt::WindowFlags f=0)
void setCurrentLayout(int id)
Declaration of the SensorWidget Class.
qint32 getNumLayouts() const
Definition: sensormodel.h:241
The SensorItem class represents a channel item, plottet at the graphics scene.
Definition: sensoritem.h:64
void updateChannelState(SensorItem *item)