mirror of
https://github.com/jorenchik/mdemory.git
synced 2026-03-22 00:26:21 +00:00
editing a question
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include <iostream>
|
||||
#include <qabstractbutton.h>
|
||||
#include <qboxlayout.h>
|
||||
#include <qdialog.h>
|
||||
#include <qlabel.h>
|
||||
#include <qlayoutitem.h>
|
||||
#include <qmainwindow.h>
|
||||
@@ -100,6 +101,9 @@ QSpacerItem *mdemSpacer;
|
||||
std::vector<ErrorView*> errorPool;
|
||||
std::vector<ErrorView*> errorViews;
|
||||
|
||||
// Editor
|
||||
Mdem* editMdem;
|
||||
|
||||
// Pagination
|
||||
int currentPage = -1;
|
||||
std::vector<Page> pages;
|
||||
@@ -111,6 +115,7 @@ QToolButton* nextButton;
|
||||
QLabel* paginationLabel;
|
||||
|
||||
// Mdem actions
|
||||
QToolButton *add;
|
||||
QToolButton *save;
|
||||
QToolButton *load;
|
||||
QToolButton *practice;
|
||||
@@ -220,6 +225,13 @@ Mdem* makeMdem() {
|
||||
mdem->hFront.addStretch(1);
|
||||
|
||||
mdem->editButton.setText("Edit");
|
||||
QObject::connect(
|
||||
&mdem->editButton,
|
||||
&QToolButton::clicked,
|
||||
[mdem](bool checked) {
|
||||
editMdem = mdem;
|
||||
}
|
||||
);
|
||||
mdem->hFront.addWidget(&mdem->editButton);
|
||||
|
||||
QObject::connect(&mdem->editButton, &QToolButton::clicked, [mdem]() {
|
||||
@@ -271,6 +283,66 @@ Mdem* makeMdem() {
|
||||
return mdem;
|
||||
}
|
||||
|
||||
void setupMdem(Mdem *mdem, Question *question) {
|
||||
if (MultiElementQuestion* mw = dynamic_cast<MultiElementQuestion*>(question)) {
|
||||
mdem->wFrontText.setText(
|
||||
QString::fromStdString(mw->QuestionText)
|
||||
);
|
||||
auto choices = mw->Choices;
|
||||
for (size_t k = 0; k < choices.size(); ++k) {
|
||||
auto answer = choices[k].Answer;
|
||||
switch (mw->type) {
|
||||
case MultiElementType::Order:
|
||||
answer = std::format("{}. {}", k + 1, answer);
|
||||
break;
|
||||
case MultiElementType::MultiChoice:
|
||||
if (choices[k].IsCorrect) {
|
||||
answer = std::format("+ {}", answer);
|
||||
} else {
|
||||
answer = std::format("- {}", answer);
|
||||
}
|
||||
break;
|
||||
case MultiElementType::Regular:
|
||||
answer = std::format("- {}", answer);
|
||||
break;
|
||||
}
|
||||
if (k < mdem->backLabels.size()) {
|
||||
mdem->backLabels[k]->setText(QString::fromStdString(answer));
|
||||
} else {
|
||||
auto label = new QLabel();
|
||||
label->setText(QString::fromStdString(answer));
|
||||
mdem->backLabels.push_back(label);
|
||||
mdem->wBack.layout()->addWidget(label);
|
||||
}
|
||||
}
|
||||
mdem->labelCount = choices.size();
|
||||
} else if (GroupQuestion* mw = dynamic_cast<GroupQuestion*>(question)) {
|
||||
mdem->wFrontText.setText(
|
||||
QString::fromStdString(mw->QuestionText)
|
||||
);
|
||||
auto groups = mw->Groups;
|
||||
std::vector<std::string> elements;
|
||||
for (size_t k = 0; k < groups.size(); ++k) {
|
||||
auto answer = groups[k].name;
|
||||
elements.push_back(std::format("- {}:", answer));
|
||||
for (size_t l = 0; l < groups[k].elements.size(); ++l) {
|
||||
elements.push_back(std::format(" - {}", groups[k].elements[l]));
|
||||
}
|
||||
}
|
||||
for (size_t k = 0; k < elements.size(); ++k) {
|
||||
if (k < mdem->backLabels.size()) {
|
||||
mdem->backLabels[k]->setText(QString::fromStdString(elements[k]));
|
||||
} else {
|
||||
auto label = new QLabel();
|
||||
label->setText(QString::fromStdString(elements[k]));
|
||||
mdem->backLabels.push_back(label);
|
||||
mdem->wBack.layout()->addWidget(label);
|
||||
}
|
||||
}
|
||||
mdem->labelCount = elements.size();
|
||||
}
|
||||
}
|
||||
|
||||
void CreateMdems(std::vector<Question*>& questions) {
|
||||
hMdemScroll->removeItem(mdemSpacer);
|
||||
|
||||
@@ -289,66 +361,9 @@ void CreateMdems(std::vector<Question*>& questions) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (size_t i = 0; i < questions.size(); ++i) {
|
||||
mdems[i]->question = questions[i];
|
||||
if (MultiElementQuestion* mw = dynamic_cast<MultiElementQuestion*>(questions[i])) {
|
||||
mdems[i]->wFrontText.setText(
|
||||
QString::fromStdString(mw->QuestionText)
|
||||
);
|
||||
auto choices = mw->Choices;
|
||||
for (size_t k = 0; k < choices.size(); ++k) {
|
||||
auto answer = choices[k].Answer;
|
||||
switch (mw->type) {
|
||||
case MultiElementType::Order:
|
||||
answer = std::format("{}. {}", k + 1, answer);
|
||||
break;
|
||||
case MultiElementType::MultiChoice:
|
||||
if (choices[k].IsCorrect) {
|
||||
answer = std::format("+ {}", answer);
|
||||
} else {
|
||||
answer = std::format("- {}", answer);
|
||||
}
|
||||
break;
|
||||
case MultiElementType::Regular:
|
||||
answer = std::format("- {}", answer);
|
||||
break;
|
||||
}
|
||||
if (k < mdems[i]->backLabels.size()) {
|
||||
mdems[i]->backLabels[k]->setText(QString::fromStdString(answer));
|
||||
} else {
|
||||
auto label = new QLabel();
|
||||
label->setText(QString::fromStdString(answer));
|
||||
mdems[i]->backLabels.push_back(label);
|
||||
mdems[i]->wBack.layout()->addWidget(label);
|
||||
}
|
||||
}
|
||||
mdems[i]->labelCount = choices.size();
|
||||
} else if (GroupQuestion* mw = dynamic_cast<GroupQuestion*>(questions[i])) {
|
||||
mdems[i]->wFrontText.setText(
|
||||
QString::fromStdString(mw->QuestionText)
|
||||
);
|
||||
auto groups = mw->Groups;
|
||||
std::vector<std::string> elements;
|
||||
for (size_t k = 0; k < groups.size(); ++k) {
|
||||
auto answer = groups[k].name;
|
||||
elements.push_back(std::format("- {}:", answer));
|
||||
for (size_t l = 0; l < groups[k].elements.size(); ++l) {
|
||||
elements.push_back(std::format(" - {}", groups[k].elements[l]));
|
||||
}
|
||||
}
|
||||
for (size_t k = 0; k < elements.size(); ++k) {
|
||||
if (k < mdems[i]->backLabels.size()) {
|
||||
mdems[i]->backLabels[k]->setText(QString::fromStdString(elements[k]));
|
||||
} else {
|
||||
auto label = new QLabel();
|
||||
label->setText(QString::fromStdString(elements[k]));
|
||||
mdems[i]->backLabels.push_back(label);
|
||||
mdems[i]->wBack.layout()->addWidget(label);
|
||||
}
|
||||
}
|
||||
mdems[i]->labelCount = elements.size();
|
||||
}
|
||||
setupMdem(mdems[i], questions[i]);
|
||||
if (!mdems[i]->wMdem.isVisible()) {
|
||||
mdems[i]->wMdem.show();
|
||||
}
|
||||
@@ -582,6 +597,33 @@ void pickDirectory(QString directory) {
|
||||
reloadMdem();
|
||||
}
|
||||
|
||||
void setupEditorSave(bool checked) {
|
||||
auto res = transpile(editor->text().toStdString(), true);
|
||||
if (res.error.length() > 0) {
|
||||
QMessageBox::information(
|
||||
nullptr,
|
||||
"Editing error",
|
||||
QString::fromStdString(res.error)
|
||||
);
|
||||
} else {
|
||||
if (res.value.questions.size() <= 0) {
|
||||
QMessageBox::information(
|
||||
nullptr,
|
||||
"Editing error",
|
||||
"There are no questions in your input."
|
||||
);
|
||||
} else if (res.value.questions.size() == 1) {
|
||||
setupMdem(editMdem, res.value.questions[0]);
|
||||
showBacklabels(editMdem);
|
||||
} else {
|
||||
QMessageBox::information(
|
||||
nullptr,
|
||||
"Editing error",
|
||||
"There are more than question in your input. Please enter one."
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
QApplication app(argc, argv);
|
||||
@@ -627,6 +669,11 @@ int main(int argc, char *argv[]) {
|
||||
auto save = new QToolButton;
|
||||
editorButtons->setLayout(buttonLayout);
|
||||
save->setText(QString::fromStdString("Save"));
|
||||
QObject::connect(
|
||||
save,
|
||||
&QToolButton::clicked,
|
||||
setupEditorSave
|
||||
);
|
||||
buttonLayout->addWidget(save);
|
||||
|
||||
vlEditor->addWidget(editor);
|
||||
@@ -694,13 +741,18 @@ int main(int argc, char *argv[]) {
|
||||
hTop->addWidget(deckListLabel);
|
||||
hTop->addStretch(1);
|
||||
|
||||
add = new QToolButton;
|
||||
save = new QToolButton;
|
||||
load = new QToolButton;
|
||||
practice = new QToolButton;
|
||||
|
||||
hTop->addWidget(add);
|
||||
hTop->addWidget(save);
|
||||
hTop->addWidget(load);
|
||||
hTop->addWidget(practice);
|
||||
QObject::connect(add, &QToolButton::clicked, []() {
|
||||
// MARK1
|
||||
});
|
||||
|
||||
// Buttons
|
||||
save->setText("Save");
|
||||
|
||||
Reference in New Issue
Block a user