input_geometry.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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("Maximal 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. positive_int_validator->setTop(geometry->nmax_Qt);
  43. lX_input->setValidator(positive_double_validator);
  44. nX_input->setValidator(positive_int_validator);
  45. depth_input->setValidator(positive_double_validator);
  46. nZ_input->setValidator(positive_int_validator);
  47. connect(refresh_button,&QPushButton::clicked,this,&QtInputGeometry::emitGeometryChanged);
  48. }
  49. QWidget*
  50. QtInputGeometry::validate(){
  51. if(not lX_input->hasAcceptableInput()) return lX_input;
  52. if(not nX_input->hasAcceptableInput()) return nX_input;
  53. if(not depth_input->hasAcceptableInput()) return depth_input;
  54. if(not nZ_input->hasAcceptableInput()) return nZ_input;
  55. return nullptr;
  56. }
  57. void
  58. QtInputGeometry::save(fstream& file){
  59. double d;
  60. size_t n;
  61. d=lX_input->text().toDouble();
  62. file.write((char*)&d,sizeof(double));
  63. n=nX_input->text().toULong();
  64. file.write((char*)&n,sizeof(size_t));
  65. d=depth_input->text().toDouble();
  66. file.write((char*)&d,sizeof(double));
  67. n=nZ_input->text().toULong();
  68. file.write((char*)&n,sizeof(size_t));
  69. }
  70. void
  71. QtInputGeometry::load(fstream& file){
  72. double d;
  73. size_t n;
  74. file.read((char*)&d,sizeof(double));
  75. lX_input->setText(QString::number(d));
  76. file.read((char*)&n,sizeof(size_t));
  77. nX_input->setText(QString::number(n));
  78. file.read((char*)&d,sizeof(double));
  79. depth_input->setText(QString::number(d));
  80. file.read((char*)&n,sizeof(size_t));
  81. nZ_input->setText(QString::number(n));
  82. }