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 <iostream>
|
||||||
#include <qabstractbutton.h>
|
#include <qabstractbutton.h>
|
||||||
#include <qboxlayout.h>
|
#include <qboxlayout.h>
|
||||||
|
#include <qdialog.h>
|
||||||
#include <qlabel.h>
|
#include <qlabel.h>
|
||||||
#include <qlayoutitem.h>
|
#include <qlayoutitem.h>
|
||||||
#include <qmainwindow.h>
|
#include <qmainwindow.h>
|
||||||
@@ -100,6 +101,9 @@ QSpacerItem *mdemSpacer;
|
|||||||
std::vector<ErrorView*> errorPool;
|
std::vector<ErrorView*> errorPool;
|
||||||
std::vector<ErrorView*> errorViews;
|
std::vector<ErrorView*> errorViews;
|
||||||
|
|
||||||
|
// Editor
|
||||||
|
Mdem* editMdem;
|
||||||
|
|
||||||
// Pagination
|
// Pagination
|
||||||
int currentPage = -1;
|
int currentPage = -1;
|
||||||
std::vector<Page> pages;
|
std::vector<Page> pages;
|
||||||
@@ -111,6 +115,7 @@ QToolButton* nextButton;
|
|||||||
QLabel* paginationLabel;
|
QLabel* paginationLabel;
|
||||||
|
|
||||||
// Mdem actions
|
// Mdem actions
|
||||||
|
QToolButton *add;
|
||||||
QToolButton *save;
|
QToolButton *save;
|
||||||
QToolButton *load;
|
QToolButton *load;
|
||||||
QToolButton *practice;
|
QToolButton *practice;
|
||||||
@@ -220,6 +225,13 @@ Mdem* makeMdem() {
|
|||||||
mdem->hFront.addStretch(1);
|
mdem->hFront.addStretch(1);
|
||||||
|
|
||||||
mdem->editButton.setText("Edit");
|
mdem->editButton.setText("Edit");
|
||||||
|
QObject::connect(
|
||||||
|
&mdem->editButton,
|
||||||
|
&QToolButton::clicked,
|
||||||
|
[mdem](bool checked) {
|
||||||
|
editMdem = mdem;
|
||||||
|
}
|
||||||
|
);
|
||||||
mdem->hFront.addWidget(&mdem->editButton);
|
mdem->hFront.addWidget(&mdem->editButton);
|
||||||
|
|
||||||
QObject::connect(&mdem->editButton, &QToolButton::clicked, [mdem]() {
|
QObject::connect(&mdem->editButton, &QToolButton::clicked, [mdem]() {
|
||||||
@@ -271,29 +283,9 @@ Mdem* makeMdem() {
|
|||||||
return mdem;
|
return mdem;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateMdems(std::vector<Question*>& questions) {
|
void setupMdem(Mdem *mdem, Question *question) {
|
||||||
hMdemScroll->removeItem(mdemSpacer);
|
if (MultiElementQuestion* mw = dynamic_cast<MultiElementQuestion*>(question)) {
|
||||||
|
mdem->wFrontText.setText(
|
||||||
for (Mdem *mdem : mdems) {
|
|
||||||
if (mdem->wMdem.isVisible()) {
|
|
||||||
mdem->wMdem.hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (questions.size() > mdems.size()) {
|
|
||||||
auto amount = questions.size() - mdems.size();
|
|
||||||
for (size_t i = 0; i < amount; ++i) {
|
|
||||||
auto mdem = makeMdem();
|
|
||||||
mdems.append(mdem);
|
|
||||||
hMdemScroll->addWidget(&mdem->wMdem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
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)
|
QString::fromStdString(mw->QuestionText)
|
||||||
);
|
);
|
||||||
auto choices = mw->Choices;
|
auto choices = mw->Choices;
|
||||||
@@ -314,18 +306,18 @@ void CreateMdems(std::vector<Question*>& questions) {
|
|||||||
answer = std::format("- {}", answer);
|
answer = std::format("- {}", answer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (k < mdems[i]->backLabels.size()) {
|
if (k < mdem->backLabels.size()) {
|
||||||
mdems[i]->backLabels[k]->setText(QString::fromStdString(answer));
|
mdem->backLabels[k]->setText(QString::fromStdString(answer));
|
||||||
} else {
|
} else {
|
||||||
auto label = new QLabel();
|
auto label = new QLabel();
|
||||||
label->setText(QString::fromStdString(answer));
|
label->setText(QString::fromStdString(answer));
|
||||||
mdems[i]->backLabels.push_back(label);
|
mdem->backLabels.push_back(label);
|
||||||
mdems[i]->wBack.layout()->addWidget(label);
|
mdem->wBack.layout()->addWidget(label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mdems[i]->labelCount = choices.size();
|
mdem->labelCount = choices.size();
|
||||||
} else if (GroupQuestion* mw = dynamic_cast<GroupQuestion*>(questions[i])) {
|
} else if (GroupQuestion* mw = dynamic_cast<GroupQuestion*>(question)) {
|
||||||
mdems[i]->wFrontText.setText(
|
mdem->wFrontText.setText(
|
||||||
QString::fromStdString(mw->QuestionText)
|
QString::fromStdString(mw->QuestionText)
|
||||||
);
|
);
|
||||||
auto groups = mw->Groups;
|
auto groups = mw->Groups;
|
||||||
@@ -338,17 +330,40 @@ void CreateMdems(std::vector<Question*>& questions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (size_t k = 0; k < elements.size(); ++k) {
|
for (size_t k = 0; k < elements.size(); ++k) {
|
||||||
if (k < mdems[i]->backLabels.size()) {
|
if (k < mdem->backLabels.size()) {
|
||||||
mdems[i]->backLabels[k]->setText(QString::fromStdString(elements[k]));
|
mdem->backLabels[k]->setText(QString::fromStdString(elements[k]));
|
||||||
} else {
|
} else {
|
||||||
auto label = new QLabel();
|
auto label = new QLabel();
|
||||||
label->setText(QString::fromStdString(elements[k]));
|
label->setText(QString::fromStdString(elements[k]));
|
||||||
mdems[i]->backLabels.push_back(label);
|
mdem->backLabels.push_back(label);
|
||||||
mdems[i]->wBack.layout()->addWidget(label);
|
mdem->wBack.layout()->addWidget(label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mdems[i]->labelCount = elements.size();
|
mdem->labelCount = elements.size();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CreateMdems(std::vector<Question*>& questions) {
|
||||||
|
hMdemScroll->removeItem(mdemSpacer);
|
||||||
|
|
||||||
|
for (Mdem *mdem : mdems) {
|
||||||
|
if (mdem->wMdem.isVisible()) {
|
||||||
|
mdem->wMdem.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (questions.size() > mdems.size()) {
|
||||||
|
auto amount = questions.size() - mdems.size();
|
||||||
|
for (size_t i = 0; i < amount; ++i) {
|
||||||
|
auto mdem = makeMdem();
|
||||||
|
mdems.append(mdem);
|
||||||
|
hMdemScroll->addWidget(&mdem->wMdem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < questions.size(); ++i) {
|
||||||
|
mdems[i]->question = questions[i];
|
||||||
|
setupMdem(mdems[i], questions[i]);
|
||||||
if (!mdems[i]->wMdem.isVisible()) {
|
if (!mdems[i]->wMdem.isVisible()) {
|
||||||
mdems[i]->wMdem.show();
|
mdems[i]->wMdem.show();
|
||||||
}
|
}
|
||||||
@@ -582,6 +597,33 @@ void pickDirectory(QString directory) {
|
|||||||
reloadMdem();
|
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[]) {
|
int main(int argc, char *argv[]) {
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
@@ -627,6 +669,11 @@ int main(int argc, char *argv[]) {
|
|||||||
auto save = new QToolButton;
|
auto save = new QToolButton;
|
||||||
editorButtons->setLayout(buttonLayout);
|
editorButtons->setLayout(buttonLayout);
|
||||||
save->setText(QString::fromStdString("Save"));
|
save->setText(QString::fromStdString("Save"));
|
||||||
|
QObject::connect(
|
||||||
|
save,
|
||||||
|
&QToolButton::clicked,
|
||||||
|
setupEditorSave
|
||||||
|
);
|
||||||
buttonLayout->addWidget(save);
|
buttonLayout->addWidget(save);
|
||||||
|
|
||||||
vlEditor->addWidget(editor);
|
vlEditor->addWidget(editor);
|
||||||
@@ -694,13 +741,18 @@ int main(int argc, char *argv[]) {
|
|||||||
hTop->addWidget(deckListLabel);
|
hTop->addWidget(deckListLabel);
|
||||||
hTop->addStretch(1);
|
hTop->addStretch(1);
|
||||||
|
|
||||||
|
add = new QToolButton;
|
||||||
save = new QToolButton;
|
save = new QToolButton;
|
||||||
load = new QToolButton;
|
load = new QToolButton;
|
||||||
practice = new QToolButton;
|
practice = new QToolButton;
|
||||||
|
|
||||||
|
hTop->addWidget(add);
|
||||||
hTop->addWidget(save);
|
hTop->addWidget(save);
|
||||||
hTop->addWidget(load);
|
hTop->addWidget(load);
|
||||||
hTop->addWidget(practice);
|
hTop->addWidget(practice);
|
||||||
|
QObject::connect(add, &QToolButton::clicked, []() {
|
||||||
|
// MARK1
|
||||||
|
});
|
||||||
|
|
||||||
// Buttons
|
// Buttons
|
||||||
save->setText("Save");
|
save->setText("Save");
|
||||||
|
|||||||
Reference in New Issue
Block a user