initial_state.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "qt/input/initial_state.hpp"
  2. QtInputInitialState::QtInputInitialState(QtInputData* d):QWidget(){
  3. data=d;
  4. main_layout=new QVBoxLayout;
  5. tanks_layout=new QVBoxLayout;
  6. button_layout=new QHBoxLayout;
  7. tanks_widget=new QWidget;
  8. button_widget=new QWidget;
  9. scroll_area=new QScrollArea;
  10. add_button=new QPushButton("Add tank");
  11. refresh_button=new QPushButton("Refresh");
  12. tanks_widget->setLayout(tanks_layout);
  13. scroll_area->setWidget(tanks_widget);
  14. scroll_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  15. scroll_area->setWidgetResizable(true);
  16. main_layout->addWidget(scroll_area);
  17. button_layout->addWidget(add_button);
  18. button_layout->addWidget(refresh_button);
  19. button_widget->setLayout(button_layout);
  20. main_layout->addWidget(button_widget);
  21. setLayout(main_layout);
  22. connect(add_button,&QPushButton::clicked,this,&QtInputInitialState::addTank);
  23. connect(refresh_button,&QPushButton::clicked,this,&QtInputInitialState::updateInitialState);
  24. }
  25. void
  26. QtInputInitialState::addTank(){
  27. QtInputTank* input_tank=new QtInputTank(data);
  28. tanks_layout->addWidget(input_tank);
  29. connect(input_tank,&QtInputTank::remove,this,&QtInputInitialState::removeTank);
  30. emit initialStateChanged();
  31. }
  32. void
  33. QtInputInitialState::addExistingTank(Tank* tank){
  34. QtInputTank* input_tank=new QtInputTank(data,tank);
  35. tanks_layout->addWidget(input_tank);
  36. connect(input_tank,&QtInputTank::remove,this,&QtInputInitialState::removeTank);
  37. }
  38. void
  39. QtInputInitialState::removeTank(QtInputTank* input_tank){
  40. disconnect(input_tank,nullptr,nullptr,nullptr);
  41. tanks_layout->removeWidget(input_tank);
  42. delete input_tank;
  43. emit initialStateChanged();
  44. }
  45. QWidget*
  46. QtInputInitialState::validate(){
  47. for(size_t i=0;i<tanks_layout->count();++i){
  48. QtInputTank* tank_input=(QtInputTank*)tanks_layout->itemAt(i)->widget();
  49. QWidget* widget=tank_input->validate();
  50. if(widget!=nullptr) return widget;
  51. }
  52. return nullptr;
  53. }
  54. void
  55. QtInputInitialState::updateInitialState(){
  56. QWidget* widget=validate();
  57. if(widget!=nullptr){
  58. QMessageBox msgBox;
  59. msgBox.setText("Incorrect tank entry");
  60. msgBox.exec();
  61. widget->setFocus();
  62. }
  63. emit initialStateChanged();
  64. }
  65. void
  66. QtInputInitialState::save(fstream& file){
  67. double d;
  68. size_t n;
  69. //d=lX_input->text().toDouble();
  70. //file.write((char*)&d,sizeof(double));
  71. }
  72. void
  73. QtInputInitialState::getTanks(){
  74. for(auto it=data->initial_state->tanks.begin();it!=data->initial_state->tanks.end();++it){
  75. addExistingTank(*it);
  76. }
  77. }