input.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #include "input.hpp"
  2. QtInput::QtInput():QWidget(){
  3. geometry=new Geometry;
  4. geometry->initDefault();
  5. initial_state=new InitialState;
  6. source=new Source;
  7. main_layout=new QVBoxLayout;
  8. button_layout=new QHBoxLayout;
  9. tab_widget=new QTabWidget;
  10. button_widget=new QWidget;
  11. button_save=new QPushButton("Save");
  12. button_cancel=new QPushButton("Cancel");
  13. button_run=new QPushButton("Run");
  14. input_physics=new QtInputPhysics;
  15. input_time=new QtInputTime;
  16. input_geometry=new QtInputGeometry(geometry);
  17. input_initial_state=new QtInputInitialState(initial_state);
  18. input_pump_tab=new QtInputPumpTab(source);
  19. input_clouds_tab=new QtInputCloudsTab(source);
  20. input_view=new QtInputView(input_geometry,geometry,initial_state,source);
  21. time_bar=new QScrollBar(Qt::Horizontal);
  22. // input_view->setGeometry(geometry);
  23. // input_view->updateGeometry();
  24. //Tab
  25. tab_widget->addTab(input_physics,"Physics");
  26. tab_widget->addTab(input_time,"Time");
  27. tab_widget->addTab(input_geometry,"Geometry");
  28. tab_widget->addTab(input_initial_state,"Initial state");
  29. tab_widget->addTab(input_pump_tab,"Pumps");
  30. tab_widget->addTab(input_clouds_tab,"Clouds");
  31. //Buttons
  32. button_layout->addWidget(button_run);
  33. button_layout->addWidget(button_save);
  34. button_layout->addWidget(button_cancel);
  35. button_widget->setLayout(button_layout);
  36. //Main
  37. main_layout->addWidget(tab_widget);
  38. main_layout->addWidget(input_view,2);
  39. main_layout->addWidget(time_bar);
  40. main_layout->addWidget(button_widget);
  41. setLayout(main_layout);
  42. //Conectors
  43. connect(button_save,&QPushButton::clicked,this,&QtInput::save);
  44. connect(button_cancel,&QPushButton::clicked,this,&QtInput::cancel);
  45. connect(button_run,&QPushButton::clicked,this,&QtInput::run);
  46. connect(input_geometry,&QtInputGeometry::geometryChanged,this,&QtInput::updateGeometry);
  47. connect(tab_widget,&QTabWidget::currentChanged,this,&QtInput::changeTabIndex);
  48. connect(input_initial_state,&QtInputInitialState::initialStateChanged,this,&QtInput::updateInitialState);
  49. connect(time_bar,&QScrollBar::valueChanged,input_view,&QtInputView::setTime);
  50. connect(input_pump_tab,&QtInputPumpTab::sourcesChanged,this,&QtInput::updateSource);
  51. connect(input_clouds_tab,&QtInputCloudsTab::sourcesChanged,this,&QtInput::updateSource);
  52. previous_index=-1;
  53. }
  54. QtInput::QtInput(QString filename):QtInput(){
  55. load(filename.toStdString());
  56. }
  57. bool
  58. QtInput::validate(){
  59. QWidget* widget=input_physics->validate();
  60. if(widget!=nullptr){
  61. QMessageBox msgBox;
  62. msgBox.setText("Incorrect physics entry");
  63. msgBox.exec();
  64. tab_widget->setCurrentWidget(input_physics);
  65. widget->setFocus();
  66. return false;
  67. }
  68. widget=input_time->validate();
  69. if(widget!=nullptr){
  70. QMessageBox msgBox;
  71. msgBox.setText("Incorrect time entry");
  72. msgBox.exec();
  73. tab_widget->setCurrentWidget(input_time);
  74. widget->setFocus();
  75. return false;
  76. }
  77. widget=input_geometry->validate();
  78. if(widget!=nullptr){
  79. QMessageBox msgBox;
  80. msgBox.setText("Incorrect geometry entry");
  81. msgBox.exec();
  82. tab_widget->setCurrentWidget(input_geometry);
  83. widget->setFocus();
  84. return false;
  85. }
  86. widget=input_initial_state->validate();
  87. if(widget!=nullptr){
  88. QMessageBox msgBox;
  89. msgBox.setText("Incorrect initial entry");
  90. msgBox.exec();
  91. tab_widget->setCurrentWidget(input_initial_state);
  92. widget->setFocus();
  93. return false;
  94. }
  95. return true;
  96. }
  97. void
  98. QtInput::save(){
  99. if(validate()){
  100. QString filename=QFileDialog::getSaveFileName(this,"Save input","inputs/","QT input file (*.input)");
  101. if(not filename.isEmpty()){
  102. if(filename.indexOf(".input")==-1){
  103. filename.append(".input");
  104. }
  105. save_input(filename.toStdString());
  106. }
  107. }
  108. }
  109. void
  110. QtInput::run(){
  111. if(validate()){
  112. emit run_signal();
  113. }
  114. }
  115. void
  116. QtInput::save_input(string filename){
  117. fstream file;
  118. file.open(filename.c_str(),fstream::out|fstream::trunc|fstream::binary);
  119. input_physics->save(file);
  120. input_time->save(file);
  121. input_geometry->save(file);
  122. input_initial_state->save(file);
  123. //input_pump_tab->save(file);
  124. //input_clouds_tab->save(file);
  125. file.close();
  126. }
  127. void
  128. QtInput::cancel(){
  129. emit exit_signal();
  130. }
  131. void
  132. QtInput::load(string filename){
  133. fstream file;
  134. file.open(filename.c_str(),fstream::in|fstream::binary);
  135. input_physics->load(file);
  136. input_time->load(file);
  137. input_geometry->load(file);
  138. file.close();
  139. }
  140. void
  141. QtInput::changeTabIndex(int index){
  142. if(not validate()) return;
  143. switch(index){
  144. case 2:
  145. input_view->setStatus(QtInputView::Geom);
  146. break;
  147. case 3:
  148. input_view->setStatus(QtInputView::Init);
  149. break;
  150. case 4:
  151. input_view->setStatus(QtInputView::Sources);
  152. break;
  153. default:
  154. input_view->setStatus(QtInputView::Other);
  155. break;
  156. }
  157. switch(previous_index){
  158. case 2:
  159. updateGeometry();
  160. break;
  161. case 3:
  162. updateInitialState();
  163. break;
  164. default:
  165. break;
  166. }
  167. previous_index=index;
  168. input_view->update();
  169. }
  170. void
  171. QtInput::updateGeometry(){
  172. QWidget* widget=input_geometry->validate();
  173. if(widget!=nullptr){
  174. QMessageBox msgBox;
  175. msgBox.setText("Incorrect geometry entry");
  176. msgBox.exec();
  177. tab_widget->setCurrentWidget(input_geometry);
  178. widget->setFocus();
  179. }
  180. else{
  181. input_view->updateGeometry();
  182. }
  183. }
  184. void
  185. QtInput::updateInitialState(){
  186. initial_state->updatePressure();
  187. input_view->updateInitialState();
  188. }
  189. void
  190. QtInput::updateSource(){
  191. input_view->updateSource();
  192. }