input.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #include "input.hpp"
  2. QtInput::QtInput():QWidget(){
  3. geometry=new Geometry;
  4. geometry->initDefault();
  5. main_layout=new QVBoxLayout;
  6. button_layout=new QHBoxLayout;
  7. tab_widget=new QTabWidget;
  8. button_widget=new QWidget;
  9. button_save=new QPushButton("Save");
  10. button_cancel=new QPushButton("Cancel");
  11. button_run=new QPushButton("Run");
  12. input_view=new QtInputView;
  13. input_physics=new QtInputPhysics;
  14. input_time=new QtInputTime;
  15. input_geometry=new QtInputGeometry(geometry);
  16. input_initial_state=new QtInputInitialState;
  17. input_sources=new QtInputSources;
  18. input_view->setGeometry(geometry);
  19. input_view->updateGeometry();
  20. //Tab
  21. tab_widget->addTab(input_physics,"Physics");
  22. tab_widget->addTab(input_time,"Time");
  23. tab_widget->addTab(input_geometry,"Geometry");
  24. tab_widget->addTab(input_initial_state,"Initial state");
  25. tab_widget->addTab(input_sources,"Sources");
  26. //Buttons
  27. button_layout->addWidget(button_run);
  28. button_layout->addWidget(button_save);
  29. button_layout->addWidget(button_cancel);
  30. button_widget->setLayout(button_layout);
  31. //Main
  32. main_layout->addWidget(tab_widget);
  33. main_layout->addWidget(input_view,2);
  34. main_layout->addWidget(button_widget);
  35. setLayout(main_layout);
  36. //Conectors
  37. connect(button_save,&QPushButton::clicked,this,&QtInput::save);
  38. connect(button_cancel,&QPushButton::clicked,this,&QtInput::cancel);
  39. connect(button_run,&QPushButton::clicked,this,&QtInput::run);
  40. connect(input_geometry,&QtInputGeometry::geometryChanged,this,&QtInput::updateGeometry);
  41. connect(tab_widget,&QTabWidget::currentChanged,this,&QtInput::changeTabIndex);
  42. previous_index=-1;
  43. }
  44. QtInput::QtInput(QString filename):QtInput(){
  45. load(filename.toStdString());
  46. }
  47. QtInput::~QtInput(){
  48. }
  49. bool
  50. QtInput::validate(){
  51. QWidget* widget=input_physics->validate();
  52. if(widget!=nullptr){
  53. QMessageBox msgBox;
  54. msgBox.setText("Incorrect physics entry");
  55. msgBox.exec();
  56. tab_widget->setCurrentWidget(input_physics);
  57. widget->setFocus();
  58. return false;
  59. }
  60. widget=input_time->validate();
  61. if(widget!=nullptr){
  62. QMessageBox msgBox;
  63. msgBox.setText("Incorrect time entry");
  64. msgBox.exec();
  65. tab_widget->setCurrentWidget(input_time);
  66. widget->setFocus();
  67. return false;
  68. }
  69. widget=input_geometry->validate();
  70. if(widget!=nullptr){
  71. QMessageBox msgBox;
  72. msgBox.setText("Incorrect geometry entry");
  73. msgBox.exec();
  74. tab_widget->setCurrentWidget(input_geometry);
  75. widget->setFocus();
  76. return false;
  77. }
  78. return true;
  79. }
  80. void
  81. QtInput::save(){
  82. if(validate()){
  83. QString filename=QFileDialog::getSaveFileName(this,"Save input","inputs/","QT input file (*.input)");
  84. if(not filename.isEmpty()){
  85. if(filename.indexOf(".input")==-1){
  86. filename.append(".input");
  87. }
  88. save_input(filename.toStdString());
  89. }
  90. }
  91. }
  92. void
  93. QtInput::run(){
  94. if(validate()){
  95. emit run_signal();
  96. }
  97. }
  98. void
  99. QtInput::save_input(string filename){
  100. fstream file;
  101. file.open(filename.c_str(),fstream::out|fstream::trunc|fstream::binary);
  102. input_physics->save(file);
  103. input_time->save(file);
  104. input_geometry->save(file);
  105. file.close();
  106. }
  107. void
  108. QtInput::cancel(){
  109. emit exit_signal();
  110. }
  111. void
  112. QtInput::load(string filename){
  113. fstream file;
  114. file.open(filename.c_str(),fstream::in|fstream::binary);
  115. input_physics->load(file);
  116. input_time->load(file);
  117. input_geometry->load(file);
  118. file.close();
  119. }
  120. void
  121. QtInput::changeTabIndex(int index){
  122. if(previous_index==2){
  123. updateGeometry();
  124. }
  125. previous_index=index;
  126. }
  127. void
  128. QtInput::updateGeometry(){
  129. QWidget* widget=input_geometry->validate();
  130. if(widget!=nullptr){
  131. QMessageBox msgBox;
  132. msgBox.setText("Incorrect geometry entry");
  133. msgBox.exec();
  134. tab_widget->setCurrentWidget(input_geometry);
  135. widget->setFocus();
  136. }
  137. else{
  138. input_view->updateGeometry();
  139. }
  140. }