DLA-Fire-Prediction-Thesis 1.0

MainWindow.cpp

Go to the documentation of this file.
00001 //----------------------------------------------------------------------------------------------------------------------
00004 //----------------------------------------------------------------------------------------------------------------------
00005 
00006 #include "MainWindow.h"
00007 #include "GLWindow.h"
00008 #include "ui_MainWindow.h"
00009 
00010 //----------------------------------------------------------------------------------------------------------------------
00011 MainWindow::MainWindow(
00012                        QWidget *_parent
00013                       ):
00014                         QMainWindow(_parent),
00015                         m_ui(new Ui::MainWindow)
00016 {
00017     // setup the user interface
00018     m_ui->setupUi(this);
00019     // create our GL window for drawing the scene
00020     m_gl=new GLWindow(this);
00021     // add the glWindow to the UI
00022     m_ui->s_mainWindowGridLayout->addWidget(m_gl,0,0,2,1);
00023 
00024     m_previousTemp = m_ui->m_sceneTemp->value();
00025 
00026     // ----- wireframe and appearance of the scene
00027     connect(m_ui->m_wireframe,SIGNAL(toggled(bool)),m_gl,SLOT(toggleWireframe(bool)));
00028     connect(m_ui->m_showMark, SIGNAL(toggled(bool)), m_gl, SLOT(toggleShowMark(bool)));
00029     connect(m_ui->m_lineShowingOnly,SIGNAL(toggled(bool)),m_gl,SLOT(toggleShowLine(bool)));
00030 
00031 
00032     // ----- camera
00033     connect(m_ui->m_cameraSelection,SIGNAL(currentIndexChanged(int)),m_gl,SLOT(pickCamera(int)));
00034     connect(m_ui->m_zoomIn, SIGNAL(clicked()),m_gl,SLOT(zoomIn()));
00035     connect(m_ui->m_zoomOut,SIGNAL(clicked()),m_gl,SLOT(zoomOut()));
00036     // ----- terrain
00037     connect(m_ui->m_mountain, SIGNAL(toggled(bool)),m_gl,SLOT(toggleTerrain(bool)));
00038     connect(m_ui->m_mountain, SIGNAL(toggled(bool)),this,SLOT(toggleTerrainButton()));
00039     if(m_ui->m_mountain->isChecked())
00040     {
00041         m_ui->m_heightDown->setEnabled(true);
00042         m_ui->m_heightUp->setEnabled(true);
00043         m_ui->m_mountainReset->setEnabled(true);
00044         m_ui->m_mountainIterationsNumber->setEnabled(true);
00045         m_ui->m_originAmount->setEnabled(true);
00046         m_ui->m_originIndex->setEnabled(true);
00047 
00048         connect(m_ui->m_mountainReset, SIGNAL(clicked()),m_gl,SLOT(resetMountain()));
00049         connect(m_ui->m_heightUp, SIGNAL(clicked()),m_gl,SLOT(increaseTerrainHeight()));
00050         connect(m_ui->m_heightDown, SIGNAL(clicked()),m_gl,SLOT(decreaseTerrainHeight()));
00051         connect(m_ui->m_mountainIterationsNumber, SIGNAL(valueChanged(int)),m_gl,SLOT(setNewMountainIterations(int)));
00052         connect(m_ui->m_originAmount, SIGNAL(valueChanged(int)), m_gl, SLOT(assignNewOrigin(int)));
00053         connect(m_ui->m_originAmount, SIGNAL(valueChanged(int)), this, SLOT(setNewMaximum(int)));
00054     }
00055     else
00056     {
00057         m_ui->m_heightDown->setEnabled(false);
00058         m_ui->m_heightUp->setEnabled(false);
00059         m_ui->m_mountainReset->setEnabled(false);
00060         m_ui->m_mountainIterationsNumber->setEnabled(false);
00061     }
00062 
00063     // ----- fire origin
00064     connect(m_ui->m_originIndex, SIGNAL(valueChanged(int)), m_gl, SLOT(selectMovingOrigin(int)));
00065     connect(m_ui->m_moveLeft, SIGNAL(clicked()),m_gl,SLOT(moveOriginLeft()));
00066     connect(m_ui->m_moveRight, SIGNAL(clicked()),m_gl,SLOT(moveOriginRight()));
00067     connect(m_ui->m_moveUp, SIGNAL(clicked()),m_gl,SLOT(moveOriginUp()));
00068     connect(m_ui->m_moveDown, SIGNAL(clicked()),m_gl,SLOT(moveOriginDown()));
00069 
00070     // ----- fire obstacle (non-flammable and flammable fuel)
00071     connect(m_ui->m_obstacleNumber, SIGNAL(valueChanged(int)), m_gl, SLOT(adjustObstacleAmount(int)));
00072     connect(m_ui->m_fuelObjectAmount, SIGNAL(valueChanged(int)), m_gl, SLOT(adjustFuelAmount(int)));
00073     connect(m_ui->m_fuelMoisture, SIGNAL(valueChanged(double)), m_gl, SLOT(changeObjMoisture(double)));
00074     connect(m_ui->m_fuelObjectAmount, SIGNAL(valueChanged(int)), this, SLOT(setNewObjMaximum(int)));
00075     connect(m_ui->m_fuelIndex, SIGNAL(valueChanged(int)), m_gl, SLOT(selectObjIndexToAdjustSize(int)));
00076     // size adjust
00077     connect(m_ui->m_increaseFuelLength, SIGNAL(clicked()), this, SLOT(increaseFuelLength()));
00078     connect(m_ui->m_decreaseFuelLength, SIGNAL(clicked()), this, SLOT(decreaseFuelLength()));
00079     connect(m_ui->m_increaseFuel, SIGNAL(clicked()), this, SLOT(increaseFuelHeight()));
00080     connect(m_ui->m_decreaseFuel, SIGNAL(clicked()), this, SLOT(decreaseFuelHeight()));
00081 
00082     // ----- play, pause, generate and edit button
00083     connect(m_ui->m_generateToggle, SIGNAL(clicked()), this, SLOT(toggleGenerateButton()));
00084     connect(m_ui->m_editSceneToggle, SIGNAL(clicked()), this, SLOT(toggleEditButton()));
00085     connect(m_ui->m_generateToggle, SIGNAL(clicked()), m_gl, SLOT(generateNewFirePath()));
00086     connect(m_ui->m_editSceneToggle, SIGNAL(clicked()), m_gl, SLOT(editDLA()));
00087     connect(m_ui->m_pause, SIGNAL(clicked()), m_gl, SLOT(pauseAnimation()));
00088     connect(m_ui->m_play, SIGNAL(clicked()), m_gl, SLOT(playAnimation()));
00089 
00090     // ----- wind
00091     connect(m_ui->m_windCheckBox, SIGNAL(toggled(bool)), m_gl, SLOT(enableWind(bool)));
00092     connect(m_ui->m_windCheckBox, SIGNAL(toggled(bool)), this, SLOT(toggleWind()));
00093 
00094     if(m_ui->m_windCheckBox->isChecked())
00095     {
00096         m_ui->m_windArrowShow->setEnabled(true);
00097         m_ui->m_windDialDir->setEnabled(true);
00098         m_ui->m_windSpeed->setEnabled(true);
00099 
00100         // label
00101         m_ui->m_winddirlabel->setEnabled(true);
00102         m_ui->m_windspeedlabel->setEnabled(true);
00103 
00104         if(m_ui->m_windArrowShow->isChecked())
00105             m_gl->showWindDir(true);
00106 
00107         connect(m_ui->m_windSpeed, SIGNAL(valueChanged(int)), m_gl, SLOT(assignWindSpeed(int)));
00108         connect(m_ui->m_windArrowShow, SIGNAL(toggled(bool)), m_gl, SLOT(showWindDir(bool)));
00109         connect(m_ui->m_windDialDir, SIGNAL(sliderMoved(int)), m_gl, SLOT(changeWindDirection(int)));
00110     }
00111     else
00112     {
00113         m_ui->m_windArrowShow->setEnabled(false);
00114         m_ui->m_windDialDir->setEnabled(false);
00115         m_ui->m_windSpeed->setEnabled(false);
00116 
00117         // label
00118         m_ui->m_winddirlabel->setEnabled(false);
00119         m_ui->m_windspeedlabel->setEnabled(false);
00120     }
00121 
00122     // Weather
00123     connect(m_ui->m_sceneMoisture, SIGNAL(valueChanged(double)), m_gl, SLOT(changeMoistureOfTheScene(double)));
00124     connect(m_ui->m_sceneTemp, SIGNAL(valueChanged(double)), m_gl, SLOT(changeTemperature(double)));
00125     connect(m_ui->m_sceneTemp, SIGNAL(valueChanged(double)), this, SLOT(setNewMoisture(double)));
00126 
00127 }
00128 
00129 //----------------------------------------------------------------------------------------------------------------------
00130 MainWindow::~MainWindow()
00131 {
00132     delete m_ui;
00133 }
00134 
00135 //----------------------------------------------------------------------------------------------------------------------
00136 void MainWindow::setNewMoisture(double _currentTemp)
00137 {
00138     double m_checkTemp = m_previousTemp - _currentTemp;
00139     double m_currentMoisture = m_ui->m_sceneMoisture->value();
00140 
00141     // it means the temperature has decreased
00142     if(m_checkTemp>0)
00143     {
00144         // according to the previous work, if the temperature has decreased every 20 Celsius, the moisture would be double increased.
00145         if(m_checkTemp>=20)
00146         {
00147             m_currentMoisture *= 2;
00148             m_previousTemp = _currentTemp;
00149             m_gl->changeMoistureOfTheScene(m_currentMoisture);
00150         }
00151     }
00152     else
00153     {
00154         // according to the previous work, if the temperature has increased every 20 Celsius, the moisture would be double decreased.
00155         if(m_checkTemp<=-20)
00156         {
00157             m_currentMoisture = m_currentMoisture/2;
00158             m_previousTemp = _currentTemp;
00159             m_gl->changeMoistureOfTheScene(m_currentMoisture);
00160         }
00161     }
00162 
00163     m_ui->m_sceneMoisture->setValue(m_currentMoisture);
00164 }
00165 
00166 //----------------------------------------------------------------------------------------------------------------------
00167 void MainWindow::setNewMaximum(
00168                               int _newMaximum
00169                               )
00170 {
00171     m_ui->m_originIndex->setMaximum(_newMaximum);
00172 }
00173 
00174 //----------------------------------------------------------------------------------------------------------------------
00175 void MainWindow::setNewObjMaximum(int _newObjAmount)
00176 {
00177     if(_newObjAmount>0)
00178     {
00179         m_ui->m_fuelIndex->setEnabled(true);
00180         m_ui->m_fuelIndex->setMaximum(_newObjAmount);
00181     }
00182     else
00183     {
00184         m_ui->m_fuelIndex->setMaximum(1);
00185         m_ui->m_fuelIndex->setEnabled(false);
00186     }
00187 
00188 }
00189 
00190 //----------------------------------------------------------------------------------------------------------------------
00191 void MainWindow::toggleGenerateButton()
00192 {
00193     m_ui->m_tabMenu->setEnabled(false);
00194     m_ui->m_generateToggle->setEnabled(false);
00195     m_ui->m_editSceneToggle->setEnabled(true);
00196     m_ui->m_pause->setEnabled(true);
00197     m_ui->m_play->setEnabled(true);
00198 }
00199 
00200 //----------------------------------------------------------------------------------------------------------------------
00201 void MainWindow::toggleEditButton()
00202 {
00203     m_ui->m_tabMenu->setEnabled(true);
00204     m_ui->m_generateToggle->setEnabled(true);
00205     m_ui->m_editSceneToggle->setEnabled(false);
00206     m_ui->m_pause->setEnabled(false);
00207     m_ui->m_play->setEnabled(false);
00208 }
00209 
00210 //----------------------------------------------------------------------------------------------------------------------
00211 void MainWindow::toggleTerrainButton()
00212 {
00213     if(m_ui->m_mountain->isChecked())
00214     {
00215         m_ui->m_heightDown->setEnabled(true);
00216         m_ui->m_heightUp->setEnabled(true);
00217         m_ui->m_mountainReset->setEnabled(true);
00218         m_ui->m_mountainIterationsNumber->setEnabled(true);
00219         m_ui->m_originAmount->setEnabled(true);
00220 
00221         connect(m_ui->m_mountainReset, SIGNAL(clicked()),m_gl,SLOT(resetMountain()));
00222         connect(m_ui->m_heightUp, SIGNAL(clicked()),m_gl,SLOT(increaseTerrainHeight()));
00223         connect(m_ui->m_heightDown, SIGNAL(clicked()),m_gl,SLOT(decreaseTerrainHeight()));
00224         connect(m_ui->m_mountainIterationsNumber, SIGNAL(valueChanged(int)),m_gl,SLOT(setNewMountainIterations(int)));
00225         connect(m_ui->m_originAmount, SIGNAL(valueChanged(int)), m_gl, SLOT(assignNewOrigin(int)));
00226         connect(m_ui->m_originAmount, SIGNAL(valueChanged(int)), this, SLOT(setNewMaximum(int)));
00227     }
00228     else
00229     {
00230         m_ui->m_heightDown->setEnabled(false);
00231         m_ui->m_heightUp->setEnabled(false);
00232         m_ui->m_mountainReset->setEnabled(false);
00233         m_ui->m_mountainIterationsNumber->setEnabled(false);
00234         m_ui->m_originAmount->setEnabled(false);
00235     }
00236 }
00237 
00238 //----------------------------------------------------------------------------------------------------------------------
00239 void MainWindow::toggleWind()
00240 {
00241     if(m_ui->m_windCheckBox->isChecked())
00242     {
00243         m_ui->m_windArrowShow->setEnabled(true);
00244         m_ui->m_windDialDir->setEnabled(true);
00245         m_ui->m_windSpeed->setEnabled(true);
00246 
00247         // label
00248         m_ui->m_winddirlabel->setEnabled(true);
00249         m_ui->m_windspeedlabel->setEnabled(true);
00250 
00251         if(m_ui->m_windArrowShow->isChecked())
00252             m_gl->showWindDir(true);
00253 
00254         connect(m_ui->m_windSpeed, SIGNAL(valueChanged(int)), m_gl, SLOT(assignWindSpeed(int)));
00255         connect(m_ui->m_windArrowShow, SIGNAL(toggled(bool)), m_gl, SLOT(showWindDir(bool)));
00256         connect(m_ui->m_windDialDir, SIGNAL(sliderMoved(int)), m_gl, SLOT(changeWindDirection(int)));
00257     }
00258     else
00259     {
00260         m_ui->m_windArrowShow->setEnabled(false);
00261         m_ui->m_windDialDir->setEnabled(false);
00262         m_ui->m_windSpeed->setEnabled(false);
00263 
00264         // label
00265         m_ui->m_winddirlabel->setEnabled(false);
00266         m_ui->m_windspeedlabel->setEnabled(false);
00267     }
00268 }
00269 
00270 //----------------------------------------------------------------------------------------------------------------------
00271 void MainWindow::increaseFuelHeight()
00272 {
00273     m_gl->adjustFuelSize(3 , 1);
00274 }
00275 
00276 //----------------------------------------------------------------------------------------------------------------------
00277 void MainWindow::increaseFuelLength()
00278 {
00279     m_gl->adjustFuelSize(1 , 1);
00280 
00281 }
00282 
00283 //----------------------------------------------------------------------------------------------------------------------
00284 void MainWindow::decreaseFuelHeight()
00285 {
00286     m_gl->adjustFuelSize(3 , 2);
00287 }
00288 
00289 //----------------------------------------------------------------------------------------------------------------------
00290 void MainWindow::decreaseFuelLength()
00291 {
00292     m_gl->adjustFuelSize(1 , 2);
00293 
00294 }
00295 
 All Classes Namespaces Files Functions Variables Enumerations Enumerator