From 505d0006ddf27572ad86ff20a2245c0930e2b595 Mon Sep 17 00:00:00 2001 From: jorenchik Date: Sun, 6 Oct 2024 12:21:22 +0300 Subject: [PATCH] procedural mdem creation --- src/cpp/qtapp/main.cpp | 211 ++++++++++++++++++++--------------------- 1 file changed, 105 insertions(+), 106 deletions(-) diff --git a/src/cpp/qtapp/main.cpp b/src/cpp/qtapp/main.cpp index 1eb5a7a..01103d0 100644 --- a/src/cpp/qtapp/main.cpp +++ b/src/cpp/qtapp/main.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include #include #include @@ -50,98 +49,97 @@ struct Page { int end; }; -class Mdem { -public: - QWidget *wMdem; - QLabel *wFrontText; - QWidget *wBack; - QVector backLabels; - QToolButton *showButton; - int labelCount; - - void showBacklabels() { - for (int i = 0; i < backLabels.size(); ++i) { - if (i < labelCount) { - if (!backLabels[i]->isVisible()) { - backLabels[i]->show(); - } - } else { - if (backLabels[i]->isVisible()) { - backLabels[i]->hide(); - } - } - } - } - - Mdem() { - wMdem = new QWidget(); - QVBoxLayout *vMdem = new QVBoxLayout(); - wMdem->setLayout(vMdem); - - QString id = QString("mdem_%1").arg(1); - 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( - "QWidget#%1 > QWidget {" - "border-right: 1px solid gray;" - "border-bottom: 1px solid gray;" - "border-left: 1px solid gray;" - "} " - "QWidget#%1 > QWidget[first=\"true\"] {" - "border-top: 1px solid gray;" - "}" - ).arg(id)); - - // Add Front Content - wFrontText = new QLabel(); - hFront->addWidget(wFrontText); - hFront->addStretch(1); - - showButton = new QToolButton(); - showButton->setText("Show"); - hFront->addWidget(showButton); - - // Back - wBack = new QWidget(); - QVBoxLayout *hBack = new QVBoxLayout(); - wBack->setLayout(hBack); - vMdem->addWidget(wBack); - - // Add Back Content - for (int i = 0; i < 20; ++i) { - QLabel *elBackText = new QLabel(); - hBack->addWidget(elBackText); - backLabels.append(elBackText); - } - - vMdem->addWidget(wFront); - vMdem->addWidget(wBack); - vMdem->setContentsMargins(0, 0, 0, 0); - vMdem->setSpacing(0); - - wBack->hide(); - wMdem->hide(); - - // Connect button to toggle view - QObject::connect(showButton, &QToolButton::clicked, [this]() { - if (wBack->isVisible()) { - wBack->hide(); - showButton->setText("Show"); - } else { - wBack->show(); - showButton->setText("Hide"); - } - showBacklabels(); - }); - } +struct Mdem { + QWidget wMdem; + QVBoxLayout vMdem; + QLabel wFrontText; + QWidget wFront; + QHBoxLayout hFront; + QWidget wBack; + QVBoxLayout hBack; + QVector backLabels; + QToolButton showButton; + int labelCount; }; +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 (mdem->backLabels[i]->isVisible()) { + mdem->backLabels[i]->hide(); + } + } + } +} + +Mdem* makeMdem() { + auto mdem = new Mdem; + mdem->wMdem.setLayout(&mdem->vMdem); + + QString id = QString("mdem_%1").arg(1); + mdem->wMdem.setObjectName(id); + + // Front + 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;" + "border-left: 1px solid gray;" + "} " + "QWidget#%1 > QWidget[first=\"true\"] {" + "border-top: 1px solid gray;" + "}" + ).arg(id)); + + // Add Front Content + mdem->hFront.addWidget(&mdem->wFrontText); + mdem->hFront.addStretch(1); + + mdem->showButton.setText("Show"); + mdem->hFront.addWidget(&mdem->showButton); + + // Back + QVBoxLayout *hBack = new QVBoxLayout(); + 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(); + mdem->hBack.addWidget(elBackText); + mdem->backLabels.append(elBackText); + } + + mdem->vMdem.addWidget(&mdem->wFront); + mdem->vMdem.addWidget(&mdem->wBack); + mdem->vMdem.setContentsMargins(0, 0, 0, 0); + mdem->vMdem.setSpacing(0); + + mdem->wBack.hide(); + mdem->wMdem.hide(); + + // Connect button to toggle view + QObject::connect(&mdem->showButton, &QToolButton::clicked, [mdem]() { + if (mdem->wBack.isVisible()) { + mdem->wBack.hide(); + mdem->showButton.setText("Show"); + } else { + mdem->wBack.show(); + mdem->showButton.setText("Hide"); + } + showBacklabels(mdem); + }); + return mdem; +} + QString workingPath = "/home/jorenchik/Code/mdemory/memorybase"; std::string currentPath = ""; QList mdems = QList(); @@ -168,24 +166,24 @@ void CreateMdems(std::vector& 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(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& 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(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& 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(); } } }