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