notify result widget about plural test changes

This commit is contained in:
Michael Mandl 2018-06-08 20:25:21 +02:00
parent 1f9a051382
commit 077efaac32
11 changed files with 107 additions and 5 deletions

5
source/Age.h Normal file
View file

@ -0,0 +1,5 @@
#pragma once
class Age
{
};

View file

@ -78,6 +78,7 @@ bool CheckableTestModel::setData(
{
auto &item = getItem(index);
item.setState(value.toBool());
emit dataChanged(index, index);
return true;
}
}

View file

@ -1,5 +1,7 @@
#include "DataModel.h"
#include <QDebug>
DataModel::DataModel(QObject *parent)
: QObject(parent)
, m_metaData(this)
@ -8,6 +10,11 @@ DataModel::DataModel(QObject *parent)
, m_plural(this)
, m_results(this)
{
connect(&m_plural, &PluralModel::dataChanged,
this, &DataModel::pluralModelChanged);
connect(&m_metaData, &PluralModel::dataChanged,
this, &DataModel::metaDataChanged);
}
void DataModel::write(QJsonObject &target) const
@ -25,3 +32,12 @@ void DataModel::read(const QJsonObject &source)
read(m_genus, source, "Genus");
read(m_plural, source, "Plural");
}
void DataModel::pluralModelChanged()
{
m_results.setPluralResult(m_plural.getPoints());
}
void DataModel::metaDataChanged()
{
}

View file

@ -47,4 +47,8 @@ private:
model.read(jsonObject.toObject());
}
}
private slots:
void pluralModelChanged();
void metaDataChanged();
};

View file

@ -98,6 +98,11 @@ bool MetaDataModel::setData(
break;
}
if (valueChanged)
{
emit dataChanged(index, index);
}
return valueChanged;
}

View file

@ -1,5 +1,7 @@
#pragma once
#include "../Age.h"
#include <QAbstractTableModel>
#include <QString>
#include <QDate>
@ -28,4 +30,9 @@ public:
void write(QJsonObject &json) const;
void read(const QJsonObject &json);
Age getAge() const
{
return {};
}
};

View file

@ -5,7 +5,8 @@
ResultModel::ResultModel(QObject *parent)
: QAbstractTableModel(parent)
{
m_results = {{ "V2", "SVK", "VE", "Passiv", "Genus", "Akkusativ", "Dativ", "Genitiv", "Plural" }};
m_results = { { "V2", "SVK", "VE", "Passiv", "Genus", "Akkusativ", "Dativ",
"Genitiv", "Plural" } };
}
int ResultModel::rowCount(const QModelIndex &parent) const
@ -22,7 +23,16 @@ QVariant ResultModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole)
{
return "data";
if (index.column() < m_results.size())
{
size_t points = m_results[index.column()].points();
if (points != 0)
{
return static_cast<uint>(points);
}
}
return "-";
}
return {};
@ -59,3 +69,17 @@ QVariant ResultModel::headerData(
return {};
}
}
void ResultModel::setAge(const QDate &age)
{
m_age = age;
}
void ResultModel::setPluralResult(size_t points)
{
if (m_results[8].points() != points)
{
m_results[8] = points;
emit dataChanged(index(0, 8), index(2, 8));
}
}

View file

@ -2,22 +2,35 @@
#include <vector>
#include <QAbstractTableModel>
#include <QDate>
class TestResult
{
private:
QString m_name;
size_t m_points;
public:
TestResult(const char *name)
: m_name(name)
, m_points(0)
{
}
void operator=(const size_t &points)
{
m_points = points;
}
const QString &name() const
{
return m_name;
}
const size_t points() const
{
return m_points;
}
};
class ResultModel : public QAbstractTableModel
@ -25,6 +38,7 @@ class ResultModel : public QAbstractTableModel
Q_OBJECT
private:
QDate m_age;
std::vector<TestResult> m_results;
public:
@ -38,4 +52,7 @@ public:
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const override;
void setAge(const QDate &age);
void setPluralResult(size_t points);
};

View file

@ -4,6 +4,24 @@ PluralModel::PluralModel(QObject *parent)
: CheckableTestModel(parent)
{
m_tests = { { "",
{ "Fisch /-e/", "Banane /-n/", "Bonbon /-s/", "Ei /-er/", "Eimer /-o/",
{ "Fisch /-e/", "Banane /-n/", "Bonbon /-s/", "Ei /-er/", "Eimer /-ø/",
"Korn UML+/-er/", "Nuss UML+/-e/", "Bär /-en/", "Apfel UML" } } };
}
size_t PluralModel::getPoints() const
{
size_t points = 0;
for (const auto &test : m_tests)
{
for (const auto &item : test.items())
{
if (item.isChecked())
{
points++;
}
}
}
return points;
}

View file

@ -8,4 +8,9 @@ class PluralModel : public CheckableTestModel
public:
PluralModel(QObject *parent);
size_t getPoints() const;
signals:
void resultChanged(size_t result) const;
};

View file

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>905</width>
<width>1125</width>
<height>572</height>
</rect>
</property>
@ -89,7 +89,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>905</width>
<width>1125</width>
<height>19</height>
</rect>
</property>