5 #include "controlDialog.h"
6 #include "myglwidget.h"
7 #include "workerthread.h"
9 ControlDialog::ControlDialog(QWidget
*parent
)
12 std::cout
<< "ControlDialog::ControlDialog()\n";
14 // Worker thread populates the data pool with coordinations and angles.
15 // It automatically blocks once the pool has reached a maximum number
16 // of data and wakes up when data resource are low.
23 connect(this, SIGNAL(glSceneNeedsUpdate()), &m_GLScene
, SLOT(updateGL()));
24 connect(fileNameEdit
, SIGNAL(returnPressed()), this, SLOT(on_fileNameChangedManually()));
25 connect(this, SIGNAL(fileNameChanged(QString
)), &m_thread
, SLOT(setFileName(QString
)));
28 connect(&m_timeLine
, SIGNAL(valueChanged(qreal
)), this, SLOT(pullData(qreal
)));
30 // Initialize axis, camera, sphere.
32 m_axisX
.setColor(QColor(255, 0, 0));
33 m_axisY
.setColor(QColor(0, 255, 0));
34 m_axisZ
.setColor(QColor(0, 0, 255));
35 m_localAxisSystem
= false;
38 m_camera
.setEyeX(eyeXEdit
->text().toFloat());
39 m_camera
.setEyeY(eyeYEdit
->text().toFloat());
40 m_camera
.setEyeZ(eyeZEdit
->text().toFloat());
42 m_camera
.setCenterX(centerXEdit
->text().toFloat());
43 m_camera
.setCenterY(centerYEdit
->text().toFloat());
44 m_camera
.setCenterZ(centerZEdit
->text().toFloat());
46 m_camera
.setUpX(upXEdit
->text().toFloat());
47 m_camera
.setUpY(upYEdit
->text().toFloat());
48 m_camera
.setUpZ(upZEdit
->text().toFloat());
51 m_sphere
.setRadius(radiusSpin
->value());
52 m_sphere
.setSlices(slicesSpin
->value());
53 m_sphere
.setStacks(stacksSpin
->value());
54 m_sphere
.setCulling(cullingCheck
->checkState() == Qt::Checked
?
57 // Pass objects to GL scene.
58 m_GLScene
.setAxis(AXIS_X
, &m_axisX
);
59 m_GLScene
.setAxis(AXIS_Y
, &m_axisY
);
60 m_GLScene
.setAxis(AXIS_Z
, &m_axisZ
);
62 m_GLScene
.setCamera(&m_camera
);
63 m_GLScene
.setSphere(&m_sphere
);
66 m_GLScene
.setWindowTitle("GL Scene");
67 // Window manager might ignore the following line.
68 m_GLScene
.move(pos().x() + frameGeometry().width(), pos().y());
71 // At this point the animation isn't ready to begin.
72 // We still miss the WorkerThread::setFileName(),
73 // QTimeLine::setFrameRange(), ::setUpdateInterval() and ::setDuration().
76 ControlDialog::~ControlDialog()
78 std::cout
<< "ControlDialog::~ControlDialog()\n";
82 void ControlDialog::on_startButton_clicked()
84 std::cout
<< "ControlDialog::on_startButton_clicked()\n";
87 stopButton
->setEnabled(true);
90 void ControlDialog::on_stopButton_clicked()
92 std::cout
<< "ControlDialog::on_stopButton_clicked()\n";
95 stopButton
->setEnabled(false);
98 void ControlDialog::on_exitButton_clicked()
100 // qApp is a global pointer referring to the unique application object.
101 qApp
->closeAllWindows();
104 void ControlDialog::on_xAxisVisibleCheck_stateChanged(int state
)
106 qDebug("ControlDialog::on_xAxisVisibleCheck_stateChanged()\n"
107 "New state = %d", state
);
109 m_axisX
.setVisible(state
== Qt::Checked
? true : false);
110 emit
glSceneNeedsUpdate();
113 void ControlDialog::on_yAxisVisibleCheck_stateChanged(int state
)
115 qDebug("ControlDialog::on_yAxisVisibleCheck_stateChanged()\n"
116 "New state = %d", state
);
118 m_axisY
.setVisible(state
== Qt::Checked
? true : false);
119 emit
glSceneNeedsUpdate();
122 void ControlDialog::on_zAxisVisibleCheck_stateChanged(int state
)
124 qDebug("ControlDialog::on_zAxisVisibleCheck_stateChanged()\n"
125 "New state = %d", state
);
127 m_axisZ
.setVisible(state
== Qt::Checked
? true : false);
128 emit
glSceneNeedsUpdate();
131 void ControlDialog::on_localAxisCheck_stateChanged(int state
)
133 qDebug("ControlDialog::on_localAxisCheck_stateChanged()\n"
134 "New state = %d", state
);
136 m_axisX
.setLocal(state
== Qt::Checked
? true : false);
137 m_axisY
.setLocal(state
== Qt::Checked
? true : false);
138 m_axisZ
.setLocal(state
== Qt::Checked
? true : false);
139 emit
glSceneNeedsUpdate();
142 void ControlDialog::on_stacksSpin_valueChanged(int i
)
144 qDebug("ControlDialog::on_stacksSpin_valueChanged()\n"
145 "New value = %d", i
);
147 m_sphere
.setStacks(i
);
148 emit
glSceneNeedsUpdate();
151 void ControlDialog::on_slicesSpin_valueChanged(int i
)
153 qDebug("ControlDialog::on_slicesSpin_valueChanged()\n"
154 "New value = %d", i
);
156 m_sphere
.setSlices(i
);
157 emit
glSceneNeedsUpdate();
160 void ControlDialog::on_radiusSpin_valueChanged(double d
)
162 qDebug("ControlDialog::on_radiusSpin_valueChanged()\n"
163 "New value = %f", d
);
165 m_sphere
.setRadius(d
);
166 emit
glSceneNeedsUpdate();
169 void ControlDialog::on_cullingCheck_stateChanged(int state
)
171 qDebug("ControlDialog::on_cullingCheck_stateChanged()\n"
172 "New state = %d", state
);
174 m_sphere
.setCulling(state
== Qt::Checked
? true : false);
175 emit
glSceneNeedsUpdate();
178 // Camera tab related slots
179 void ControlDialog::on_eyeXEdit_textChanged(const QString
& text
)
181 qDebug("ControlDialog::on_eyeXEdit_textChanged()\n"
182 "New eyeX = %f", text
.toFloat());
184 m_camera
.setEyeX(text
.toFloat());
185 emit
glSceneNeedsUpdate();
188 void ControlDialog::on_eyeYEdit_textChanged(const QString
& text
)
190 qDebug("ControlDialog::on_eyeYEdit_textChanged()\n"
191 "New eyeY = %f", text
.toFloat());
193 m_camera
.setEyeY(text
.toFloat());
194 emit
glSceneNeedsUpdate();
197 void ControlDialog::on_eyeZEdit_textChanged(const QString
& text
)
199 qDebug("ControlDialog::on_eyeZEdit_textChanged()\n"
200 "New eyeZ = %f", text
.toFloat());
202 m_camera
.setEyeZ(text
.toFloat());
203 emit
glSceneNeedsUpdate();
206 void ControlDialog::on_centerXEdit_textChanged(const QString
& text
)
208 qDebug("ControlDialog::on_centerXEdit_textChanged()\n"
209 "New centerX = %f", text
.toFloat());
211 m_camera
.setCenterX(text
.toFloat());
212 emit
glSceneNeedsUpdate();
215 void ControlDialog::on_centerYEdit_textChanged(const QString
& text
)
217 qDebug("ControlDialog::on_centerYEdit_textChanged()\n"
218 "New centerY = %f", text
.toFloat());
220 m_camera
.setCenterY(text
.toFloat());
221 emit
glSceneNeedsUpdate();
224 void ControlDialog::on_centerZEdit_textChanged(const QString
& text
)
226 qDebug("ControlDialog::on_centerZEdit_textChanged()\n"
227 "New centerZ = %f", text
.toFloat());
229 m_camera
.setCenterZ(text
.toFloat());
230 emit
glSceneNeedsUpdate();
233 void ControlDialog::on_upXEdit_textChanged(const QString
& text
)
235 qDebug("ControlDialog::on_upXEdit_textChanged()\n"
236 "New upX = %f", text
.toFloat());
238 m_camera
.setUpX(text
.toFloat());
239 emit
glSceneNeedsUpdate();
242 void ControlDialog::on_upYEdit_textChanged(const QString
& text
)
244 qDebug("ControlDialog::on_upYEdit_textChanged()\n"
245 "New upY = %f", text
.toFloat());
247 m_camera
.setUpY(text
.toFloat());
248 emit
glSceneNeedsUpdate();
251 void ControlDialog::on_upZEdit_textChanged(const QString
& text
)
253 qDebug("ControlDialog::on_upZEdit_textChanged()\n"
254 "New upZ = %f", text
.toFloat());
256 m_camera
.setUpZ(text
.toFloat());
257 emit
glSceneNeedsUpdate();
260 void ControlDialog::on_browseFileButton_clicked(void)
263 qDebug("ControlDialog::on_browseFileButton_clicked()");
265 fileName
= QFileDialog::getOpenFileName(this, tr("Open data file"),
266 "/home", "Data files(*.dat);; All files(*)");
267 if (fileName
== NULL
)
270 // CAUTION: this lines must precede or else the
271 // WorkerThread::extractHeader() won't be called.
272 fileNameEdit
->setText(fileName
);
273 emit
fileNameChanged(fileName
);
276 m_timeLine
.setFrameRange(0, fpsSpin
->value() * m_thread
.getDuration());
277 m_timeLine
.setUpdateInterval(1000 / fpsSpin
->value());
278 m_timeLine
.setDuration(m_thread
.getDuration());
281 QString magicVersionStr
= QString("0x%1")
282 .arg(m_thread
.getMagicVersion(), 0, 16).toUpper();
283 QString protocolVersionStr
= QString::number(m_thread
.getProtocolVersion());
284 QString durationStr
= QString::number(m_thread
.getDuration());
285 QString numberOfRecordsStr
= QString::number(m_thread
.getNumOfRecords());
287 magicVersionOutputLabel
->setText(magicVersionStr
);
288 protocolVersionOutputLabel
->setText(protocolVersionStr
);
289 durationOutputLabel
->setText(durationStr
);
290 numberOfRecordsOutputLabel
->setText(numberOfRecordsStr
);
292 if (!startButton
->isEnabled())
293 startButton
->setEnabled(true);
296 void ControlDialog::on_fileNameChangedManually(void)
298 qDebug("ControlDialog::on_fileNameChangedManually()");
300 QString fileName
= fileNameEdit
->text();
301 emit
fileNameChanged(fileName
);
304 void ControlDialog::pullData(qreal time
)
306 qDebug("ControlDialog::pullData()");