settingspage.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include "settingspage.h"
  2. #include "appevent.h"
  3. #include "qglobal.h"
  4. #include "qjsonobject.h"
  5. #include "qlineedit.h"
  6. #include "qpainter.h"
  7. #include "qspinbox.h"
  8. #include "tmodel.h"
  9. #include "widgets/examsmodel.h"
  10. #include "widgets/pagination.h"
  11. #include <QCheckBox>
  12. #include <QComboBox>
  13. #include <QDialog>
  14. #include <QHeaderView>
  15. #include <QLabel>
  16. #include <QLineEdit>
  17. #include <QStatusBar>
  18. #include <QStyledItemDelegate>
  19. #include <QTableView>
  20. #include <QJsonArray>
  21. #include <layoutbuilder.h>
  22. #include "cwf/sqlquery.h"
  23. #include <cwf/constants.h>
  24. #include <cwf/cppwebapplication.h>
  25. #include <cwf/filter.h>
  26. #include <cwf/sqldatabasestorage.h>
  27. #include "teachertr.h"
  28. static CWF::SqlDatabaseStorage storage("QSQLITE", "localhost", "data.db", "", "");
  29. SettingsPage::SettingsPage(QWidget *parent)
  30. : QWidget{parent}
  31. {
  32. examContentDirLineEdit = new QLineEdit;
  33. windowXSpinBox = new QSpinBox;
  34. windowYSpinBox = new QSpinBox;
  35. windowXSpinBox->setRange(0, 3000);
  36. windowYSpinBox->setRange(0, 3000);
  37. examAnswerDirLineEdit = new QLineEdit;
  38. lockMaxTimeSpinBox = new QSpinBox;
  39. lockMaxTimeSpinBox->setRange(0, 999999999);
  40. lockMaxTimeSpinBox->setToolTip(tr("Setting to 0 means unlimited time"));
  41. // 教师端
  42. answerDirLineEdit = new QLineEdit;
  43. using namespace Layouting;
  44. auto student = Group{title(tr("student configuration")),
  45. Form{tr("exam content dir:"),
  46. examContentDirLineEdit,
  47. br,
  48. tr("window x:"),
  49. windowXSpinBox,
  50. tr("window y:"),
  51. windowYSpinBox,
  52. st,
  53. br,
  54. tr("exam answer dir:"),
  55. examAnswerDirLineEdit,
  56. br,
  57. tr("lock max time"),
  58. lockMaxTimeSpinBox,
  59. tr("s")}};
  60. auto teacher = Group{title(tr("teacher configuration")),
  61. Form{tr("answer dir:"), answerDirLineEdit}};
  62. Column{student, teacher}.attachTo(this);
  63. // init config
  64. const QVariant examContentDir = AppEvent::instance()->configValue("examContentDir");
  65. const QVariant windowX = AppEvent::instance()->configValue("windowX");
  66. const QVariant windowY = AppEvent::instance()->configValue("windowY");
  67. const QVariant examAnswerDir = AppEvent::instance()->configValue("examAnswerDir");
  68. const QVariant lockMaxTime = AppEvent::instance()->configValue("lockMaxTime");
  69. examContentDirLineEdit->setText(examContentDir.toString());
  70. windowXSpinBox->setValue(windowX.toInt());
  71. windowYSpinBox->setValue(windowY.toInt());
  72. examAnswerDirLineEdit->setText(examAnswerDir.toString());
  73. lockMaxTimeSpinBox->setValue(lockMaxTime.toInt());
  74. // 教师端
  75. const QVariant answerDir = AppEvent::instance()->configValue("answerDir");
  76. answerDirLineEdit->setText(answerDir.toString());
  77. // 学生端
  78. connect(examContentDirLineEdit, &QLineEdit::textChanged, [this](const QString &) {
  79. const QString &test = examContentDirLineEdit->text();
  80. AppEvent::instance()->setConfigValue("examContentDir", test);
  81. });
  82. connect(windowXSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [](int value) {
  83. AppEvent::instance()->setConfigValue("windowX", value);
  84. });
  85. connect(windowYSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [](int value) {
  86. AppEvent::instance()->setConfigValue("windowY", value);
  87. });
  88. connect(examAnswerDirLineEdit, &QLineEdit::textChanged, [this](const QString &) {
  89. const QString &test = examAnswerDirLineEdit->text();
  90. AppEvent::instance()->setConfigValue("examAnswerDir", test);
  91. });
  92. connect(lockMaxTimeSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [](int value) {
  93. AppEvent::instance()->setConfigValue("lockMaxTime", value);
  94. });
  95. // 教师端
  96. connect(answerDirLineEdit, &QLineEdit::textChanged, [this](const QString &) {
  97. const QString &test = answerDirLineEdit->text();
  98. AppEvent::instance()->setConfigValue("answerDir", test);
  99. });
  100. }