Implemented plural-test printing
This commit is contained in:
parent
2570d5d5b5
commit
f6c2da5edc
5 changed files with 78 additions and 50 deletions
|
@ -154,30 +154,6 @@ void CheckableTestModel::printTableTo(QTextCursor &cursor) const
|
||||||
|
|
||||||
QTextTable *table = cursor.insertTable(m_tests.size() * 2, 13, tableFormat);
|
QTextTable *table = cursor.insertTable(m_tests.size() * 2, 13, tableFormat);
|
||||||
|
|
||||||
const char *emptyBox = "\u2610";
|
|
||||||
//const char *checkBox = "\u2611";
|
|
||||||
const char *checkBox = "x";
|
|
||||||
|
|
||||||
auto insertText = [&table](int row, int column, const QString &text) {
|
|
||||||
auto cell = table->cellAt(row, column);
|
|
||||||
auto textCursor = cell.firstCursorPosition();
|
|
||||||
|
|
||||||
auto blockFormat = textCursor.blockFormat();
|
|
||||||
blockFormat.setAlignment(Qt::AlignCenter);
|
|
||||||
textCursor.setBlockFormat(blockFormat);
|
|
||||||
|
|
||||||
auto cellFormat = cell.format();
|
|
||||||
cellFormat.setVerticalAlignment(QTextCharFormat::AlignMiddle);
|
|
||||||
cell.setFormat(cellFormat);
|
|
||||||
|
|
||||||
auto charFormat = textCursor.charFormat();
|
|
||||||
charFormat.setVerticalAlignment(QTextCharFormat::AlignMiddle);
|
|
||||||
charFormat.setFontPointSize(8);
|
|
||||||
textCursor.setCharFormat(charFormat);
|
|
||||||
|
|
||||||
textCursor.insertText(text);
|
|
||||||
};
|
|
||||||
|
|
||||||
int currentRow = 0;
|
int currentRow = 0;
|
||||||
for (const auto &test : m_tests)
|
for (const auto &test : m_tests)
|
||||||
{
|
{
|
||||||
|
@ -185,18 +161,18 @@ void CheckableTestModel::printTableTo(QTextCursor &cursor) const
|
||||||
|
|
||||||
int currentColumn = 0;
|
int currentColumn = 0;
|
||||||
|
|
||||||
insertText(currentRow, currentColumn, test.name());
|
setCellText(*table, currentRow, currentColumn, test.name());
|
||||||
currentColumn++;
|
currentColumn++;
|
||||||
|
|
||||||
for (const auto &item : test.items())
|
for (const auto &item : test.items())
|
||||||
{
|
{
|
||||||
insertText(currentRow, currentColumn, item.getText().c_str());
|
setCellText(*table, currentRow, currentColumn, item.getText().c_str());
|
||||||
insertText(currentRow + 1, currentColumn, item.isChecked() ? checkBox : emptyBox);
|
setCellChecked(*table, currentRow + 1, currentColumn, item.isChecked());
|
||||||
|
|
||||||
currentColumn++;
|
currentColumn++;
|
||||||
}
|
}
|
||||||
|
|
||||||
insertText(currentRow + 1, 12, QString::number(test.getPoints()));
|
setCellText(*table, currentRow + 1, 12, QString::number(test.getPoints()));
|
||||||
|
|
||||||
currentRow += 2;
|
currentRow += 2;
|
||||||
}
|
}
|
||||||
|
@ -215,28 +191,34 @@ void CheckableTestModel::printSummaryTo(QTextCursor &cursor) const
|
||||||
|
|
||||||
QTextTable *table = cursor.insertTable(1, 4, tableFormat);
|
QTextTable *table = cursor.insertTable(1, 4, tableFormat);
|
||||||
|
|
||||||
auto insertText = [&table](int row, int column, const QString &text) {
|
setCellText(*table, 0, 1, "Rohwertpunkte Total:");
|
||||||
auto cell = table->cellAt(row, column);
|
setCellText(*table, 0, 3, QString::number(getPoints()));
|
||||||
auto textCursor = cell.firstCursorPosition();
|
}
|
||||||
|
|
||||||
auto blockFormat = textCursor.blockFormat();
|
void CheckableTestModel::setCellText(QTextTable &table, int row, int column, const QString &text)
|
||||||
blockFormat.setAlignment(Qt::AlignCenter);
|
{
|
||||||
textCursor.setBlockFormat(blockFormat);
|
auto cell = table.cellAt(row, column);
|
||||||
|
auto textCursor = cell.firstCursorPosition();
|
||||||
|
|
||||||
auto cellFormat = cell.format();
|
auto blockFormat = textCursor.blockFormat();
|
||||||
cellFormat.setVerticalAlignment(QTextCharFormat::AlignMiddle);
|
blockFormat.setAlignment(Qt::AlignCenter);
|
||||||
cell.setFormat(cellFormat);
|
textCursor.setBlockFormat(blockFormat);
|
||||||
|
|
||||||
auto charFormat = textCursor.charFormat();
|
auto cellFormat = cell.format();
|
||||||
charFormat.setVerticalAlignment(QTextCharFormat::AlignMiddle);
|
cellFormat.setVerticalAlignment(QTextCharFormat::AlignMiddle);
|
||||||
charFormat.setFontPointSize(8);
|
cell.setFormat(cellFormat);
|
||||||
textCursor.setCharFormat(charFormat);
|
|
||||||
|
|
||||||
textCursor.insertText(text);
|
auto charFormat = textCursor.charFormat();
|
||||||
};
|
charFormat.setVerticalAlignment(QTextCharFormat::AlignMiddle);
|
||||||
|
charFormat.setFontPointSize(8);
|
||||||
|
textCursor.setCharFormat(charFormat);
|
||||||
|
|
||||||
insertText(0, 1, "Rohwertpunkte Total:");
|
textCursor.insertText(text);
|
||||||
insertText(0, 3, QString::number(getPoints()));
|
}
|
||||||
|
|
||||||
|
void CheckableTestModel::setCellChecked(QTextTable &table, int row, int column, bool check)
|
||||||
|
{
|
||||||
|
setCellText(table, row, column, check ? "x" : "\u2610");
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckableItems &CheckableTestModel::getItems(const QModelIndex &index)
|
CheckableItems &CheckableTestModel::getItems(const QModelIndex &index)
|
||||||
|
@ -283,6 +265,7 @@ const CheckableItem &CheckableTestModel::getItem(const QModelIndex &index) const
|
||||||
|
|
||||||
unsigned int CheckableTestModel::getPoints() const
|
unsigned int CheckableTestModel::getPoints() const
|
||||||
{
|
{
|
||||||
return std::accumulate(std::begin(m_tests), std::end(m_tests), 0,
|
return std::accumulate(
|
||||||
[](int base, const CheckableTest &test) { return base + test.getPoints(); });
|
std::begin(m_tests), std::end(m_tests), 0,
|
||||||
|
[](int base, const CheckableTest &test) { return base + test.getPoints(); });
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,8 +34,12 @@ protected:
|
||||||
virtual bool isValidIndex(const QModelIndex &index) const;
|
virtual bool isValidIndex(const QModelIndex &index) const;
|
||||||
|
|
||||||
virtual std::string getName() const = 0;
|
virtual std::string getName() const = 0;
|
||||||
void printTableTo(QTextCursor &cursor) const;
|
|
||||||
void printSummaryTo(QTextCursor &cursor) const;
|
virtual void printTableTo(QTextCursor &cursor) const;
|
||||||
|
virtual void printSummaryTo(QTextCursor &cursor) const;
|
||||||
|
|
||||||
|
static void setCellText(QTextTable &table, int row, int column, const QString &text);
|
||||||
|
static void setCellChecked(QTextTable &table, int row, int column, bool check);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CheckableItems &getItems(const QModelIndex &index);
|
CheckableItems &getItems(const QModelIndex &index);
|
||||||
|
|
|
@ -75,7 +75,7 @@ void DataModel::printTo(QTextCursor &cursor) const
|
||||||
m_genus.printTo(cursor);
|
m_genus.printTo(cursor);
|
||||||
m_akkusativ.printTo(cursor);
|
m_akkusativ.printTo(cursor);
|
||||||
m_dativ.printTo(cursor);
|
m_dativ.printTo(cursor);
|
||||||
//m_plural.printTo(cursor);
|
m_plural.printTo(cursor);
|
||||||
//m_genitiv.printTo(cursor);
|
//m_genitiv.printTo(cursor);
|
||||||
//m_passiv.printTo(cursor);
|
//m_passiv.printTo(cursor);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
#include "PluralModel.h"
|
#include "PluralModel.h"
|
||||||
|
|
||||||
#include <QSize>
|
#include <QSize>
|
||||||
|
#include <QTextTable>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
|
||||||
PluralModel::PluralModel(QObject *parent)
|
PluralModel::PluralModel(QObject *parent)
|
||||||
: CheckableTestModel(parent)
|
: CheckableTestModel(parent)
|
||||||
|
@ -56,3 +60,38 @@ std::string PluralModel::getName() const
|
||||||
{
|
{
|
||||||
return "Subtest 5: Plural";
|
return "Subtest 5: Plural";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PluralModel::printTableTo(QTextCursor &cursor) const
|
||||||
|
{
|
||||||
|
QTextTableFormat tableFormat;
|
||||||
|
tableFormat.setCellPadding(2);
|
||||||
|
tableFormat.setCellSpacing(0);
|
||||||
|
|
||||||
|
tableFormat.setColumnWidthConstraints({QTextLength(QTextLength::PercentageLength, 10),
|
||||||
|
QTextLength(QTextLength::PercentageLength, 10),
|
||||||
|
QTextLength(QTextLength::PercentageLength, 10),
|
||||||
|
QTextLength(QTextLength::PercentageLength, 10),
|
||||||
|
QTextLength(QTextLength::PercentageLength, 10),
|
||||||
|
QTextLength(QTextLength::PercentageLength, 10),
|
||||||
|
QTextLength(QTextLength::PercentageLength, 10),
|
||||||
|
QTextLength(QTextLength::PercentageLength, 10),
|
||||||
|
QTextLength(QTextLength::PercentageLength, 10),
|
||||||
|
QTextLength(QTextLength::PercentageLength, 10)});
|
||||||
|
|
||||||
|
QTextTable *table = cursor.insertTable(2, 10, tableFormat);
|
||||||
|
|
||||||
|
const auto &test = m_tests.front();
|
||||||
|
|
||||||
|
int currentColumn = 0;
|
||||||
|
for (const auto &item : test.items())
|
||||||
|
{
|
||||||
|
std::string itemName = std::regex_replace(item.getText(), std::regex("\\s"), "\n",
|
||||||
|
std::regex_constants::format_first_only);
|
||||||
|
|
||||||
|
setCellText(*table, 0, currentColumn, itemName.c_str());
|
||||||
|
setCellChecked(*table, 1, currentColumn, item.isChecked());
|
||||||
|
|
||||||
|
currentColumn++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,4 +18,6 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string getName() const override;
|
std::string getName() const override;
|
||||||
|
|
||||||
|
void printTableTo(QTextCursor &cursor) const override;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue