2018-05-16 05:02:12 +00:00
|
|
|
#include "DataModel.h"
|
2018-11-13 23:17:29 +00:00
|
|
|
#include "DataModel.pb.h"
|
2018-06-08 18:25:21 +00:00
|
|
|
|
2019-01-29 19:14:24 +00:00
|
|
|
#include <QFile>
|
|
|
|
|
2018-11-03 21:29:38 +00:00
|
|
|
#include <sstream>
|
|
|
|
|
2018-05-18 17:51:48 +00:00
|
|
|
DataModel::DataModel(QObject *parent)
|
2018-11-03 21:29:38 +00:00
|
|
|
: QObject(parent)
|
|
|
|
, m_metaData(this)
|
|
|
|
, m_verbEnd(this)
|
|
|
|
, m_genus(this)
|
|
|
|
, m_plural(this)
|
|
|
|
, m_results(this)
|
|
|
|
, m_akkusativ(this)
|
|
|
|
, m_dativ(this)
|
|
|
|
, m_v2Svk(this)
|
2019-01-30 22:07:11 +00:00
|
|
|
, m_tPeModel(this)
|
2018-06-26 14:59:51 +00:00
|
|
|
, m_passiv(this)
|
|
|
|
, m_genitiv(this)
|
2018-05-16 05:02:12 +00:00
|
|
|
{
|
2018-11-03 21:29:38 +00:00
|
|
|
connect(&m_plural, &PluralModel::dataChanged, this, &DataModel::pluralModelChanged);
|
|
|
|
connect(&m_metaData, &MetaDataModel::dataChanged, this, &DataModel::metaDataChanged);
|
|
|
|
connect(&m_genus, &GenusModel::dataChanged, this, &DataModel::genusModelChanged);
|
|
|
|
connect(&m_verbEnd, &VerbEndModel::dataChanged, this, &DataModel::verbEndModelChanged);
|
|
|
|
connect(&m_akkusativ, &AkkusativModel::dataChanged, this, &DataModel::akkusativModelChanged);
|
|
|
|
connect(&m_dativ, &DativModel::dataChanged, this, &DataModel::dativModelChanged);
|
|
|
|
connect(&m_v2Svk, &V2SvkModel::dataChanged, this, &DataModel::v2SvkModelChanged);
|
2019-01-30 22:07:11 +00:00
|
|
|
connect(&m_tPeModel, &TPeModel::dataChanged, this, &DataModel::v2SvkModelChanged);
|
2018-11-03 21:29:38 +00:00
|
|
|
connect(&m_passiv, &PassivModel::dataChanged, this, &DataModel::passivModelChanged);
|
|
|
|
connect(&m_genitiv, &GenitivModel::dataChanged, this, &DataModel::genitivModelChanged);
|
2018-05-16 05:02:12 +00:00
|
|
|
}
|
|
|
|
|
2019-01-29 19:14:24 +00:00
|
|
|
void DataModel::write(const QString &filename) const
|
2018-11-13 23:17:29 +00:00
|
|
|
{
|
|
|
|
ESGRAF48::DataModel dataModel;
|
2018-11-16 22:21:02 +00:00
|
|
|
|
2018-11-20 06:59:12 +00:00
|
|
|
m_metaData.write(*dataModel.mutable_metadata());
|
|
|
|
m_v2Svk.write(*dataModel.mutable_v2svk());
|
2019-01-30 22:07:11 +00:00
|
|
|
m_tPeModel.write(*dataModel.mutable_v2svk());
|
2018-11-20 22:05:49 +00:00
|
|
|
m_verbEnd.write(*dataModel.mutable_verbend());
|
2018-11-20 06:59:12 +00:00
|
|
|
m_genus.write(*dataModel.mutable_genus());
|
2018-11-18 16:12:03 +00:00
|
|
|
m_akkusativ.write(*dataModel.mutable_akkusativ());
|
|
|
|
m_dativ.write(*dataModel.mutable_dativ());
|
2018-11-18 16:40:07 +00:00
|
|
|
m_plural.write(*dataModel.mutable_plural());
|
2018-11-18 20:29:43 +00:00
|
|
|
m_genitiv.write(*dataModel.mutable_lateskillsgenitiv());
|
|
|
|
m_passiv.write(*dataModel.mutable_lateskillspassiv());
|
2018-11-16 22:21:02 +00:00
|
|
|
|
2019-01-29 19:14:24 +00:00
|
|
|
QFile outFile(filename);
|
|
|
|
if (!outFile.open(QIODevice::WriteOnly))
|
|
|
|
{
|
2019-01-30 19:41:22 +00:00
|
|
|
throw std::runtime_error("failed to open file");
|
2019-01-29 19:14:24 +00:00
|
|
|
}
|
|
|
|
|
2019-01-30 19:41:22 +00:00
|
|
|
bool success = dataModel.SerializeToFileDescriptor(outFile.handle());
|
|
|
|
if (success == false)
|
|
|
|
{
|
|
|
|
throw std::runtime_error("filed to write file");
|
|
|
|
}
|
2018-11-13 23:17:29 +00:00
|
|
|
}
|
|
|
|
|
2019-01-29 19:14:24 +00:00
|
|
|
void DataModel::read(const QString &filename)
|
2018-11-13 23:17:29 +00:00
|
|
|
{
|
2019-01-29 19:14:24 +00:00
|
|
|
QFile inFile(filename);
|
|
|
|
if (!inFile.open(QIODevice::ReadOnly))
|
|
|
|
{
|
2019-01-30 19:41:22 +00:00
|
|
|
throw std::runtime_error("failed to read file");
|
2019-01-29 19:14:24 +00:00
|
|
|
}
|
|
|
|
|
2018-11-13 23:17:29 +00:00
|
|
|
ESGRAF48::DataModel dataModel;
|
2019-01-30 19:41:22 +00:00
|
|
|
bool success = dataModel.ParseFromFileDescriptor(inFile.handle());
|
|
|
|
if (success == false)
|
|
|
|
{
|
|
|
|
throw std::runtime_error("invalid file format");
|
|
|
|
}
|
2018-11-13 23:17:29 +00:00
|
|
|
|
2018-11-20 06:59:12 +00:00
|
|
|
m_metaData.read(dataModel.metadata());
|
|
|
|
m_v2Svk.read(dataModel.v2svk());
|
2019-01-30 22:07:11 +00:00
|
|
|
m_tPeModel.read(dataModel.v2svk());
|
2018-11-20 06:59:12 +00:00
|
|
|
m_verbEnd.read(dataModel.verbend());
|
|
|
|
m_genus.read(dataModel.genus());
|
2018-11-18 16:12:03 +00:00
|
|
|
m_akkusativ.read(dataModel.akkusativ());
|
|
|
|
m_dativ.read(dataModel.dativ());
|
2018-11-18 16:40:07 +00:00
|
|
|
m_plural.read(dataModel.plural());
|
2018-11-18 20:29:43 +00:00
|
|
|
m_genitiv.read(dataModel.lateskillsgenitiv());
|
|
|
|
m_passiv.read(dataModel.lateskillspassiv());
|
2018-11-13 23:17:29 +00:00
|
|
|
}
|
|
|
|
|
2018-11-03 21:29:38 +00:00
|
|
|
std::string DataModel::toHtml() const
|
|
|
|
{
|
|
|
|
std::stringstream out;
|
|
|
|
|
|
|
|
out << "<html>" << std::endl;
|
|
|
|
out << "<head>" << std::endl;
|
|
|
|
out << "<style>" << std::endl;
|
|
|
|
out << "body {" << std::endl;
|
|
|
|
out << "font-family:sans-serif;" << std::endl;
|
|
|
|
out << "}" << std::endl;
|
|
|
|
out << "</style>" << std::endl;
|
|
|
|
out << "</head>" << std::endl;
|
|
|
|
out << "<body>" << std::endl;
|
|
|
|
out << "<h2>ESGRAF 4-8 Auswertungsbogen</h2>" << std::endl;
|
|
|
|
out << "<p>" << std::endl;
|
|
|
|
out << m_metaData.toHtml();
|
|
|
|
out << "</p>" << std::endl;
|
|
|
|
out << "</body>" << std::endl;
|
|
|
|
out << "</html>" << std::endl;
|
|
|
|
|
|
|
|
return out.str();
|
2018-05-16 05:02:12 +00:00
|
|
|
}
|
2018-06-15 15:53:43 +00:00
|
|
|
|
2018-06-08 18:25:21 +00:00
|
|
|
void DataModel::pluralModelChanged()
|
|
|
|
{
|
|
|
|
m_results.setPluralResult(m_plural.getPoints());
|
2018-09-29 11:31:23 +00:00
|
|
|
|
|
|
|
emit modelChanged();
|
2018-06-08 18:25:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DataModel::metaDataChanged()
|
|
|
|
{
|
2018-06-09 11:13:00 +00:00
|
|
|
m_results.setAge(m_metaData.getAge());
|
2018-09-29 11:31:23 +00:00
|
|
|
|
|
|
|
emit modelChanged();
|
2018-06-08 18:25:21 +00:00
|
|
|
}
|
2018-06-15 15:53:43 +00:00
|
|
|
|
|
|
|
void DataModel::genusModelChanged()
|
|
|
|
{
|
|
|
|
m_results.setGenusResult(m_genus.getPoints());
|
2018-09-29 11:31:23 +00:00
|
|
|
|
|
|
|
emit modelChanged();
|
2018-06-15 15:53:43 +00:00
|
|
|
}
|
2018-06-15 16:36:58 +00:00
|
|
|
|
|
|
|
void DataModel::verbEndModelChanged()
|
|
|
|
{
|
|
|
|
m_results.setVerbEndResult(m_verbEnd.getPoints());
|
2018-09-29 11:31:23 +00:00
|
|
|
|
|
|
|
emit modelChanged();
|
2018-06-15 16:36:58 +00:00
|
|
|
}
|
2018-06-17 16:44:54 +00:00
|
|
|
|
|
|
|
void DataModel::akkusativModelChanged()
|
|
|
|
{
|
|
|
|
m_results.setAkkusativResult(m_akkusativ.getPoints());
|
2018-09-29 11:31:23 +00:00
|
|
|
|
|
|
|
emit modelChanged();
|
2018-06-17 16:44:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DataModel::dativModelChanged()
|
|
|
|
{
|
|
|
|
m_results.setDativResult(m_dativ.getPoints());
|
2018-09-29 11:31:23 +00:00
|
|
|
|
|
|
|
emit modelChanged();
|
2018-06-17 16:44:54 +00:00
|
|
|
}
|
2018-06-25 21:04:32 +00:00
|
|
|
|
|
|
|
void DataModel::v2SvkModelChanged()
|
|
|
|
{
|
2019-01-30 22:07:11 +00:00
|
|
|
m_results.setV2Result(m_v2Svk.getV2Points() + m_tPeModel.getV2Points());
|
|
|
|
m_results.setSvkResult(m_v2Svk.getSvkPoints() + m_tPeModel.getSvkPoints());
|
2018-09-29 11:31:23 +00:00
|
|
|
|
|
|
|
emit modelChanged();
|
2018-06-25 21:04:32 +00:00
|
|
|
}
|
2018-06-26 14:59:51 +00:00
|
|
|
|
|
|
|
void DataModel::passivModelChanged()
|
|
|
|
{
|
2018-11-03 21:29:38 +00:00
|
|
|
m_results.setPassivResult(m_passiv.getPoints());
|
2018-09-29 11:31:23 +00:00
|
|
|
|
|
|
|
emit modelChanged();
|
2018-06-26 14:59:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DataModel::genitivModelChanged()
|
|
|
|
{
|
2018-11-03 21:29:38 +00:00
|
|
|
m_results.setGenitivResult(m_genitiv.getPoints());
|
2018-09-29 11:31:23 +00:00
|
|
|
|
|
|
|
emit modelChanged();
|
2018-06-26 14:59:51 +00:00
|
|
|
}
|