Towards a sane implementation
[agianapa.git] / qt / sphere-orbit-camera-gui / controlDialog.cpp
blob6a71bb00d4179b43791d9448559f321fca00f67b
1 #include <iostream>
2 //#include <QString>
3 #include <QTextStream>
5 #include "controlDialog.h"
6 #include "myglwidget.h"
7 #include "workerthread.h"
9 ControlDialog::ControlDialog(QWidget *parent)
10 : QDialog(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.
17 m_thread.start();
19 // Setup GUI
20 setupUi(this);
22 // Connect signals
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)));
27 // Timeline
28 connect(&m_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(pullData(qreal)));
30 // Initialize axis, camera, sphere.
31 // XXX: axis
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;
37 // Camera
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());
50 // Sphere
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 ?
55 true : false);
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);
65 // Show scene
66 m_GLScene.setWindowTitle("GL Scene");
67 // Window manager might ignore the following line.
68 m_GLScene.move(pos().x() + frameGeometry().width(), pos().y());
69 m_GLScene.show();
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";
86 m_timeLine.start();
87 stopButton->setEnabled(true);
90 void ControlDialog::on_stopButton_clicked()
92 std::cout << "ControlDialog::on_stopButton_clicked()\n";
94 m_timeLine.stop();
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)
262 QString fileName;
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)
268 return;
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()");