From 02eaa7be16ef7a85729c425fcb32680b7eacec0a Mon Sep 17 00:00:00 2001 From: Michael Mandl Date: Fri, 29 Jun 2018 19:31:28 +0200 Subject: [PATCH] added value to CheckableItem, implemented exclusive checking in PassivModel --- source/CheckableItem/CheckableItem.cpp | 15 +++++++++ source/CheckableItem/CheckableItem.h | 7 ++++ source/CheckableTest/CheckableTest.h | 1 - .../CheckableTestModel/CheckableTestModel.cpp | 5 +-- source/SubTests/LateSkills/PassivModel.cpp | 32 +++++++++++++++++-- source/SubTests/LateSkills/PassivModel.h | 4 ++- 6 files changed, 55 insertions(+), 9 deletions(-) diff --git a/source/CheckableItem/CheckableItem.cpp b/source/CheckableItem/CheckableItem.cpp index 9056a4b..6d6a16a 100644 --- a/source/CheckableItem/CheckableItem.cpp +++ b/source/CheckableItem/CheckableItem.cpp @@ -20,6 +20,21 @@ void CheckableItem::setState(bool checked) m_checked = checked; } +unsigned int CheckableItem::value() const +{ + return m_value; +} + +void CheckableItem::setValue(unsigned int value) +{ + m_value = value; +} + +unsigned int CheckableItem::points() const +{ + return m_checked ? m_value : 0; +} + void CheckableItem::write(QJsonObject &json) const { json["text"] = m_text.c_str(); diff --git a/source/CheckableItem/CheckableItem.h b/source/CheckableItem/CheckableItem.h index 912ca14..a37086e 100644 --- a/source/CheckableItem/CheckableItem.h +++ b/source/CheckableItem/CheckableItem.h @@ -9,15 +9,22 @@ class CheckableItem private: bool m_checked = false; std::string m_text; + unsigned int m_value = 1; public: CheckableItem() = default; CheckableItem(const std::string &text); std::string getText() const; + bool isChecked() const; void setState(bool checked); + unsigned int value() const; + void setValue(unsigned int value); + + unsigned int points() const; + void write(QJsonObject &json) const; void read(const QJsonObject &json); }; diff --git a/source/CheckableTest/CheckableTest.h b/source/CheckableTest/CheckableTest.h index 424d44b..32f6da0 100644 --- a/source/CheckableTest/CheckableTest.h +++ b/source/CheckableTest/CheckableTest.h @@ -20,4 +20,3 @@ public: }; using CheckableTests = std::vector; - diff --git a/source/CheckableTestModel/CheckableTestModel.cpp b/source/CheckableTestModel/CheckableTestModel.cpp index 4dcf09c..55e1582 100644 --- a/source/CheckableTestModel/CheckableTestModel.cpp +++ b/source/CheckableTestModel/CheckableTestModel.cpp @@ -187,10 +187,7 @@ unsigned int CheckableTestModel::getPoints() const { for (const auto &item : test.items()) { - if (item.isChecked()) - { - points++; - } + points += item.points(); } } diff --git a/source/SubTests/LateSkills/PassivModel.cpp b/source/SubTests/LateSkills/PassivModel.cpp index fedd9af..2f82c2e 100644 --- a/source/SubTests/LateSkills/PassivModel.cpp +++ b/source/SubTests/LateSkills/PassivModel.cpp @@ -3,7 +3,33 @@ PassivModel::PassivModel(QObject *parent) : CheckableTestModel(parent) { - m_tests = { - { "Passiv", { "Elefant", "Pferde", "Bälle", "Ball", "Fleisch" } } - }; + m_tests = { { "Passiv", + { "Elefant (1)", "Elefant (2)", "Pferde (1)", "Pferde (2)", "Bälle (1)", + "Bälle (2)", "Ball (1)", "Ball (2)", "Fleisch (1)", + "Fleisch (2)" } } }; + + for (auto index : { 1, 3, 5, 7, 9 }) + { + m_tests[0].items()[index].setValue(2); + } +} + +bool PassivModel::setData( + const QModelIndex &modelIndex, const QVariant &value, int role) +{ + if (role == Qt::CheckStateRole && value.toBool() == true) + { + if (modelIndex.column() % 2 == 0) + { + CheckableTestModel::setData( + index(modelIndex.row(), modelIndex.column() + 1), false, role); + } + else + { + CheckableTestModel::setData( + index(modelIndex.row(), modelIndex.column() - 1), false, role); + } + } + + return CheckableTestModel::setData(modelIndex, value, role); } diff --git a/source/SubTests/LateSkills/PassivModel.h b/source/SubTests/LateSkills/PassivModel.h index 4247081..159ccba 100644 --- a/source/SubTests/LateSkills/PassivModel.h +++ b/source/SubTests/LateSkills/PassivModel.h @@ -7,5 +7,7 @@ class PassivModel : public CheckableTestModel Q_OBJECT public: - PassivModel(QObject *parent); + PassivModel(QObject *parent); + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole) override; };