mirror of
https://github.com/jorenchik/mdemory.git
synced 2026-03-22 00:26:21 +00:00
procedural mdem creation
This commit is contained in:
@@ -2,7 +2,6 @@
|
|||||||
#include <format>
|
#include <format>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <locale>
|
|
||||||
#include <qabstractbutton.h>
|
#include <qabstractbutton.h>
|
||||||
#include <qboxlayout.h>
|
#include <qboxlayout.h>
|
||||||
#include <qlabel.h>
|
#include <qlabel.h>
|
||||||
@@ -50,44 +49,45 @@ struct Page {
|
|||||||
int end;
|
int end;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Mdem {
|
struct Mdem {
|
||||||
public:
|
QWidget wMdem;
|
||||||
QWidget *wMdem;
|
QVBoxLayout vMdem;
|
||||||
QLabel *wFrontText;
|
QLabel wFrontText;
|
||||||
QWidget *wBack;
|
QWidget wFront;
|
||||||
|
QHBoxLayout hFront;
|
||||||
|
QWidget wBack;
|
||||||
|
QVBoxLayout hBack;
|
||||||
QVector<QLabel*> backLabels;
|
QVector<QLabel*> backLabels;
|
||||||
QToolButton *showButton;
|
QToolButton showButton;
|
||||||
int labelCount;
|
int labelCount;
|
||||||
|
};
|
||||||
|
|
||||||
void showBacklabels() {
|
void showBacklabels(Mdem *mdem) {
|
||||||
for (int i = 0; i < backLabels.size(); ++i) {
|
for (int i = 0; i < mdem->backLabels.size(); ++i) {
|
||||||
if (i < labelCount) {
|
if (i < mdem->labelCount) {
|
||||||
if (!backLabels[i]->isVisible()) {
|
if (!mdem->backLabels[i]->isVisible()) {
|
||||||
backLabels[i]->show();
|
mdem->backLabels[i]->show();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (backLabels[i]->isVisible()) {
|
if (mdem->backLabels[i]->isVisible()) {
|
||||||
backLabels[i]->hide();
|
mdem->backLabels[i]->hide();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Mdem() {
|
Mdem* makeMdem() {
|
||||||
wMdem = new QWidget();
|
auto mdem = new Mdem;
|
||||||
QVBoxLayout *vMdem = new QVBoxLayout();
|
mdem->wMdem.setLayout(&mdem->vMdem);
|
||||||
wMdem->setLayout(vMdem);
|
|
||||||
|
|
||||||
QString id = QString("mdem_%1").arg(1);
|
QString id = QString("mdem_%1").arg(1);
|
||||||
wMdem->setObjectName(id);
|
mdem->wMdem.setObjectName(id);
|
||||||
|
|
||||||
// Front
|
// Front
|
||||||
QWidget *wFront = new QWidget();
|
mdem->wFront.setMinimumHeight(60);
|
||||||
QHBoxLayout *hFront = new QHBoxLayout();
|
mdem->wFront.setLayout(&mdem->hFront);
|
||||||
wFront->setMinimumHeight(60);
|
mdem->wFront.setProperty("first", "true");
|
||||||
wFront->setLayout(hFront);
|
mdem->wMdem.setStyleSheet(QString(
|
||||||
wFront->setProperty("first", "true");
|
|
||||||
wMdem->setStyleSheet(QString(
|
|
||||||
"QWidget#%1 > QWidget {"
|
"QWidget#%1 > QWidget {"
|
||||||
"border-right: 1px solid gray;"
|
"border-right: 1px solid gray;"
|
||||||
"border-bottom: 1px solid gray;"
|
"border-bottom: 1px solid gray;"
|
||||||
@@ -99,48 +99,46 @@ public:
|
|||||||
).arg(id));
|
).arg(id));
|
||||||
|
|
||||||
// Add Front Content
|
// Add Front Content
|
||||||
wFrontText = new QLabel();
|
mdem->hFront.addWidget(&mdem->wFrontText);
|
||||||
hFront->addWidget(wFrontText);
|
mdem->hFront.addStretch(1);
|
||||||
hFront->addStretch(1);
|
|
||||||
|
|
||||||
showButton = new QToolButton();
|
mdem->showButton.setText("Show");
|
||||||
showButton->setText("Show");
|
mdem->hFront.addWidget(&mdem->showButton);
|
||||||
hFront->addWidget(showButton);
|
|
||||||
|
|
||||||
// Back
|
// Back
|
||||||
wBack = new QWidget();
|
|
||||||
QVBoxLayout *hBack = new QVBoxLayout();
|
QVBoxLayout *hBack = new QVBoxLayout();
|
||||||
wBack->setLayout(hBack);
|
mdem->wBack.setLayout(&mdem->hBack);
|
||||||
vMdem->addWidget(wBack);
|
mdem->vMdem.addWidget(&mdem->wBack);
|
||||||
|
|
||||||
// Add Back Content
|
// Add Back Content
|
||||||
for (int i = 0; i < 20; ++i) {
|
for (int i = 0; i < 20; ++i) {
|
||||||
|
// @Fix: back label pooling
|
||||||
QLabel *elBackText = new QLabel();
|
QLabel *elBackText = new QLabel();
|
||||||
hBack->addWidget(elBackText);
|
mdem->hBack.addWidget(elBackText);
|
||||||
backLabels.append(elBackText);
|
mdem->backLabels.append(elBackText);
|
||||||
}
|
}
|
||||||
|
|
||||||
vMdem->addWidget(wFront);
|
mdem->vMdem.addWidget(&mdem->wFront);
|
||||||
vMdem->addWidget(wBack);
|
mdem->vMdem.addWidget(&mdem->wBack);
|
||||||
vMdem->setContentsMargins(0, 0, 0, 0);
|
mdem->vMdem.setContentsMargins(0, 0, 0, 0);
|
||||||
vMdem->setSpacing(0);
|
mdem->vMdem.setSpacing(0);
|
||||||
|
|
||||||
wBack->hide();
|
mdem->wBack.hide();
|
||||||
wMdem->hide();
|
mdem->wMdem.hide();
|
||||||
|
|
||||||
// Connect button to toggle view
|
// Connect button to toggle view
|
||||||
QObject::connect(showButton, &QToolButton::clicked, [this]() {
|
QObject::connect(&mdem->showButton, &QToolButton::clicked, [mdem]() {
|
||||||
if (wBack->isVisible()) {
|
if (mdem->wBack.isVisible()) {
|
||||||
wBack->hide();
|
mdem->wBack.hide();
|
||||||
showButton->setText("Show");
|
mdem->showButton.setText("Show");
|
||||||
} else {
|
} else {
|
||||||
wBack->show();
|
mdem->wBack.show();
|
||||||
showButton->setText("Hide");
|
mdem->showButton.setText("Hide");
|
||||||
}
|
}
|
||||||
showBacklabels();
|
showBacklabels(mdem);
|
||||||
});
|
});
|
||||||
}
|
return mdem;
|
||||||
};
|
}
|
||||||
|
|
||||||
QString workingPath = "/home/jorenchik/Code/mdemory/memorybase";
|
QString workingPath = "/home/jorenchik/Code/mdemory/memorybase";
|
||||||
std::string currentPath = "";
|
std::string currentPath = "";
|
||||||
@@ -168,24 +166,24 @@ void CreateMdems(std::vector<Question*>& questions) {
|
|||||||
hMdemScroll->removeItem(mdemSpacer);
|
hMdemScroll->removeItem(mdemSpacer);
|
||||||
|
|
||||||
for (Mdem *mdem : mdems) {
|
for (Mdem *mdem : mdems) {
|
||||||
if (mdem->wMdem->isVisible()) {
|
if (mdem->wMdem.isVisible()) {
|
||||||
mdem->wMdem->hide();
|
mdem->wMdem.hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (questions.size() > mdems.size()) {
|
if (questions.size() > mdems.size()) {
|
||||||
auto amount = questions.size() - mdems.size();
|
auto amount = questions.size() - mdems.size();
|
||||||
for (size_t i = 0; i < amount; ++i) {
|
for (size_t i = 0; i < amount; ++i) {
|
||||||
auto mdem = new Mdem();
|
auto mdem = makeMdem();
|
||||||
mdems.append(mdem);
|
mdems.append(mdem);
|
||||||
hMdemScroll->addWidget(mdem->wMdem);
|
hMdemScroll->addWidget(&mdem->wMdem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (size_t i = 0; i < questions.size(); ++i) {
|
for (size_t i = 0; i < questions.size(); ++i) {
|
||||||
if (MultiElementQuestion* mw = dynamic_cast<MultiElementQuestion*>(questions[i])) {
|
if (MultiElementQuestion* mw = dynamic_cast<MultiElementQuestion*>(questions[i])) {
|
||||||
mdems[i]->wFrontText->setText(
|
mdems[i]->wFrontText.setText(
|
||||||
QString::fromStdString(mw->QuestionText)
|
QString::fromStdString(mw->QuestionText)
|
||||||
);
|
);
|
||||||
auto choices = mw->Choices;
|
auto choices = mw->Choices;
|
||||||
@@ -212,12 +210,12 @@ void CreateMdems(std::vector<Question*>& questions) {
|
|||||||
auto label = new QLabel();
|
auto label = new QLabel();
|
||||||
label->setText(QString::fromStdString(answer));
|
label->setText(QString::fromStdString(answer));
|
||||||
mdems[i]->backLabels.push_back(label);
|
mdems[i]->backLabels.push_back(label);
|
||||||
mdems[i]->wBack->layout()->addWidget(label);
|
mdems[i]->wBack.layout()->addWidget(label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mdems[i]->labelCount = choices.size();
|
mdems[i]->labelCount = choices.size();
|
||||||
} else if (GroupQuestion* mw = dynamic_cast<GroupQuestion*>(questions[i])) {
|
} else if (GroupQuestion* mw = dynamic_cast<GroupQuestion*>(questions[i])) {
|
||||||
mdems[i]->wFrontText->setText(
|
mdems[i]->wFrontText.setText(
|
||||||
QString::fromStdString(mw->QuestionText)
|
QString::fromStdString(mw->QuestionText)
|
||||||
);
|
);
|
||||||
auto groups = mw->Groups;
|
auto groups = mw->Groups;
|
||||||
@@ -236,13 +234,13 @@ void CreateMdems(std::vector<Question*>& questions) {
|
|||||||
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);
|
mdems[i]->backLabels.push_back(label);
|
||||||
mdems[i]->wBack->layout()->addWidget(label);
|
mdems[i]->wBack.layout()->addWidget(label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mdems[i]->labelCount = elements.size();
|
mdems[i]->labelCount = elements.size();
|
||||||
}
|
}
|
||||||
if (!mdems[i]->wMdem->isVisible()) {
|
if (!mdems[i]->wMdem.isVisible()) {
|
||||||
mdems[i]->wMdem->show();
|
mdems[i]->wMdem.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,9 +279,9 @@ void SwitchPage(int pageIdx) {
|
|||||||
|
|
||||||
// Hide widgets in mdems
|
// Hide widgets in mdems
|
||||||
for (auto& mdem : mdems) {
|
for (auto& mdem : mdems) {
|
||||||
if (mdem->wBack->isVisible()) {
|
if (mdem->wBack.isVisible()) {
|
||||||
mdem->wBack->hide();
|
mdem->wBack.hide();
|
||||||
mdem->showButton->setText("Show");
|
mdem->showButton.setText("Show");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,6 +357,7 @@ ErrorView *makeErrorView() {
|
|||||||
"}"
|
"}"
|
||||||
);
|
);
|
||||||
errorView->layout.addWidget(&errorView->label);
|
errorView->layout.addWidget(&errorView->label);
|
||||||
|
errorView->label.setWordWrap(true);
|
||||||
return errorView;
|
return errorView;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -445,8 +444,8 @@ void loadMdem() {
|
|||||||
|
|
||||||
hMdemScroll->addItem(mdemSpacer);
|
hMdemScroll->addItem(mdemSpacer);
|
||||||
for (auto mdem: mdems) {
|
for (auto mdem: mdems) {
|
||||||
if (mdem->wMdem->isVisible()) {
|
if (mdem->wMdem.isVisible()) {
|
||||||
mdem->wMdem->hide();
|
mdem->wMdem.hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user