This repository has been archived on 2024-12-15. You can view files and clone it, but cannot push or open issues or pull requests.
ESGRAF48/source/MetaData/MetaDataModel.cpp

205 lines
5.4 KiB
C++
Raw Normal View History

#include "MetaDataModel.h"
2018-11-26 20:47:42 +00:00
#include <QTextTable>
#include <QDebug>
2018-11-03 21:29:38 +00:00
#include <sstream>
MetaDataModel::MetaDataModel(QObject *parent)
2018-11-03 21:29:38 +00:00
: QAbstractTableModel(parent)
{
m_dateOfBirth = QDate::currentDate().addYears(-9);
2018-05-20 10:04:21 +00:00
m_dateOfTest = QDate::currentDate();
}
int MetaDataModel::rowCount(const QModelIndex &parent) const
{
return 1;
}
int MetaDataModel::columnCount(const QModelIndex &parent) const
{
2018-06-14 17:52:19 +00:00
return 6;
}
2018-06-14 17:52:19 +00:00
QVariant MetaDataModel::data(const QModelIndex &modelIndex, int role) const
{
if (role == Qt::DisplayRole || role == Qt::EditRole)
{
2018-06-14 17:52:19 +00:00
switch (modelIndex.column())
{
case 0:
return m_participant;
case 1:
return m_instructor;
case 2:
return m_dateOfBirth;
case 3:
return m_dateOfTest;
case 4:
return m_remarks;
2018-06-14 17:52:19 +00:00
case 5:
return QString::fromStdString(getAge().toString());
default:
return QVariant();
}
}
return QVariant();
}
2018-05-15 12:37:16 +00:00
2018-06-14 17:52:19 +00:00
Qt::ItemFlags MetaDataModel::flags(const QModelIndex &modelIndex) const
2018-05-17 17:42:35 +00:00
{
2018-06-14 17:52:19 +00:00
return QAbstractTableModel::flags(modelIndex) | Qt::ItemIsEditable;
2018-05-17 17:42:35 +00:00
}
2018-11-03 21:29:38 +00:00
bool MetaDataModel::setData(const QModelIndex &modelIndex, const QVariant &value, int role)
2018-05-17 17:42:35 +00:00
{
if (role != Qt::EditRole)
{
2018-06-14 17:52:19 +00:00
return QAbstractTableModel::setData(modelIndex, value, role);
2018-05-17 17:42:35 +00:00
}
bool valueChanged = false;
2018-06-14 17:52:19 +00:00
switch (modelIndex.column())
2018-05-17 17:42:35 +00:00
{
case 0:
if (value.toString() != m_participant)
{
m_participant = value.toString();
valueChanged = true;
}
break;
case 1:
if (value.toString() != m_instructor)
{
m_instructor = value.toString();
valueChanged = true;
}
break;
case 2:
2018-05-18 18:36:48 +00:00
if (value.toDate() != m_dateOfBirth)
2018-05-17 17:42:35 +00:00
{
2018-05-18 18:36:48 +00:00
m_dateOfBirth = value.toDate();
2018-06-14 17:52:19 +00:00
emit dataChanged(index(0, 5), index(0, 5));
2018-05-17 17:42:35 +00:00
valueChanged = true;
}
break;
case 3:
2018-05-18 18:36:48 +00:00
if (value.toDate() != m_dateOfTest)
2018-05-17 17:42:35 +00:00
{
2018-05-18 18:36:48 +00:00
m_dateOfTest = value.toDate();
2018-06-14 17:52:19 +00:00
emit dataChanged(index(0, 5), index(0, 5));
2018-05-17 17:42:35 +00:00
valueChanged = true;
}
break;
case 4:
if (value.toString() != m_remarks)
{
m_remarks = value.toString();
valueChanged = true;
}
break;
default:
break;
}
if (valueChanged)
{
2018-06-14 17:52:19 +00:00
emit dataChanged(modelIndex, modelIndex);
}
2018-05-17 17:42:35 +00:00
return valueChanged;
}
void MetaDataModel::read(const ESGRAF48::MetaDataModel &model)
2018-11-16 22:21:02 +00:00
{
setData(index(0, 0), QString::fromStdString(model.participantname()));
setData(index(0, 1), QString::fromStdString(model.instructorname()));
setData(index(0, 2), QString::fromStdString(model.dateofbirth()));
setData(index(0, 3), QString::fromStdString(model.dateoftest()));
setData(index(0, 4), QString::fromStdString(model.remarks()));
}
void MetaDataModel::write(ESGRAF48::MetaDataModel &model) const
2018-11-16 22:21:02 +00:00
{
model.set_participantname(m_participant.toStdString());
model.set_instructorname(m_instructor.toStdString());
model.set_dateofbirth(m_dateOfBirth.toString(Qt::ISODate).toStdString());
model.set_dateoftest(m_dateOfTest.toString(Qt::ISODate).toStdString());
model.set_remarks(m_remarks.toStdString());
}
2018-11-13 23:17:29 +00:00
2018-11-26 20:47:42 +00:00
void MetaDataModel::printTo(QTextCursor &cursor) const
{
cursor.insertBlock();
QTextTableFormat tableFormat;
tableFormat.setCellPadding(2);
tableFormat.setCellSpacing(0);
tableFormat.setColumnWidthConstraints({QTextLength(QTextLength::PercentageLength, 25),
QTextLength(QTextLength::PercentageLength, 25),
QTextLength(QTextLength::PercentageLength, 25),
QTextLength(QTextLength::PercentageLength, 25)});
QTextTable *table = cursor.insertTable(4, 4, tableFormat);
table->mergeCells(1, 2, 1, 2);
table->mergeCells(2, 2, 2, 2);
cursor.insertText("Name, Vorname");
cursor.movePosition(QTextCursor::NextCell);
cursor.insertText(m_participant);
cursor.movePosition(QTextCursor::NextCell);
cursor.insertText("Untersucher(in)");
cursor.movePosition(QTextCursor::NextCell);
cursor.insertText(m_instructor);
cursor.movePosition(QTextCursor::NextRow);
cursor.insertText("Geburtsdatum");
cursor.movePosition(QTextCursor::NextCell);
cursor.insertText(m_dateOfBirth.toString("dd.MM.yyyy"));
cursor.movePosition(QTextCursor::NextCell);
cursor.insertText("Bemerkungen:");
cursor.movePosition(QTextCursor::NextRow);
cursor.insertText("Untersuchungsdatum");
cursor.movePosition(QTextCursor::NextCell);
cursor.insertText(m_dateOfTest.toString("dd.MM.yyyy"));
cursor.movePosition(QTextCursor::NextCell);
cursor.insertText(m_remarks.trimmed());
cursor.movePosition(QTextCursor::NextRow);
cursor.insertText("Alter am Testtag");
cursor.movePosition(QTextCursor::NextCell);
cursor.insertText(getAge().toString().c_str());
cursor.movePosition(QTextCursor::NextBlock);
}
2018-11-03 21:29:38 +00:00
std::string MetaDataModel::toHtml() const
{
std::ostringstream out;
2018-11-26 20:47:42 +00:00
out << "<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" frame=\"box\" rules=\"all\">" << std::endl;
2018-11-03 21:29:38 +00:00
out << "<tr>" << std::endl;
2018-11-26 20:47:42 +00:00
out << "<td colspan=\"2\">Bemerkungen</td>" << std::endl;
2018-11-03 21:29:38 +00:00
out << "</tr>" << std::endl;
out << "<tr>" << std::endl;
2018-11-26 20:47:42 +00:00
out << "<td>Untersuchungsdatum</td>" << std::endl;
out << "<td>" << m_dateOfTest.toString("dd.MM.yyyy").toHtmlEscaped().toStdString() << "</td>"
<< std::endl;
out << "<td colspan=\"2\" rowspan=\"2\">"
<< m_remarks.trimmed().toHtmlEscaped().replace("\n", "<br>").toStdString() << "</td>"
<< std::endl;
2018-11-03 21:29:38 +00:00
out << "</tr>" << std::endl;
out << "<tr>" << std::endl;
out << "<td>Alter am Testtag</td>" << std::endl;
2018-11-04 12:57:35 +00:00
out << "<td>" << getAge().toString() << "</td>" << std::endl;
2018-11-03 21:29:38 +00:00
out << "</tr>" << std::endl;
out << "</table>" << std::endl;
return out.str();
}