show answer in group questions and order question

This commit is contained in:
jorenchik
2024-11-03 16:03:30 +02:00
parent 217eebcefc
commit 4da44d71ee
2 changed files with 108 additions and 37 deletions

View File

@@ -206,7 +206,8 @@ QVBoxLayout *vButtonBox;
QWidget *actionButtons; QWidget *actionButtons;
QHBoxLayout *hButtons; QHBoxLayout *hButtons;
QSpacerItem *leftSpacer; QSpacerItem *leftSpacer;
QToolButton *btnTriggerAnswer; QToolButton *btnCheck;
QToolButton *btnShowAnswer;
QSpacerItem *rightSpacer; QSpacerItem *rightSpacer;
QToolButton *btnNext; QToolButton *btnNext;
@@ -260,15 +261,16 @@ void releaseItem(QStandardItem** item) {
(*item) = nullptr; (*item) = nullptr;
} }
void releaseAllItems() { auto releaseAllInModel(QStandardItemModel *model) {
auto releaseAllInModel = [](QStandardItemModel *model) {
auto itemCount = model->rowCount(); auto itemCount = model->rowCount();
for (size_t i = 0; i < itemCount; ++i) { for (size_t i = 0; i < itemCount; ++i) {
auto item = model->item(0); auto item = model->item(0);
model->takeRow(item->row()); model->takeRow(item->row());
releaseItem(&item); releaseItem(&item);
} }
}; };
void releaseAllItems() {
releaseAllInModel(multiChoiceModel); releaseAllInModel(multiChoiceModel);
releaseAllInModel(groupItemModel); releaseAllInModel(groupItemModel);
releaseAllInModel(orderModel); releaseAllInModel(orderModel);
@@ -288,7 +290,8 @@ void hideQuestionElements() {
btnHard->hide(); btnHard->hide();
btnMedium->hide(); btnMedium->hide();
btnEasy->hide(); btnEasy->hide();
btnTriggerAnswer->hide(); btnCheck->hide();
btnShowAnswer->hide();
} }
void showFeedBackButtons() { void showFeedBackButtons() {
@@ -316,19 +319,22 @@ void setupAnswerQuestion(MultiElementQuestion *question) {
auto checkAnswerClicked = []() { auto checkAnswerClicked = []() {
answerText->show(); answerText->show();
btnTriggerAnswer->hide(); btnCheck->hide();
if (practiceAlgoritm == SPACED) { if (practiceAlgoritm == SPACED) {
showFeedBackButtons(); showFeedBackButtons();
} }
}; };
// Rāda tikai atbildes parādīšanas opciju.
QObject::connect( QObject::connect(
btnTriggerAnswer, btnShowAnswer,
&QToolButton::clicked, &QToolButton::clicked,
[checkAnswerClicked](bool checked) { [checkAnswerClicked](bool checked) {
checkAnswerClicked(); checkAnswerClicked();
btnShowAnswer->hide();
} }
); );
btnTriggerAnswer->show(); btnShowAnswer->show();
} }
void setupOrderQuestion(MultiElementQuestion *question) { void setupOrderQuestion(MultiElementQuestion *question) {
@@ -339,17 +345,22 @@ void setupOrderQuestion(MultiElementQuestion *question) {
orderModel->clear(); orderModel->clear();
auto shuffledAnswers = question->choices; auto shuffledAnswers = question->choices;
std::shuffle(shuffledAnswers.begin(), shuffledAnswers.end(), rng); std::shuffle(shuffledAnswers.begin(), shuffledAnswers.end(), rng);
for (auto answerEl: shuffledAnswers) {
auto *item = acquireItem(); auto addChoice = [](QStandardItem *item, std::string text) {
item->setData(NEUTRAL, Qt::UserRole + 1);
item->setData(QVariant(), Qt::CheckStateRole); item->setData(QVariant(), Qt::CheckStateRole);
item->setCheckable(false); item->setCheckable(false);
item->setText(QString::fromStdString(answerEl.answer)); item->setText(QString::fromStdString(text));
orderModel->appendRow(item); orderModel->appendRow(item);
};
for (auto answerEl: shuffledAnswers) {
auto *item = acquireItem();
addChoice(item, answerEl.answer);
item->setData(NEUTRAL, Qt::UserRole + 1);
} }
orderList->show(); orderList->show();
QObject::connect( QObject::connect(
btnTriggerAnswer, btnCheck,
&QToolButton::clicked, &QToolButton::clicked,
[question](bool checked) { [question](bool checked) {
for (size_t i = 0; i < orderModel->rowCount(); ++i) { for (size_t i = 0; i < orderModel->rowCount(); ++i) {
@@ -363,14 +374,30 @@ void setupOrderQuestion(MultiElementQuestion *question) {
} }
orderList->update(); orderList->update();
} }
btnTriggerAnswer->hide(); btnCheck->hide();
btnShowAnswer->show();
if (practiceAlgoritm == SPACED) { if (practiceAlgoritm == SPACED) {
showFeedBackButtons(); showFeedBackButtons();
} }
} }
); );
btnTriggerAnswer->show(); btnCheck->show();
QObject::connect(
btnShowAnswer,
&QToolButton::clicked,
[question](bool checked) {
for (size_t i = 0; i < question->choices.size(); ++i) {
auto item = orderModel->item(i, 0);
auto choice = question->choices[i];
item->setData(CORRECT, Qt::UserRole + 1);
item->setText(QString::fromStdString(choice.answer));
orderList->update();
}
btnShowAnswer->hide();
}
);
} }
void setupMultiChoiceQuestion(MultiElementQuestion *question) { void setupMultiChoiceQuestion(MultiElementQuestion *question) {
@@ -391,7 +418,7 @@ void setupMultiChoiceQuestion(MultiElementQuestion *question) {
multiChoiceList->show(); multiChoiceList->show();
QObject::connect( QObject::connect(
btnTriggerAnswer, btnCheck,
&QToolButton::clicked, &QToolButton::clicked,
[question](bool checked) { [question](bool checked) {
for (size_t i = 0; i < multiChoiceModel->rowCount(); ++i) { for (size_t i = 0; i < multiChoiceModel->rowCount(); ++i) {
@@ -404,13 +431,13 @@ void setupMultiChoiceQuestion(MultiElementQuestion *question) {
} }
multiChoiceList->update(); multiChoiceList->update();
} }
btnTriggerAnswer->hide(); btnCheck->hide();
if (practiceAlgoritm == SPACED) { if (practiceAlgoritm == SPACED) {
showFeedBackButtons(); showFeedBackButtons();
} }
} }
); );
btnTriggerAnswer->show(); btnCheck->show();
} }
void setupGroupQuestion(GroupQuestion *question) { void setupGroupQuestion(GroupQuestion *question) {
@@ -451,6 +478,9 @@ void setupGroupQuestion(GroupQuestion *question) {
return groupView; return groupView;
}; };
/*auto getOrMakeGroup = [](int i) {*/
/*};*/
for (int k = 0; k < groupViews.size(); k++) { for (int k = 0; k < groupViews.size(); k++) {
groupViews[k]->widget.hide(); groupViews[k]->widget.hide();
} }
@@ -463,7 +493,9 @@ void setupGroupQuestion(GroupQuestion *question) {
groupViews.push_back(groupView); groupViews.push_back(groupView);
} }
groupView->label.setText( groupView->label.setText(
QString::fromStdString(question->groups[i].name) QString::fromStdString(
question->groups[i].name
)
); );
vGroups->addWidget(&groupView->widget); vGroups->addWidget(&groupView->widget);
groupView->widget.show(); groupView->widget.show();
@@ -471,7 +503,7 @@ void setupGroupQuestion(GroupQuestion *question) {
vGroups->addItem(groupSpacer); vGroups->addItem(groupSpacer);
QObject::connect( QObject::connect(
btnTriggerAnswer, btnCheck,
&QToolButton::clicked, &QToolButton::clicked,
[question](bool checked) { [question](bool checked) {
for (size_t i = 0; i < groupItemModel->rowCount(); ++i) { for (size_t i = 0; i < groupItemModel->rowCount(); ++i) {
@@ -499,19 +531,50 @@ void setupGroupQuestion(GroupQuestion *question) {
} }
groupView->itemList.update(); groupView->itemList.update();
} }
btnTriggerAnswer->hide(); btnCheck->hide();
btnShowAnswer->show();
if (practiceAlgoritm == SPACED) {
showFeedBackButtons();
}
}
);
btnCheck->show();
QObject::connect(
btnShowAnswer,
&QToolButton::clicked,
[question](bool checked) {
// TODO: release everything and add the correct things to the groups
releaseAllInModel(groupItemModel);
for (size_t i = 0; i < groupViews.size(); i++) {
auto groupView = groupViews[i];
auto group = question->groups[i];
releaseAllInModel(&groupView->itemModel);
for (int j = 0; j < group.elements.size(); ++j) {
auto *qItem = acquireItem();
auto groupElement = group.elements[j];
qItem->setData(CORRECT, Qt::UserRole + 1);
qItem->setCheckable(false);
qItem->setData(QVariant(), Qt::CheckStateRole);
qItem->setText(QString::fromStdString(groupElement));
groupView->itemModel.appendRow(qItem);
}
}
btnShowAnswer->hide();
if (practiceAlgoritm == SPACED) { if (practiceAlgoritm == SPACED) {
showFeedBackButtons(); showFeedBackButtons();
} }
} }
); );
btnTriggerAnswer->show();
} }
void setupQuestion(Question *question) { void setupQuestion(Question *question) {
hideQuestionElements(); hideQuestionElements();
releaseAllItems(); releaseAllItems();
QObject::disconnect(btnTriggerAnswer, 0, 0, 0); QObject::disconnect(btnShowAnswer, 0, 0, 0);
QObject::disconnect(btnCheck, 0, 0, 0);
if (auto *q = dynamic_cast<MultiElementQuestion*>(question)) { if (auto *q = dynamic_cast<MultiElementQuestion*>(question)) {
switch (q->type) { switch (q->type) {
case MultiElementType::Order: case MultiElementType::Order:
@@ -760,7 +823,7 @@ QMainWindow *initTrainWindow() {
leftSpacer = new QSpacerItem(50, 50, QSizePolicy::Expanding, QSizePolicy::Minimum); leftSpacer = new QSpacerItem(50, 50, QSizePolicy::Expanding, QSizePolicy::Minimum);
btnTriggerAnswer = new QToolButton(); btnCheck = new QToolButton();
btnNotRemembered = new QToolButton(); btnNotRemembered = new QToolButton();
QObject::connect(btnNotRemembered, &QToolButton::clicked, []() { QObject::connect(btnNotRemembered, &QToolButton::clicked, []() {
QString key = SETTING_NOT_REMEMBERED; QString key = SETTING_NOT_REMEMBERED;
@@ -822,18 +885,24 @@ QMainWindow *initTrainWindow() {
} }
}); });
btnTriggerAnswer = new QToolButton(); btnCheck = new QToolButton();
QShortcut* shortcutCheck = new QShortcut(QKeySequence("Return"), trainWindow);
QObject::connect(shortcutCheck, &QShortcut::activated, []() {
btnCheck->click();
});
btnShowAnswer = new QToolButton();
QShortcut* shortcutShowAnswer = new QShortcut(QKeySequence("Return"), trainWindow); QShortcut* shortcutShowAnswer = new QShortcut(QKeySequence("Return"), trainWindow);
QObject::connect(shortcutShowAnswer, &QShortcut::activated, []() { QObject::connect(shortcutShowAnswer, &QShortcut::activated, []() {
btnTriggerAnswer->click(); btnShowAnswer->click();
}); });
rightSpacer = new QSpacerItem(50, 50, QSizePolicy::Expanding, QSizePolicy::Minimum); rightSpacer = new QSpacerItem(50, 50, QSizePolicy::Expanding, QSizePolicy::Minimum);
btnNext = new QToolButton(); btnNext = new QToolButton();
hButtons->addItem(leftSpacer); hButtons->addItem(leftSpacer);
hButtons->addWidget(btnTriggerAnswer); hButtons->addWidget(btnCheck);
hButtons->addWidget(btnShowAnswer);
hButtons->addWidget(btnNotRemembered); hButtons->addWidget(btnNotRemembered);
hButtons->addWidget(btnHard); hButtons->addWidget(btnHard);
hButtons->addWidget(btnMedium); hButtons->addWidget(btnMedium);
@@ -844,8 +913,10 @@ QMainWindow *initTrainWindow() {
vButtonBox->addWidget(actionButtons); vButtonBox->addWidget(actionButtons);
actionButtons->setLayout(hButtons); actionButtons->setLayout(hButtons);
btnTriggerAnswer->setText("Parādīt atbildi"); btnCheck->setText("rbaudīt atbildi");
btnTriggerAnswer->hide(); btnShowAnswer->setText("Parādīt atbildi");
btnCheck->hide();
btnShowAnswer->hide();
btnNext->setText("Nākamais"); btnNext->setText("Nākamais");
QObject::connect(btnNext, &QToolButton::clicked, []() { QObject::connect(btnNext, &QToolButton::clicked, []() {

View File

@@ -10,7 +10,7 @@
std::string readFile(const std::string& filePath) { std::string readFile(const std::string& filePath) {
std::ifstream file(filePath); std::ifstream file(filePath);
if (!file.is_open()) { if (!file.is_open()) {
throw std::runtime_error("Cannot open file: " + filePath); throw std::runtime_error("Nevar atvērt failu: " + filePath);
} }
std::string content; std::string content;
@@ -33,7 +33,7 @@ int main(int argc, char* argv[]) {
debug = true; debug = true;
showTimes = true; showTimes = true;
} else { } else {
std::cout << std::format("Unrecognized option: {}", option) << std::endl; std::cout << std::format("Neatpazīta opcija: {}", option) << std::endl;
return 1; return 1;
} }
filePath = argv[2]; filePath = argv[2];
@@ -48,7 +48,7 @@ int main(int argc, char* argv[]) {
std::string fileContent = readFile(filePath); std::string fileContent = readFile(filePath);
end = std::chrono::high_resolution_clock::now(); end = std::chrono::high_resolution_clock::now();
if (showTimes) { if (showTimes) {
std::cout << showTime("I/O time") << std::endl; std::cout << showTime("I/O laiks") << std::endl;
} }
auto res = transpile(fileContent); auto res = transpile(fileContent);