From 95854dda5ae11667b2ea2f25ac5920d5010ac2e3 Mon Sep 17 00:00:00 2001 From: jorenchik Date: Sun, 27 Oct 2024 13:26:45 +0200 Subject: [PATCH] per page config param --- src/include/mdemList.h | 28 ++++++++++++++-------------- src/qtapp/mdemList.cpp | 40 +++++++++++++++++++++++----------------- src/qtapp/settings.cpp | 23 ++++++++++++++++------- 3 files changed, 53 insertions(+), 38 deletions(-) diff --git a/src/include/mdemList.h b/src/include/mdemList.h index 5d75041..2b0526e 100644 --- a/src/include/mdemList.h +++ b/src/include/mdemList.h @@ -20,19 +20,19 @@ struct MdemBuffer { }; struct Mdem { - QWidget wMdem; - QVBoxLayout vMdem; - QLabel wFrontText; - QWidget wFront; - QHBoxLayout hFront; - QWidget wBack; - QVBoxLayout hBack; - QToolButton editButton; - QToolButton deleteButton; - QToolButton toggleVisibility; - int labelCount; - QVector backLabels; - Question *question; + QWidget wMdem; + QVBoxLayout vMdem; + QLabel wFrontText; + QWidget wFront; + QHBoxLayout hFront; + QWidget wBack; + QVBoxLayout hBack; + QToolButton editButton; + QToolButton deleteButton; + QToolButton toggleVisibility; + int labelCount; + std::vector backLabels; + Question *question; }; struct ErrorView { @@ -70,6 +70,7 @@ void saveMdem(); void updateMdemInfo(std::string filename = "", bool isChanged = true); QMainWindow *initMdemListWindow(); +#define SETTING_PER_PAGE "perPage" #define SETTING_MEMORYBASE "defaultMemorybase" #define SETTING_TIMEZONE "timezone" #define SETTING_CHARACTER_WRAP "characterWrap" @@ -83,5 +84,4 @@ QMainWindow *initMdemListWindow(); #define TEXT_LG = 20 #define ERROR_POOL_CHUNK 50 #define DISTANCE 2 -#define PER_PAGE 8 #define MDEM_BACKGROUND "#F7F7F7" diff --git a/src/qtapp/mdemList.cpp b/src/qtapp/mdemList.cpp index f204bff..ecb8f30 100644 --- a/src/qtapp/mdemList.cpp +++ b/src/qtapp/mdemList.cpp @@ -85,6 +85,7 @@ QVBoxLayout *hMdemScroll; QSpacerItem *mdemSpacer; ErrorView *errorView; Pagination *pagination; +int perPage; // Editor QsciScintilla *editor; @@ -189,15 +190,16 @@ std::string outputMdem(std::vector questions, time_t time = 0) { void makePages() { pagination->pages.clear(); auto len = currentMdemBuffer->questions.size(); - auto pageAmount = len / PER_PAGE; - if (len % PER_PAGE != 0) { + perPage = settings->value(SETTING_PER_PAGE).toInt(); + auto pageAmount = len / perPage; + if (len % perPage != 0) { pageAmount += 1; } for (size_t i = 0; i < pageAmount; i++) { - size_t startingIndex = PER_PAGE * i ; - size_t amount = PER_PAGE; - if (i == currentMdemBuffer->questions.size() / PER_PAGE) { - amount = currentMdemBuffer->questions.size() % PER_PAGE; + size_t startingIndex = perPage * i ; + size_t amount = perPage; + if (i == currentMdemBuffer->questions.size() / perPage) { + amount = currentMdemBuffer->questions.size() % perPage; } pagination->pages.push_back( Page{startingIndex, startingIndex + amount} @@ -420,12 +422,14 @@ void CreateMdems(std::vector& questions) { } } - if (questions.size() > mdems.size()) { - auto amount = questions.size() - mdems.size(); - for (size_t i = 0; i < amount; ++i) { - auto mdem = makeMdem(); - mdems.push_back(mdem); - hMdemScroll->addWidget(&mdem->wMdem); + perPage = settings->value(SETTING_PER_PAGE).toInt(); + if (perPage > mdems.size()) { + for (size_t i = mdems.size(); i < perPage; i++) { + if (i >= mdems.size()) { + auto mdem = makeMdem(); + mdems.push_back(mdem); + hMdemScroll->addWidget(&mdem->wMdem); + } } } @@ -462,7 +466,7 @@ void switchPage(int pageIdx) { snprintf(buffer, sizeof(buffer), "Page: %d", pageIdx + 1); pagination->paginationLabel.setText(buffer); - // Hide widgets in mdems + // Adjust mdem amount, hide widgets in mdems for (auto& mdem : mdems) { if (mdem->wBack.isVisible()) { mdem->wBack.hide(); @@ -1042,6 +1046,7 @@ QMainWindow *initMdemListWindow() { auto wPagination = new QWidget(); auto hPagination = new QHBoxLayout(); + wPagination->setLayout(hPagination); pagination->firstButton.setText(QString::fromStdString("<<")); @@ -1062,7 +1067,8 @@ QMainWindow *initMdemListWindow() { } }); - for (size_t i = 0; i < PER_PAGE; i++) { + perPage = settings->value(SETTING_PER_PAGE).toInt(); + for (size_t i = 0; i < perPage; i++) { auto elButton = new QToolButton(); elButton->setText(QString("%1").arg(i+1)); hPagination->addWidget(elButton); @@ -1107,12 +1113,12 @@ QMainWindow *initMdemListWindow() { }); }; - addShortcut("Ctrl+S", []() { - saveMdem(); - }); addShortcut("Ctrl+,", [settingsWindow]() { settingsWindow->show(); }); + addShortcut("Ctrl+S", [toolbar]() { + toolbar->btnSave.click(); + }); addShortcut("Ctrl+P", [toolbar]() { toolbar->btnPractice.click(); }); diff --git a/src/qtapp/settings.cpp b/src/qtapp/settings.cpp index 661621f..49eed9a 100644 --- a/src/qtapp/settings.cpp +++ b/src/qtapp/settings.cpp @@ -104,6 +104,10 @@ QWidget *initSettings () { } }); + auto perPage = new QSpinBox; + perPage->setRange(5, 50); + formLayout->addRow("Mdems per page [5-50]:", perPage); + auto characterWrap = new QSpinBox; characterWrap->setRange(30, 150); formLayout->addRow("Character wrap in code gen [30-150]:", characterWrap); @@ -143,6 +147,7 @@ QWidget *initSettings () { // @Improve: validate setting values auto setSettingInputs = [ + perPage, mbaseInput, characterWrap, timezone, @@ -153,6 +158,7 @@ QWidget *initSettings () { debug, showTimes ]() { + perPage->setValue(settings->value(SETTING_PER_PAGE).toInt()); mbaseInput->setText(settings->value(SETTING_MEMORYBASE).toString()); characterWrap->setValue(settings->value(SETTING_CHARACTER_WRAP).toInt()); timezone->setValue(settings->value(SETTING_TIMEZONE).toInt()); @@ -214,17 +220,19 @@ QWidget *initSettings () { } }; - attachChangeListener(mbaseInput, SETTING_MEMORYBASE); + attachChangeListener(perPage, SETTING_PER_PAGE); + attachChangeListener(mbaseInput, SETTING_MEMORYBASE); attachChangeListener(characterWrap, SETTING_CHARACTER_WRAP); - attachChangeListener(timezone, SETTING_TIMEZONE); + attachChangeListener(timezone, SETTING_TIMEZONE); attachChangeListener(notRemembered, SETTING_NOT_REMEMBERED); - attachChangeListener(hard, SETTING_HARD); - attachChangeListener(medium, SETTING_MEDIUM); - attachChangeListener(easy, SETTING_EASY); - attachChangeListener(debug, SETTING_DEBUG); - attachChangeListener(showTimes, SETTING_SHOW_TIMES); + attachChangeListener(hard, SETTING_HARD); + attachChangeListener(medium, SETTING_MEDIUM); + attachChangeListener(easy, SETTING_EASY); + attachChangeListener(debug, SETTING_DEBUG); + attachChangeListener(showTimes, SETTING_SHOW_TIMES); auto saveSettings = [ + perPage, mbaseInput, characterWrap, timezone, @@ -236,6 +244,7 @@ QWidget *initSettings () { showTimes, updateSettingsLabel ]() { + settings->setValue(SETTING_PER_PAGE, perPage->value()); settings->setValue(SETTING_MEMORYBASE, mbaseInput->text()); settings->setValue(SETTING_CHARACTER_WRAP, characterWrap->value()); settings->setValue(SETTING_TIMEZONE, timezone->value());