notify result widget about plural test changes
This commit is contained in:
parent
1f9a051382
commit
077efaac32
11 changed files with 107 additions and 5 deletions
5
source/Age.h
Normal file
5
source/Age.h
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class Age
|
||||||
|
{
|
||||||
|
};
|
|
@ -78,6 +78,7 @@ bool CheckableTestModel::setData(
|
||||||
{
|
{
|
||||||
auto &item = getItem(index);
|
auto &item = getItem(index);
|
||||||
item.setState(value.toBool());
|
item.setState(value.toBool());
|
||||||
|
emit dataChanged(index, index);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "DataModel.h"
|
#include "DataModel.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
DataModel::DataModel(QObject *parent)
|
DataModel::DataModel(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_metaData(this)
|
, m_metaData(this)
|
||||||
|
@ -8,6 +10,11 @@ DataModel::DataModel(QObject *parent)
|
||||||
, m_plural(this)
|
, m_plural(this)
|
||||||
, m_results(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
|
void DataModel::write(QJsonObject &target) const
|
||||||
|
@ -25,3 +32,12 @@ void DataModel::read(const QJsonObject &source)
|
||||||
read(m_genus, source, "Genus");
|
read(m_genus, source, "Genus");
|
||||||
read(m_plural, source, "Plural");
|
read(m_plural, source, "Plural");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DataModel::pluralModelChanged()
|
||||||
|
{
|
||||||
|
m_results.setPluralResult(m_plural.getPoints());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DataModel::metaDataChanged()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
|
@ -47,4 +47,8 @@ private:
|
||||||
model.read(jsonObject.toObject());
|
model.read(jsonObject.toObject());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void pluralModelChanged();
|
||||||
|
void metaDataChanged();
|
||||||
};
|
};
|
||||||
|
|
|
@ -98,6 +98,11 @@ bool MetaDataModel::setData(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (valueChanged)
|
||||||
|
{
|
||||||
|
emit dataChanged(index, index);
|
||||||
|
}
|
||||||
|
|
||||||
return valueChanged;
|
return valueChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "../Age.h"
|
||||||
|
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
|
@ -28,4 +30,9 @@ public:
|
||||||
|
|
||||||
void write(QJsonObject &json) const;
|
void write(QJsonObject &json) const;
|
||||||
void read(const QJsonObject &json);
|
void read(const QJsonObject &json);
|
||||||
|
|
||||||
|
Age getAge() const
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
ResultModel::ResultModel(QObject *parent)
|
ResultModel::ResultModel(QObject *parent)
|
||||||
: QAbstractTableModel(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
|
int ResultModel::rowCount(const QModelIndex &parent) const
|
||||||
|
@ -22,7 +23,16 @@ QVariant ResultModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
if (role == Qt::DisplayRole)
|
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 {};
|
return {};
|
||||||
|
@ -59,3 +69,17 @@ QVariant ResultModel::headerData(
|
||||||
return {};
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -2,22 +2,35 @@
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
|
#include <QDate>
|
||||||
|
|
||||||
class TestResult
|
class TestResult
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
QString m_name;
|
QString m_name;
|
||||||
|
size_t m_points;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TestResult(const char *name)
|
TestResult(const char *name)
|
||||||
: m_name(name)
|
: m_name(name)
|
||||||
|
, m_points(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void operator=(const size_t &points)
|
||||||
|
{
|
||||||
|
m_points = points;
|
||||||
|
}
|
||||||
|
|
||||||
const QString &name() const
|
const QString &name() const
|
||||||
{
|
{
|
||||||
return m_name;
|
return m_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const size_t points() const
|
||||||
|
{
|
||||||
|
return m_points;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ResultModel : public QAbstractTableModel
|
class ResultModel : public QAbstractTableModel
|
||||||
|
@ -25,6 +38,7 @@ class ResultModel : public QAbstractTableModel
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QDate m_age;
|
||||||
std::vector<TestResult> m_results;
|
std::vector<TestResult> m_results;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -38,4 +52,7 @@ public:
|
||||||
|
|
||||||
QVariant headerData(int section, Qt::Orientation orientation,
|
QVariant headerData(int section, Qt::Orientation orientation,
|
||||||
int role = Qt::DisplayRole) const override;
|
int role = Qt::DisplayRole) const override;
|
||||||
|
|
||||||
|
void setAge(const QDate &age);
|
||||||
|
void setPluralResult(size_t points);
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,6 +4,24 @@ PluralModel::PluralModel(QObject *parent)
|
||||||
: CheckableTestModel(parent)
|
: CheckableTestModel(parent)
|
||||||
{
|
{
|
||||||
m_tests = { { "",
|
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" } } };
|
"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;
|
||||||
|
}
|
||||||
|
|
|
@ -8,4 +8,9 @@ class PluralModel : public CheckableTestModel
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PluralModel(QObject *parent);
|
PluralModel(QObject *parent);
|
||||||
|
|
||||||
|
size_t getPoints() const;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void resultChanged(size_t result) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>905</width>
|
<width>1125</width>
|
||||||
<height>572</height>
|
<height>572</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>905</width>
|
<width>1125</width>
|
||||||
<height>19</height>
|
<height>19</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
|
Loading…
Reference in a new issue