geometry.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "qt/input/geometry.hpp"
  2. QtInputGeometry::QtInputGeometry(QtInputData* m):QWidget(){
  3. data=m;
  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_max_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();
  10. nX_input=new QLineEdit();
  11. nZ_max_input=new QLineEdit();
  12. depth_input=new QLineEdit();
  13. // loadGeometry();
  14. //Labels
  15. lX_label->setTextFormat(Qt::RichText);
  16. nX_label->setTextFormat(Qt::RichText);
  17. nZ_max_label->setTextFormat(Qt::RichText);
  18. depth_label->setTextFormat(Qt::RichText);
  19. //Button
  20. refresh_button=new QPushButton("Refresh");
  21. //Main layout
  22. int vspace=20;
  23. main_layout->addWidget(lX_label);
  24. main_layout->addWidget(lX_input);
  25. main_layout->addSpacing(vspace);
  26. main_layout->addWidget(nX_label);
  27. main_layout->addWidget(nX_input);
  28. main_layout->addSpacing(vspace);
  29. main_layout->addWidget(depth_label);
  30. main_layout->addWidget(depth_input);
  31. main_layout->addSpacing(vspace);
  32. main_layout->addWidget(nZ_max_label);
  33. main_layout->addWidget(nZ_max_input);
  34. main_layout->addSpacing(2*vspace);
  35. main_layout->addWidget(refresh_button);
  36. main_layout->addStretch();
  37. setLayout(main_layout);
  38. //Validators
  39. positive_double_validator=new QDoubleValidator;
  40. positive_double_validator->setBottom(0);
  41. positive_int_validator=new QIntValidator;
  42. positive_int_validator->setBottom(1);
  43. positive_int_validator->setTop(QtInputData::nmax_Qt);
  44. lX_input->setValidator(positive_double_validator);
  45. nX_input->setValidator(positive_int_validator);
  46. depth_input->setValidator(positive_double_validator);
  47. nZ_max_input->setValidator(positive_int_validator);
  48. connect(refresh_button,&QPushButton::clicked,this,&QtInputGeometry::emitGeometryChanged);
  49. getGeometry();
  50. }
  51. void
  52. QtInputGeometry::emitGeometryChanged(){
  53. QWidget* widget=validate();
  54. if(widget!=nullptr){
  55. QMessageBox msgBox;
  56. msgBox.setText("Incorrect geometry entry");
  57. msgBox.exec();
  58. widget->setFocus();
  59. }
  60. else{
  61. setGeometry();
  62. emit geometryChanged();
  63. }
  64. }
  65. QWidget*
  66. QtInputGeometry::validate(){
  67. if(not lX_input->hasAcceptableInput()) return lX_input;
  68. if(not nX_input->hasAcceptableInput()) return nX_input;
  69. if(not depth_input->hasAcceptableInput()) return depth_input;
  70. if(not nZ_max_input->hasAcceptableInput()) return nZ_max_input;
  71. return nullptr;
  72. }
  73. void
  74. QtInputGeometry::getGeometry(){
  75. lX_input->setText(QString::number(data->geometry.lX));
  76. nX_input->setText(QString::number(data->geometry.nX));
  77. depth_input->setText(QString::number(data->depth));
  78. nZ_max_input->setText(QString::number(data->nZ_max));
  79. }
  80. void
  81. QtInputGeometry::setGeometry(){
  82. data->geometry.lX=lX_input->text().toDouble();
  83. data->geometry.nX=nX_input->text().toULong();
  84. data->depth=depth_input->text().toDouble();
  85. data->nZ_max=nZ_max_input->text().toULong();
  86. }