input_geometry.cpp 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "input_geometry.hpp"
  2. QtInputGeometry::QtInputGeometry(Geometry* _geometry):QWidget(){
  3. geometry=_geometry;
  4. main_layout=new QVBoxLayout;
  5. lX_label=new QLabel("Horizontal lenght of the domain (l<sub>X</sub>)");
  6. nX_label=new QLabel("Number of horizontal steps (n<sub>X</sub>)");
  7. nZ_label=new QLabel("Number of vertical steps (n<sub>Z</sub>)");
  8. depth_label=new QLabel("Maximal height between h<sub>soil</sub> and h<sub>bot</sub> (depth)");
  9. lX_input=new QLineEdit(QString::number(geometry->lX));
  10. nX_input=new QLineEdit(QString::number(geometry->nX));
  11. nZ_input=new QLineEdit(QString::number(geometry->nZ_max));
  12. depth_input=new QLineEdit(QString::number(geometry->depth));
  13. //Labels
  14. lX_label->setTextFormat(Qt::RichText);
  15. nX_label->setTextFormat(Qt::RichText);
  16. nZ_label->setTextFormat(Qt::RichText);
  17. depth_label->setTextFormat(Qt::RichText);
  18. //Button
  19. refresh_button=new QPushButton("Refresh");
  20. //Main layout
  21. int vspace=20;
  22. main_layout->addWidget(lX_label);
  23. main_layout->addWidget(lX_input);
  24. main_layout->addSpacing(vspace);
  25. main_layout->addWidget(nX_label);
  26. main_layout->addWidget(nX_input);
  27. main_layout->addSpacing(vspace);
  28. main_layout->addWidget(depth_label);
  29. main_layout->addWidget(depth_input);
  30. main_layout->addSpacing(vspace);
  31. main_layout->addWidget(nZ_label);
  32. main_layout->addWidget(nZ_input);
  33. main_layout->addSpacing(2*vspace);
  34. main_layout->addWidget(refresh_button);
  35. main_layout->addStretch();
  36. setLayout(main_layout);
  37. //Validators
  38. positive_double_validator=new QDoubleValidator;
  39. positive_double_validator->setBottom(0);
  40. positive_int_validator=new QIntValidator;
  41. positive_int_validator->setBottom(1);
  42. lX_input->setValidator(positive_double_validator);
  43. nX_input->setValidator(positive_int_validator);
  44. depth_input->setValidator(positive_double_validator);
  45. nZ_input->setValidator(positive_int_validator);
  46. connect(refresh_button,&QPushButton::clicked,this,&QtInputGeometry::emitGeometryChanged);
  47. }
  48. QWidget*
  49. QtInputGeometry::validate(){
  50. if(not lX_input->hasAcceptableInput()) return lX_input;
  51. if(not nX_input->hasAcceptableInput()) return nX_input;
  52. if(not depth_input->hasAcceptableInput()) return depth_input;
  53. if(not nZ_input->hasAcceptableInput()) return nZ_input;
  54. return nullptr;
  55. }
  56. void
  57. QtInputGeometry::save(fstream& file){
  58. double d;
  59. size_t n;
  60. d=lX_input->text().toDouble();
  61. file.write((char*)&d,sizeof(double));
  62. n=nX_input->text().toULong();
  63. file.write((char*)&n,sizeof(size_t));
  64. d=depth_input->text().toDouble();
  65. file.write((char*)&d,sizeof(double));
  66. n=nZ_input->text().toULong();
  67. file.write((char*)&n,sizeof(size_t));
  68. }
  69. void
  70. QtInputGeometry::load(fstream& file){
  71. double d;
  72. size_t n;
  73. file.read((char*)&d,sizeof(double));
  74. lX_input->setText(QString::number(d));
  75. file.read((char*)&n,sizeof(size_t));
  76. nX_input->setText(QString::number(n));
  77. file.read((char*)&d,sizeof(double));
  78. depth_input->setText(QString::number(d));
  79. file.read((char*)&n,sizeof(size_t));
  80. nZ_input->setText(QString::number(n));
  81. }