Merge branch 'feature/save-to-protobuf' into develop
This commit is contained in:
commit
6f35ffda7f
41 changed files with 1333 additions and 200 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@ compile_commands.json
|
||||||
_*/
|
_*/
|
||||||
build-*
|
build-*
|
||||||
*.user
|
*.user
|
||||||
|
tags
|
||||||
|
|
46
proto/AkkusativModel.proto
Normal file
46
proto/AkkusativModel.proto
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
message AkkusativModel
|
||||||
|
{
|
||||||
|
message TiereModel
|
||||||
|
{
|
||||||
|
bool Tiger = 1;
|
||||||
|
bool Katze = 2;
|
||||||
|
bool Affe = 3;
|
||||||
|
bool Gans = 4;
|
||||||
|
bool Baer = 5;
|
||||||
|
bool Pferd = 6;
|
||||||
|
bool Hund = 7;
|
||||||
|
bool Elefant = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
message VersteckeModel
|
||||||
|
{
|
||||||
|
bool Vorhang1 = 1;
|
||||||
|
bool Kiste1 = 2;
|
||||||
|
bool Holz1 = 3;
|
||||||
|
bool Kiste2 = 4;
|
||||||
|
bool Baum1 = 5;
|
||||||
|
bool Vorhang2 = 6;
|
||||||
|
bool Holz2 = 7;
|
||||||
|
bool Baum2 = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FutterModel
|
||||||
|
{
|
||||||
|
bool Salat = 1;
|
||||||
|
bool Fleisch = 2;
|
||||||
|
bool Knochen = 3;
|
||||||
|
bool Banane = 4;
|
||||||
|
bool Apfel = 5;
|
||||||
|
bool Karotte = 6;
|
||||||
|
bool Honig = 7;
|
||||||
|
bool Zucker = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
TiereModel Tiere = 1;
|
||||||
|
VersteckeModel Verstecke = 2;
|
||||||
|
FutterModel Futter = 3;
|
||||||
|
}
|
26
proto/DataModel.proto
Normal file
26
proto/DataModel.proto
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
import "MetaDataModel.proto";
|
||||||
|
import "V2SvkModel.proto";
|
||||||
|
import "VerbEndModel.proto";
|
||||||
|
import "GenusModel.proto";
|
||||||
|
import "AkkusativModel.proto";
|
||||||
|
import "DativModel.proto";
|
||||||
|
import "PluralModel.proto";
|
||||||
|
import "LateSkillsGenitivModel.proto";
|
||||||
|
import "LateSkillsPassivModel.proto";
|
||||||
|
|
||||||
|
message DataModel
|
||||||
|
{
|
||||||
|
MetaDataModel MetaData = 1;
|
||||||
|
V2SvkModel V2Svk = 2;
|
||||||
|
VerbEndModel VerbEnd = 3;
|
||||||
|
GenusModel Genus = 4;
|
||||||
|
AkkusativModel Akkusativ = 5;
|
||||||
|
DativModel Dativ = 6;
|
||||||
|
PluralModel Plural = 7;
|
||||||
|
LateSkillsGenitivModel LateSkillsGenitiv = 8;
|
||||||
|
LateSkillsPassivModel LateSkillsPassiv = 9;
|
||||||
|
}
|
46
proto/DativModel.proto
Normal file
46
proto/DativModel.proto
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
message DativModel
|
||||||
|
{
|
||||||
|
message TiereModel
|
||||||
|
{
|
||||||
|
bool Tiger = 1;
|
||||||
|
bool Katze = 2;
|
||||||
|
bool Affe = 3;
|
||||||
|
bool Gans = 4;
|
||||||
|
bool Baer = 5;
|
||||||
|
bool Pferd = 6;
|
||||||
|
bool Hund = 7;
|
||||||
|
bool Elefant = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
message VersteckeModel
|
||||||
|
{
|
||||||
|
bool Vorhang1 = 1;
|
||||||
|
bool Kiste1 = 2;
|
||||||
|
bool Holz1 = 3;
|
||||||
|
bool Kiste2 = 4;
|
||||||
|
bool Baum1 = 5;
|
||||||
|
bool Vorhang2 = 6;
|
||||||
|
bool Holz2 = 7;
|
||||||
|
bool Baum2 = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FutterModel
|
||||||
|
{
|
||||||
|
bool Salat = 1;
|
||||||
|
bool Fleisch = 2;
|
||||||
|
bool Knochen = 3;
|
||||||
|
bool Banane = 4;
|
||||||
|
bool Apfel = 5;
|
||||||
|
bool Karotte = 6;
|
||||||
|
bool Honig = 7;
|
||||||
|
bool Zucker = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
TiereModel Tiere = 1;
|
||||||
|
VersteckeModel Verstecke = 2;
|
||||||
|
FutterModel Futter = 3;
|
||||||
|
}
|
42
proto/GenusModel.proto
Normal file
42
proto/GenusModel.proto
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
message GenusModel
|
||||||
|
{
|
||||||
|
message TiereModel
|
||||||
|
{
|
||||||
|
bool Tiger = 1;
|
||||||
|
bool Baer = 2;
|
||||||
|
bool Katze = 3;
|
||||||
|
bool Pferd = 4;
|
||||||
|
bool Gans = 5;
|
||||||
|
bool Elefant = 6;
|
||||||
|
bool Affe = 7;
|
||||||
|
bool Hund = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FutterModel
|
||||||
|
{
|
||||||
|
bool Salat = 1;
|
||||||
|
bool Fleisch = 2;
|
||||||
|
bool Knochen = 3;
|
||||||
|
bool Banane = 4;
|
||||||
|
bool Apfel = 5;
|
||||||
|
bool Karotte = 6;
|
||||||
|
bool Honig = 7;
|
||||||
|
bool Zucker = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ZirkusModel
|
||||||
|
{
|
||||||
|
bool Kiste = 1;
|
||||||
|
bool Holz = 2;
|
||||||
|
bool Vorhang = 3;
|
||||||
|
bool Baum = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
TiereModel Tiere = 1;
|
||||||
|
FutterModel Futter = 2;
|
||||||
|
ZirkusModel Zirkus = 3;
|
||||||
|
}
|
33
proto/LateSkillsGenitivModel.proto
Normal file
33
proto/LateSkillsGenitivModel.proto
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
message LateSkillsGenitivModel
|
||||||
|
{
|
||||||
|
message PraepositionenModel
|
||||||
|
{
|
||||||
|
bool anstelle1 = 1;
|
||||||
|
bool anstelle2 = 2;
|
||||||
|
bool ausserhalb1 = 3;
|
||||||
|
bool ausserhalb2 = 4;
|
||||||
|
bool mithilfe1 = 5;
|
||||||
|
bool mithilfe2 = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AttributierungModel
|
||||||
|
{
|
||||||
|
bool Schuhe1 = 1;
|
||||||
|
bool Schuhe2 = 2;
|
||||||
|
bool Zauberstab1 = 3;
|
||||||
|
bool Zauberstab2 = 4;
|
||||||
|
bool Hut1 = 5;
|
||||||
|
bool Hut2 = 6;
|
||||||
|
bool Brille1 = 7;
|
||||||
|
bool Brille2 = 8;
|
||||||
|
bool Guertel1 = 9;
|
||||||
|
bool Guertel2 = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
PraepositionenModel Praepositionen = 1;
|
||||||
|
AttributierungModel Attributierung = 2;
|
||||||
|
}
|
17
proto/LateSkillsPassivModel.proto
Normal file
17
proto/LateSkillsPassivModel.proto
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
message LateSkillsPassivModel
|
||||||
|
{
|
||||||
|
bool Elefant1 = 1;
|
||||||
|
bool Elefant2 = 2;
|
||||||
|
bool Pferde1 = 3;
|
||||||
|
bool Pferde2 = 4;
|
||||||
|
bool Baelle1 = 5;
|
||||||
|
bool Baelle2 = 6;
|
||||||
|
bool Ball1 = 7;
|
||||||
|
bool Ball2 = 8;
|
||||||
|
bool Fleisch1 = 9;
|
||||||
|
bool Fleisch2 = 10;
|
||||||
|
}
|
12
proto/MetaDataModel.proto
Normal file
12
proto/MetaDataModel.proto
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
message MetaDataModel
|
||||||
|
{
|
||||||
|
string ParticipantName = 1;
|
||||||
|
string InstructorName = 2;
|
||||||
|
string DateOfBirth = 3;
|
||||||
|
string DateOfTest = 4;
|
||||||
|
string Remarks = 5;
|
||||||
|
}
|
16
proto/PluralModel.proto
Normal file
16
proto/PluralModel.proto
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
message PluralModel
|
||||||
|
{
|
||||||
|
bool Fisch = 1;
|
||||||
|
bool Banane = 2;
|
||||||
|
bool Bonbon = 3;
|
||||||
|
bool Ei = 4;
|
||||||
|
bool Eimer = 5;
|
||||||
|
bool Korn = 6;
|
||||||
|
bool Nuss = 7;
|
||||||
|
bool Baer = 8;
|
||||||
|
bool Apfel = 9;
|
||||||
|
}
|
51
proto/V2SvkModel.proto
Normal file
51
proto/V2SvkModel.proto
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
message V2SvkModel
|
||||||
|
{
|
||||||
|
message OneEach
|
||||||
|
{
|
||||||
|
bool Affe = 1;
|
||||||
|
bool Schwein = 2;
|
||||||
|
bool Gans = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message TwoEach
|
||||||
|
{
|
||||||
|
bool Affe1 = 1;
|
||||||
|
bool Affe2 = 2;
|
||||||
|
bool Schwein1 = 3;
|
||||||
|
bool Schwein2 = 4;
|
||||||
|
bool Gans1 = 5;
|
||||||
|
bool Gans2 = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FourEach
|
||||||
|
{
|
||||||
|
bool Affe1 = 1;
|
||||||
|
bool Affe2 = 2;
|
||||||
|
bool Affe3 = 3;
|
||||||
|
bool Affe4 = 4;
|
||||||
|
bool Schwein1 = 5;
|
||||||
|
bool Schwein2 = 6;
|
||||||
|
bool Schwein3 = 7;
|
||||||
|
bool Schwein4 = 8;
|
||||||
|
bool Gans1 = 9;
|
||||||
|
bool Gans2 = 10;
|
||||||
|
bool Gans3 = 11;
|
||||||
|
bool Gans4 = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
FourEach WFrage = 1;
|
||||||
|
OneEach Verbtrennung1 = 2;
|
||||||
|
FourEach SvkSt = 3;
|
||||||
|
FourEach ObjTop = 4;
|
||||||
|
FourEach SvkStamm = 5;
|
||||||
|
TwoEach TempPraes = 6;
|
||||||
|
TwoEach SvkE1 = 7;
|
||||||
|
TwoEach TempPerf = 8;
|
||||||
|
TwoEach Verbtrennung2 = 9;
|
||||||
|
TwoEach SvkE2 = 10;
|
||||||
|
TwoEach Partizip = 11;
|
||||||
|
}
|
42
proto/VerbEndModel.proto
Normal file
42
proto/VerbEndModel.proto
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package ESGRAF48;
|
||||||
|
|
||||||
|
message VerbEndModel
|
||||||
|
{
|
||||||
|
message TelefonatModel
|
||||||
|
{
|
||||||
|
bool Kausal1 = 1;
|
||||||
|
bool Kausal2 = 2;
|
||||||
|
bool Relativ = 3;
|
||||||
|
bool Kausal3 = 4;
|
||||||
|
bool Final = 5;
|
||||||
|
bool Temporal1 = 6;
|
||||||
|
bool Temporal2 = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ZaubertrickModel
|
||||||
|
{
|
||||||
|
bool Relativ = 1;
|
||||||
|
bool Final1 = 2;
|
||||||
|
bool Kausal1 = 3;
|
||||||
|
bool Final2 = 4;
|
||||||
|
bool Temporal1 = 5;
|
||||||
|
bool Kausal2 = 6;
|
||||||
|
bool Temporal2 = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ZauberregelModel
|
||||||
|
{
|
||||||
|
bool Temporal1 = 1;
|
||||||
|
bool Kausal = 2;
|
||||||
|
bool Final = 3;
|
||||||
|
bool Relativ1 = 4;
|
||||||
|
bool Temporal2 = 5;
|
||||||
|
bool Relativ2 = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
TelefonatModel Telefonat = 1;
|
||||||
|
ZaubertrickModel Zaubertrick = 2;
|
||||||
|
ZauberregelModel Zauberregel = 3;
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ project(ESGRAF48 LANGUAGES CXX)
|
||||||
|
|
||||||
find_package(Qt5Widgets REQUIRED)
|
find_package(Qt5Widgets REQUIRED)
|
||||||
find_package(Qt5PrintSupport REQUIRED)
|
find_package(Qt5PrintSupport REQUIRED)
|
||||||
|
find_package(Protobuf REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
set(CMAKE_AUTORCC ON)
|
set(CMAKE_AUTORCC ON)
|
||||||
|
@ -16,6 +17,22 @@ qt5_add_resources(LOGO_TEST_QRC
|
||||||
mainwindow.qrc
|
mainwindow.qrc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(DataModel_PROTO_FILES
|
||||||
|
../proto/DataModel.proto
|
||||||
|
../proto/MetaDataModel.proto
|
||||||
|
../proto/V2SvkModel.proto
|
||||||
|
../proto/VerbEndModel.proto
|
||||||
|
../proto/GenusModel.proto
|
||||||
|
../proto/AkkusativModel.proto
|
||||||
|
../proto/DativModel.proto
|
||||||
|
../proto/PluralModel.proto
|
||||||
|
../proto/LateSkillsPassivModel.proto
|
||||||
|
../proto/LateSkillsGenitivModel.proto
|
||||||
|
)
|
||||||
|
|
||||||
|
protobuf_generate_cpp(DataModel_PROTO_SRCS DataModel_PROTO_HDRS
|
||||||
|
${DataModel_PROTO_FILES})
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} WIN32
|
add_executable(${PROJECT_NAME} WIN32
|
||||||
LogoTest.cpp
|
LogoTest.cpp
|
||||||
DataModel.cpp
|
DataModel.cpp
|
||||||
|
@ -23,6 +40,8 @@ add_executable(${PROJECT_NAME} WIN32
|
||||||
Age.cpp
|
Age.cpp
|
||||||
${LOGO_TEST_UI}
|
${LOGO_TEST_UI}
|
||||||
${LOGO_TEST_QRC}
|
${LOGO_TEST_QRC}
|
||||||
|
${DataModel_PROTO_SRCS}
|
||||||
|
${DataModel_PROTO_HDRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}
|
set_target_properties(${PROJECT_NAME}
|
||||||
|
@ -33,6 +52,7 @@ target_include_directories(${PROJECT_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_LIST_DIR}
|
${CMAKE_CURRENT_LIST_DIR}
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${Protobuf_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
@ -50,6 +70,7 @@ target_link_libraries(${PROJECT_NAME}
|
||||||
ResultWidget
|
ResultWidget
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
Qt5::PrintSupport
|
Qt5::PrintSupport
|
||||||
|
${Protobuf_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_subdirectory(CheckableItem)
|
add_subdirectory(CheckableItem)
|
||||||
|
|
|
@ -30,9 +30,10 @@ public:
|
||||||
|
|
||||||
unsigned int getPoints() const;
|
unsigned int getPoints() const;
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
bool isValidIndex(const QModelIndex &index) const;
|
virtual bool isValidIndex(const QModelIndex &index) const;
|
||||||
|
|
||||||
|
private:
|
||||||
CheckableItems &getItems(const QModelIndex &index);
|
CheckableItems &getItems(const QModelIndex &index);
|
||||||
const CheckableItems &getItems(const QModelIndex &index) const;
|
const CheckableItems &getItems(const QModelIndex &index) const;
|
||||||
|
|
||||||
|
|
|
@ -1,64 +1,86 @@
|
||||||
#include "DataModel.h"
|
#include "DataModel.h"
|
||||||
|
#include "DataModel.pb.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <sstream>
|
||||||
|
|
||||||
DataModel::DataModel(QObject *parent)
|
DataModel::DataModel(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_metaData(this)
|
, m_metaData(this)
|
||||||
, m_verbEnd(this)
|
, m_verbEnd(this)
|
||||||
, m_genus(this)
|
, m_genus(this)
|
||||||
, m_plural(this)
|
, m_plural(this)
|
||||||
, m_results(this)
|
, m_results(this)
|
||||||
, m_akkusativ(this)
|
, m_akkusativ(this)
|
||||||
, m_dativ(this)
|
, m_dativ(this)
|
||||||
, m_v2Svk(this)
|
, m_v2Svk(this)
|
||||||
, m_passiv(this)
|
, m_passiv(this)
|
||||||
, m_genitiv(this)
|
, m_genitiv(this)
|
||||||
{
|
{
|
||||||
connect(&m_plural, &PluralModel::dataChanged, this,
|
connect(&m_plural, &PluralModel::dataChanged, this, &DataModel::pluralModelChanged);
|
||||||
&DataModel::pluralModelChanged);
|
connect(&m_metaData, &MetaDataModel::dataChanged, this, &DataModel::metaDataChanged);
|
||||||
connect(&m_metaData, &MetaDataModel::dataChanged, this,
|
connect(&m_genus, &GenusModel::dataChanged, this, &DataModel::genusModelChanged);
|
||||||
&DataModel::metaDataChanged);
|
connect(&m_verbEnd, &VerbEndModel::dataChanged, this, &DataModel::verbEndModelChanged);
|
||||||
connect(&m_genus, &GenusModel::dataChanged, this,
|
connect(&m_akkusativ, &AkkusativModel::dataChanged, this, &DataModel::akkusativModelChanged);
|
||||||
&DataModel::genusModelChanged);
|
connect(&m_dativ, &DativModel::dataChanged, this, &DataModel::dativModelChanged);
|
||||||
connect(&m_verbEnd, &VerbEndModel::dataChanged, this,
|
connect(&m_v2Svk, &V2SvkModel::dataChanged, this, &DataModel::v2SvkModelChanged);
|
||||||
&DataModel::verbEndModelChanged);
|
connect(&m_passiv, &PassivModel::dataChanged, this, &DataModel::passivModelChanged);
|
||||||
connect(&m_akkusativ, &AkkusativModel::dataChanged, this,
|
connect(&m_genitiv, &GenitivModel::dataChanged, this, &DataModel::genitivModelChanged);
|
||||||
&DataModel::akkusativModelChanged);
|
|
||||||
connect(&m_dativ, &DativModel::dataChanged, this,
|
|
||||||
&DataModel::dativModelChanged);
|
|
||||||
connect(&m_v2Svk, &V2SvkModel::dataChanged, this,
|
|
||||||
&DataModel::v2SvkModelChanged);
|
|
||||||
connect(&m_passiv, &PassivModel::dataChanged, this,
|
|
||||||
&DataModel::passivModelChanged);
|
|
||||||
connect(&m_genitiv, &GenitivModel::dataChanged, this,
|
|
||||||
&DataModel::genitivModelChanged);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataModel::write(QJsonObject &target) const
|
void DataModel::writeProtoBuf(std::ostream &outStream) const
|
||||||
{
|
{
|
||||||
write(m_metaData, target, "MetaData");
|
ESGRAF48::DataModel dataModel;
|
||||||
write(m_verbEnd, target, "VerbEnd");
|
|
||||||
write(m_genus, target, "Genus");
|
m_metaData.writeProtoBuf(*dataModel.mutable_metadata());
|
||||||
write(m_plural, target, "Plural");
|
m_v2Svk.writeProtoBuf(*dataModel.mutable_v2svk());
|
||||||
write(m_akkusativ, target, "Akkusativ");
|
m_verbEnd.writeProtoBuf(*dataModel.mutable_verbend());
|
||||||
write(m_dativ, target, "Dativ");
|
m_genus.writeProtoBuf(*dataModel.mutable_genus());
|
||||||
write(m_v2Svk, target, "V2Svk");
|
m_akkusativ.write(*dataModel.mutable_akkusativ());
|
||||||
write(m_passiv, target, "Passiv");
|
m_dativ.write(*dataModel.mutable_dativ());
|
||||||
write(m_genitiv, target, "Genitiv");
|
m_plural.write(*dataModel.mutable_plural());
|
||||||
|
m_genitiv.write(*dataModel.mutable_lateskillsgenitiv());
|
||||||
|
m_passiv.write(*dataModel.mutable_lateskillspassiv());
|
||||||
|
|
||||||
|
dataModel.SerializeToOstream(&outStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataModel::read(const QJsonObject &source)
|
void DataModel::readProtoBuf(std::istream &inStream)
|
||||||
{
|
{
|
||||||
read(m_metaData, source, "MetaData");
|
ESGRAF48::DataModel dataModel;
|
||||||
read(m_verbEnd, source, "VerbEnd");
|
dataModel.ParseFromIstream(&inStream);
|
||||||
read(m_genus, source, "Genus");
|
|
||||||
read(m_plural, source, "Plural");
|
m_metaData.readProtoBuf(dataModel.metadata());
|
||||||
read(m_akkusativ, source, "Akkusativ");
|
m_v2Svk.readProtoBuf(dataModel.v2svk());
|
||||||
read(m_dativ, source, "Dativ");
|
m_verbEnd.readProtoBuf(dataModel.verbend());
|
||||||
read(m_v2Svk, source, "V2Svk");
|
m_genus.readProtoBuf(dataModel.genus());
|
||||||
read(m_passiv, source, "Passiv");
|
m_akkusativ.read(dataModel.akkusativ());
|
||||||
read(m_genitiv, source, "Genitiv");
|
m_dativ.read(dataModel.dativ());
|
||||||
|
m_plural.read(dataModel.plural());
|
||||||
|
m_genitiv.read(dataModel.lateskillsgenitiv());
|
||||||
|
m_passiv.read(dataModel.lateskillspassiv());
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataModel::pluralModelChanged()
|
void DataModel::pluralModelChanged()
|
||||||
|
@ -113,14 +135,14 @@ void DataModel::v2SvkModelChanged()
|
||||||
|
|
||||||
void DataModel::passivModelChanged()
|
void DataModel::passivModelChanged()
|
||||||
{
|
{
|
||||||
m_results.setPassivResult(m_passiv.getPoints());
|
m_results.setPassivResult(m_passiv.getPoints());
|
||||||
|
|
||||||
emit modelChanged();
|
emit modelChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataModel::genitivModelChanged()
|
void DataModel::genitivModelChanged()
|
||||||
{
|
{
|
||||||
m_results.setGenitivResult(m_genitiv.getPoints());
|
m_results.setGenitivResult(m_genitiv.getPoints());
|
||||||
|
|
||||||
emit modelChanged();
|
emit modelChanged();
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,8 +34,10 @@ public:
|
||||||
public:
|
public:
|
||||||
DataModel(QObject *parent);
|
DataModel(QObject *parent);
|
||||||
|
|
||||||
void write(QJsonObject &target) const;
|
std::string toHtml() const;
|
||||||
void read(const QJsonObject &source);
|
|
||||||
|
void writeProtoBuf(std::ostream &outStream) const;
|
||||||
|
void readProtoBuf(std::istream &inStream);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void modelChanged();
|
void modelChanged();
|
||||||
|
|
|
@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.6)
|
||||||
project(MetaData LANGUAGES CXX)
|
project(MetaData LANGUAGES CXX)
|
||||||
|
|
||||||
find_package(Qt5Widgets REQUIRED)
|
find_package(Qt5Widgets REQUIRED)
|
||||||
|
find_package(Protobuf REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
|
@ -10,10 +11,20 @@ qt5_wrap_ui(META_DATA_UI
|
||||||
MetaDataWidget.ui
|
MetaDataWidget.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(MetaDataModel_PROTO_FILES
|
||||||
|
../../proto/MetaDataModel.proto
|
||||||
|
)
|
||||||
|
|
||||||
|
protobuf_generate_cpp(MetaDataModel_PROTO_SRCS MetaDataModel_PROTO_HDRS
|
||||||
|
${MetaDataModel_PROTO_FILES}
|
||||||
|
)
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}
|
add_library(${PROJECT_NAME}
|
||||||
MetaDataModel.cpp
|
MetaDataModel.cpp
|
||||||
MetaDataWidget.cpp
|
MetaDataWidget.cpp
|
||||||
${META_DATA_UI}
|
${META_DATA_UI}
|
||||||
|
${MetaDataModel_PROTO_SRCS}
|
||||||
|
${MetaDataModel_PROTO_HDRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}
|
set_target_properties(${PROJECT_NAME}
|
||||||
|
@ -23,6 +34,7 @@ set_target_properties(${PROJECT_NAME}
|
||||||
target_include_directories(${PROJECT_NAME}
|
target_include_directories(${PROJECT_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${Protobuf_INCLUDE_DIRS}
|
||||||
INTERFACE
|
INTERFACE
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
|
@ -30,4 +42,5 @@ target_include_directories(${PROJECT_NAME}
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
|
${Protobuf_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,8 +2,10 @@
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
MetaDataModel::MetaDataModel(QObject *parent)
|
MetaDataModel::MetaDataModel(QObject *parent)
|
||||||
: QAbstractTableModel(parent)
|
: QAbstractTableModel(parent)
|
||||||
{
|
{
|
||||||
m_dateOfBirth = QDate::currentDate().addYears(-9);
|
m_dateOfBirth = QDate::currentDate().addYears(-9);
|
||||||
m_dateOfTest = QDate::currentDate();
|
m_dateOfTest = QDate::currentDate();
|
||||||
|
@ -50,8 +52,7 @@ Qt::ItemFlags MetaDataModel::flags(const QModelIndex &modelIndex) const
|
||||||
return QAbstractTableModel::flags(modelIndex) | Qt::ItemIsEditable;
|
return QAbstractTableModel::flags(modelIndex) | Qt::ItemIsEditable;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MetaDataModel::setData(
|
bool MetaDataModel::setData(const QModelIndex &modelIndex, const QVariant &value, int role)
|
||||||
const QModelIndex &modelIndex, const QVariant &value, int role)
|
|
||||||
{
|
{
|
||||||
if (role != Qt::EditRole)
|
if (role != Qt::EditRole)
|
||||||
{
|
{
|
||||||
|
@ -111,20 +112,57 @@ bool MetaDataModel::setData(
|
||||||
return valueChanged;
|
return valueChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MetaDataModel::write(QJsonObject &json) const
|
void MetaDataModel::readProtoBuf(const ESGRAF48::MetaDataModel &model)
|
||||||
{
|
{
|
||||||
json["participant name"] = m_participant;
|
setData(index(0, 0), QString::fromStdString(model.participantname()));
|
||||||
json["instructor name"] = m_instructor;
|
setData(index(0, 1), QString::fromStdString(model.instructorname()));
|
||||||
json["date of birth"] = m_dateOfBirth.toString(Qt::ISODate);
|
setData(index(0, 2), QString::fromStdString(model.dateofbirth()));
|
||||||
json["date of test"] = m_dateOfTest.toString(Qt::ISODate);
|
setData(index(0, 3), QString::fromStdString(model.dateoftest()));
|
||||||
json["remarks"] = m_remarks;
|
setData(index(0, 4), QString::fromStdString(model.remarks()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MetaDataModel::read(const QJsonObject &json)
|
void MetaDataModel::writeProtoBuf(ESGRAF48::MetaDataModel &model) const
|
||||||
{
|
{
|
||||||
setData(index(0, 0), json["participant name"].toVariant(), Qt::EditRole);
|
model.set_participantname(m_participant.toStdString());
|
||||||
setData(index(0, 1), json["instructor name"].toVariant(), Qt::EditRole);
|
model.set_instructorname(m_instructor.toStdString());
|
||||||
setData(index(0, 2), json["date of birth"].toVariant(), Qt::EditRole);
|
model.set_dateofbirth(m_dateOfBirth.toString(Qt::ISODate).toStdString());
|
||||||
setData(index(0, 3), json["date of test"].toVariant(), Qt::EditRole);
|
model.set_dateoftest(m_dateOfTest.toString(Qt::ISODate).toStdString());
|
||||||
setData(index(0, 4), json["remarks"].toVariant(), Qt::EditRole);
|
model.set_remarks(m_remarks.toStdString());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string MetaDataModel::toHtml() const
|
||||||
|
{
|
||||||
|
std::ostringstream out;
|
||||||
|
|
||||||
|
out << "<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" frame=\"box\" rules=\"all\">"
|
||||||
|
<< std::endl;
|
||||||
|
out << "<tr>" << std::endl;
|
||||||
|
out << "<td width=\"25%\">Name, Vorname</td>" << std::endl;
|
||||||
|
out << "<td width=\"25%\">" << m_participant.toHtmlEscaped().toStdString() << "</td>"
|
||||||
|
<< std::endl;
|
||||||
|
out << "<td width=\"25%\">Untersucher(in)</td>" << std::endl;
|
||||||
|
out << "<td width=\"25%\">" << m_instructor.toHtmlEscaped().toStdString() << "</td>"
|
||||||
|
<< std::endl;
|
||||||
|
out << "</tr>" << std::endl;
|
||||||
|
out << "<tr>" << std::endl;
|
||||||
|
out << "<td>Geburtsdatum</td>" << std::endl;
|
||||||
|
out << "<td>" << m_dateOfBirth.toString("dd.MM.yyyy").toHtmlEscaped().toStdString() << "</td>"
|
||||||
|
<< std::endl;
|
||||||
|
out << "<td colspan=\"2\">Bemerkungen</td>" << std::endl;
|
||||||
|
out << "</tr>" << std::endl;
|
||||||
|
out << "<tr>" << std::endl;
|
||||||
|
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;
|
||||||
|
out << "</tr>" << std::endl;
|
||||||
|
out << "<tr>" << std::endl;
|
||||||
|
out << "<td>Alter am Testtag</td>" << std::endl;
|
||||||
|
out << "<td>" << getAge().toString() << "</td>" << std::endl;
|
||||||
|
out << "</tr>" << std::endl;
|
||||||
|
out << "</table>" << std::endl;
|
||||||
|
|
||||||
|
return out.str();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include "../Age.h"
|
#include "../Age.h"
|
||||||
|
|
||||||
|
#include "MetaDataModel.pb.h"
|
||||||
|
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
|
@ -28,8 +30,10 @@ public:
|
||||||
bool setData(const QModelIndex &index, const QVariant &value,
|
bool setData(const QModelIndex &index, const QVariant &value,
|
||||||
int role = Qt::EditRole) override;
|
int role = Qt::EditRole) override;
|
||||||
|
|
||||||
void write(QJsonObject &json) const;
|
void readProtoBuf(const ESGRAF48::MetaDataModel &model);
|
||||||
void read(const QJsonObject &json);
|
void writeProtoBuf(ESGRAF48::MetaDataModel &model) const;
|
||||||
|
|
||||||
|
std::string toHtml() const;
|
||||||
|
|
||||||
Age getAge() const
|
Age getAge() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,15 +1,107 @@
|
||||||
#include "AkkusativModel.h"
|
#include "AkkusativModel.h"
|
||||||
|
|
||||||
AkkusativModel::AkkusativModel(QObject *parent)
|
AkkusativModel::AkkusativModel(QObject *parent)
|
||||||
: CheckableTestModel(parent)
|
: CheckableTestModel(parent)
|
||||||
{
|
{
|
||||||
m_tests = {
|
m_tests = {{"Akkusativ Nominalphrase",
|
||||||
{ "Akkusativ Nominalphrase", { "Tiger", "Katze", "Affe", "Gans", "Bär",
|
{"Tiger", "Katze", "Affe", "Gans", "Bär", "Pferd", "Hund", "Elefant"}},
|
||||||
"Pferd", "Hund", "Elefant" } },
|
{"Präpositionalphrase (Verstecke)",
|
||||||
{ "Präpositionalphrase (Verstecke)",
|
{"Vorhang", "Kiste", "Holz", "Kiste", "Baum", "Vorhang", "Holz", "Baum"}},
|
||||||
{ "Vorhang", "Kiste", "Holz", "Kiste", "Baum", "Vorhang", "Holz",
|
{"Nominalphrase (Futter)",
|
||||||
"Baum" } },
|
{"Salat", "Fleisch", "Knochen", "Banane", "Apfel", "Karotte", "Honig", "Zucker"}}};
|
||||||
{ "Nominalphrase (Futter)", { "Salat", "Fleisch", "Knochen", "Banane",
|
}
|
||||||
"Apfel", "Karotte", "Honig", "Zucker" } }
|
|
||||||
};
|
void AkkusativModel::read(const ESGRAF48::AkkusativModel &model)
|
||||||
|
{
|
||||||
|
const auto &tiereModel = model.tiere();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
testItems[0].setState(tiereModel.tiger());
|
||||||
|
testItems[1].setState(tiereModel.katze());
|
||||||
|
testItems[2].setState(tiereModel.affe());
|
||||||
|
testItems[3].setState(tiereModel.gans());
|
||||||
|
testItems[4].setState(tiereModel.baer());
|
||||||
|
testItems[5].setState(tiereModel.pferd());
|
||||||
|
testItems[6].setState(tiereModel.hund());
|
||||||
|
testItems[7].setState(tiereModel.elefant());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &versteckeModel = model.verstecke();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
testItems[0].setState(versteckeModel.vorhang1());
|
||||||
|
testItems[1].setState(versteckeModel.kiste1());
|
||||||
|
testItems[2].setState(versteckeModel.holz1());
|
||||||
|
testItems[3].setState(versteckeModel.kiste2());
|
||||||
|
testItems[4].setState(versteckeModel.baum1());
|
||||||
|
testItems[5].setState(versteckeModel.vorhang2());
|
||||||
|
testItems[6].setState(versteckeModel.holz2());
|
||||||
|
testItems[7].setState(versteckeModel.baum2());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &futterModel = model.futter();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(2).items();
|
||||||
|
|
||||||
|
testItems[0].setState(futterModel.salat());
|
||||||
|
testItems[1].setState(futterModel.fleisch());
|
||||||
|
testItems[2].setState(futterModel.knochen());
|
||||||
|
testItems[3].setState(futterModel.banane());
|
||||||
|
testItems[4].setState(futterModel.apfel());
|
||||||
|
testItems[5].setState(futterModel.karotte());
|
||||||
|
testItems[6].setState(futterModel.honig());
|
||||||
|
testItems[7].setState(futterModel.zucker());
|
||||||
|
}
|
||||||
|
|
||||||
|
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void AkkusativModel::write(ESGRAF48::AkkusativModel &model) const
|
||||||
|
{
|
||||||
|
auto *tiereModel = model.mutable_tiere();
|
||||||
|
if (tiereModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
tiereModel->set_tiger(testItems[0].isChecked());
|
||||||
|
tiereModel->set_katze(testItems[1].isChecked());
|
||||||
|
tiereModel->set_affe(testItems[2].isChecked());
|
||||||
|
tiereModel->set_gans(testItems[3].isChecked());
|
||||||
|
tiereModel->set_baer(testItems[4].isChecked());
|
||||||
|
tiereModel->set_pferd(testItems[5].isChecked());
|
||||||
|
tiereModel->set_hund(testItems[6].isChecked());
|
||||||
|
tiereModel->set_elefant(testItems[7].isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *versteckeModel = model.mutable_verstecke();
|
||||||
|
if (versteckeModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
versteckeModel->set_vorhang1(testItems[0].isChecked());
|
||||||
|
versteckeModel->set_kiste1(testItems[1].isChecked());
|
||||||
|
versteckeModel->set_holz1(testItems[2].isChecked());
|
||||||
|
versteckeModel->set_kiste2(testItems[3].isChecked());
|
||||||
|
versteckeModel->set_baum1(testItems[4].isChecked());
|
||||||
|
versteckeModel->set_vorhang2(testItems[5].isChecked());
|
||||||
|
versteckeModel->set_holz2(testItems[6].isChecked());
|
||||||
|
versteckeModel->set_baum2(testItems[7].isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *futterModel = model.mutable_futter();
|
||||||
|
if (futterModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(2).items();
|
||||||
|
|
||||||
|
futterModel->set_salat(testItems[0].isChecked());
|
||||||
|
futterModel->set_fleisch(testItems[1].isChecked());
|
||||||
|
futterModel->set_knochen(testItems[2].isChecked());
|
||||||
|
futterModel->set_banane(testItems[3].isChecked());
|
||||||
|
futterModel->set_apfel(testItems[4].isChecked());
|
||||||
|
futterModel->set_karotte(testItems[5].isChecked());
|
||||||
|
futterModel->set_honig(testItems[6].isChecked());
|
||||||
|
futterModel->set_zucker(testItems[7].isChecked());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CheckableTestModel.h"
|
#include "CheckableTestModel.h"
|
||||||
|
#include "AkkusativModel.pb.h"
|
||||||
|
|
||||||
class AkkusativModel : public CheckableTestModel
|
class AkkusativModel : public CheckableTestModel
|
||||||
{
|
{
|
||||||
|
@ -8,4 +9,7 @@ class AkkusativModel : public CheckableTestModel
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AkkusativModel(QObject *parent);
|
AkkusativModel(QObject *parent);
|
||||||
|
|
||||||
|
void read(const ESGRAF48::AkkusativModel &model);
|
||||||
|
void write(ESGRAF48::AkkusativModel &model) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.6)
|
||||||
project(AkkusativDativ LANGUAGES CXX)
|
project(AkkusativDativ LANGUAGES CXX)
|
||||||
|
|
||||||
find_package(Qt5Widgets REQUIRED)
|
find_package(Qt5Widgets REQUIRED)
|
||||||
|
find_package(Protobuf REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
|
@ -10,11 +11,22 @@ qt5_wrap_ui(UI_HEADERS
|
||||||
AkkusativDativWidget.ui
|
AkkusativDativWidget.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(AkkusativDativ_PROTO_FILES
|
||||||
|
../../../proto/AkkusativModel.proto
|
||||||
|
../../../proto/DativModel.proto
|
||||||
|
)
|
||||||
|
|
||||||
|
protobuf_generate_cpp(AkkusativDativ_PROTO_SRCS AkkusativDativ_PROTO_HDRS
|
||||||
|
${AkkusativDativ_PROTO_FILES}
|
||||||
|
)
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}
|
add_library(${PROJECT_NAME}
|
||||||
AkkusativDativWidget.cpp
|
AkkusativDativWidget.cpp
|
||||||
AkkusativModel.cpp
|
AkkusativModel.cpp
|
||||||
DativModel.cpp
|
DativModel.cpp
|
||||||
${UI_HEADERS}
|
${UI_HEADERS}
|
||||||
|
${AkkusativDativ_PROTO_SRCS}
|
||||||
|
${AkkusativDativ_PROTO_HDRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}
|
set_target_properties(${PROJECT_NAME}
|
||||||
|
@ -26,6 +38,7 @@ target_include_directories(${PROJECT_NAME}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${Protobuf_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
@ -34,4 +47,5 @@ target_link_libraries(${PROJECT_NAME}
|
||||||
CheckableTest
|
CheckableTest
|
||||||
CheckableTestModel
|
CheckableTestModel
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
|
${Protobuf_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,15 +1,107 @@
|
||||||
#include "DativModel.h"
|
#include "DativModel.h"
|
||||||
|
|
||||||
DativModel::DativModel(QObject *parent)
|
DativModel::DativModel(QObject *parent)
|
||||||
: CheckableTestModel(parent)
|
: CheckableTestModel(parent)
|
||||||
{
|
{
|
||||||
m_tests = {
|
m_tests = {{"Dativ Nominalphrase",
|
||||||
{ "Dativ Nominalphrase", { "Tiger", "Katze", "Affe", "Gans", "Bär",
|
{"Tiger", "Katze", "Affe", "Gans", "Bär", "Pferd", "Hund", "Elefant"}},
|
||||||
"Pferd", "Hund", "Elefant" } },
|
{"Präpositionalphrase (Verstecke)",
|
||||||
{ "Präpositionalphrase (Verstecke)",
|
{"Vorhang", "Kiste", "Holz", "Kiste", "Baum", "Vorhang", "Holz", "Baum"}},
|
||||||
{ "Vorhang", "Kiste", "Holz", "Kiste", "Baum", "Vorhang", "Holz",
|
{"Nominalphrase (Tiere)",
|
||||||
"Baum" } },
|
{"Salat", "Fleisch", "Knochen", "Banane", "Apfel", "Karotte", "Honig", "Zucker"}}};
|
||||||
{ "Nominalphrase (Tiere)", { "Salat", "Fleisch", "Knochen", "Banane",
|
}
|
||||||
"Apfel", "Karotte", "Honig", "Zucker" } }
|
|
||||||
};
|
void DativModel::read(const ESGRAF48::DativModel &model)
|
||||||
|
{
|
||||||
|
const auto &tiereModel = model.tiere();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
testItems[0].setState(tiereModel.tiger());
|
||||||
|
testItems[1].setState(tiereModel.katze());
|
||||||
|
testItems[2].setState(tiereModel.affe());
|
||||||
|
testItems[3].setState(tiereModel.gans());
|
||||||
|
testItems[4].setState(tiereModel.baer());
|
||||||
|
testItems[5].setState(tiereModel.pferd());
|
||||||
|
testItems[6].setState(tiereModel.hund());
|
||||||
|
testItems[7].setState(tiereModel.elefant());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &versteckeModel = model.verstecke();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
testItems[0].setState(versteckeModel.vorhang1());
|
||||||
|
testItems[1].setState(versteckeModel.kiste1());
|
||||||
|
testItems[2].setState(versteckeModel.holz1());
|
||||||
|
testItems[3].setState(versteckeModel.kiste2());
|
||||||
|
testItems[4].setState(versteckeModel.baum1());
|
||||||
|
testItems[5].setState(versteckeModel.vorhang2());
|
||||||
|
testItems[6].setState(versteckeModel.holz2());
|
||||||
|
testItems[7].setState(versteckeModel.baum2());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &futterModel = model.futter();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(2).items();
|
||||||
|
|
||||||
|
testItems[0].setState(futterModel.salat());
|
||||||
|
testItems[1].setState(futterModel.fleisch());
|
||||||
|
testItems[2].setState(futterModel.knochen());
|
||||||
|
testItems[3].setState(futterModel.banane());
|
||||||
|
testItems[4].setState(futterModel.apfel());
|
||||||
|
testItems[5].setState(futterModel.karotte());
|
||||||
|
testItems[6].setState(futterModel.honig());
|
||||||
|
testItems[7].setState(futterModel.zucker());
|
||||||
|
}
|
||||||
|
|
||||||
|
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DativModel::write(ESGRAF48::DativModel &model) const
|
||||||
|
{
|
||||||
|
auto *tiereModel = model.mutable_tiere();
|
||||||
|
if (tiereModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
tiereModel->set_tiger(testItems[0].isChecked());
|
||||||
|
tiereModel->set_katze(testItems[1].isChecked());
|
||||||
|
tiereModel->set_affe(testItems[2].isChecked());
|
||||||
|
tiereModel->set_gans(testItems[3].isChecked());
|
||||||
|
tiereModel->set_baer(testItems[4].isChecked());
|
||||||
|
tiereModel->set_pferd(testItems[5].isChecked());
|
||||||
|
tiereModel->set_hund(testItems[6].isChecked());
|
||||||
|
tiereModel->set_elefant(testItems[7].isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *versteckeModel = model.mutable_verstecke();
|
||||||
|
if (versteckeModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
versteckeModel->set_vorhang1(testItems[0].isChecked());
|
||||||
|
versteckeModel->set_kiste1(testItems[1].isChecked());
|
||||||
|
versteckeModel->set_holz1(testItems[2].isChecked());
|
||||||
|
versteckeModel->set_kiste2(testItems[3].isChecked());
|
||||||
|
versteckeModel->set_baum1(testItems[4].isChecked());
|
||||||
|
versteckeModel->set_vorhang2(testItems[5].isChecked());
|
||||||
|
versteckeModel->set_holz2(testItems[6].isChecked());
|
||||||
|
versteckeModel->set_baum2(testItems[7].isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *futterModel = model.mutable_futter();
|
||||||
|
if (futterModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(2).items();
|
||||||
|
|
||||||
|
futterModel->set_salat(testItems[0].isChecked());
|
||||||
|
futterModel->set_fleisch(testItems[1].isChecked());
|
||||||
|
futterModel->set_knochen(testItems[2].isChecked());
|
||||||
|
futterModel->set_banane(testItems[3].isChecked());
|
||||||
|
futterModel->set_apfel(testItems[4].isChecked());
|
||||||
|
futterModel->set_karotte(testItems[5].isChecked());
|
||||||
|
futterModel->set_honig(testItems[6].isChecked());
|
||||||
|
futterModel->set_zucker(testItems[7].isChecked());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CheckableTestModel.h"
|
#include "CheckableTestModel.h"
|
||||||
|
#include "DativModel.pb.h"
|
||||||
|
|
||||||
class DativModel : public CheckableTestModel
|
class DativModel : public CheckableTestModel
|
||||||
{
|
{
|
||||||
|
@ -8,4 +9,7 @@ class DativModel : public CheckableTestModel
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DativModel(QObject *parent);
|
DativModel(QObject *parent);
|
||||||
|
|
||||||
|
void read(const ESGRAF48::DativModel &model);
|
||||||
|
void write(ESGRAF48::DativModel &model) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.6)
|
||||||
project(Genus LANGUAGES CXX)
|
project(Genus LANGUAGES CXX)
|
||||||
|
|
||||||
find_package(Qt5Widgets REQUIRED)
|
find_package(Qt5Widgets REQUIRED)
|
||||||
|
find_package(Protobuf REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
|
@ -10,10 +11,18 @@ qt5_wrap_ui(GENUS_UI
|
||||||
GenusWidget.ui
|
GenusWidget.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(Genus_PROTO_FILES
|
||||||
|
../../../proto/GenusModel.proto
|
||||||
|
)
|
||||||
|
|
||||||
|
protobuf_generate_cpp(Genus_PROTO_SRCS Genus_PROTO_HDRS ${Genus_PROTO_FILES})
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}
|
add_library(${PROJECT_NAME}
|
||||||
GenusWidget.cpp
|
GenusWidget.cpp
|
||||||
GenusModel.cpp
|
GenusModel.cpp
|
||||||
${GENUS_UI}
|
${GENUS_UI}
|
||||||
|
${Genus_PROTO_SRCS}
|
||||||
|
${Genus_PROTO_HDRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}
|
set_target_properties(${PROJECT_NAME}
|
||||||
|
@ -25,6 +34,7 @@ target_include_directories(${PROJECT_NAME}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${Protobuf_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
@ -33,4 +43,5 @@ target_link_libraries(${PROJECT_NAME}
|
||||||
CheckableTest
|
CheckableTest
|
||||||
CheckableTestModel
|
CheckableTestModel
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
|
${Protobuf_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,11 +1,97 @@
|
||||||
#include "GenusModel.h"
|
#include "GenusModel.h"
|
||||||
|
|
||||||
GenusModel::GenusModel(QObject *parent)
|
GenusModel::GenusModel(QObject *parent)
|
||||||
: CheckableTestModel(parent)
|
: CheckableTestModel(parent)
|
||||||
{
|
{
|
||||||
m_tests = { { "Tiere", { "Tiger", "Bär", "Katze", "Pferd", "Gans",
|
m_tests = {{"Tiere", {"Tiger", "Bär", "Katze", "Pferd", "Gans", "Elefant", "Affe", "Hund"}},
|
||||||
"Elefant", "Affe", "Hund" } },
|
{"Futter",
|
||||||
{ "Futter", { "Salat", "Fleisch", "Knochen", "Banane", "Apfel", "Karotte",
|
{"Salat", "Fleisch", "Knochen", "Banane", "Apfel", "Karotte", "Honig", "Zucker"}},
|
||||||
"Honig", "Zucker" } },
|
{"Zirkus", {"Kiste", "Holz", "Vorhang", "Baum"}}};
|
||||||
{ "Zirkus", { "Kiste", "Holz", "Vorhang", "Baum" } } };
|
}
|
||||||
|
|
||||||
|
void GenusModel::readProtoBuf(const ESGRAF48::GenusModel &model)
|
||||||
|
{
|
||||||
|
const auto &tiereModel = model.tiere();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
testItems[0].setState(tiereModel.tiger());
|
||||||
|
testItems[1].setState(tiereModel.baer());
|
||||||
|
testItems[2].setState(tiereModel.katze());
|
||||||
|
testItems[3].setState(tiereModel.pferd());
|
||||||
|
testItems[4].setState(tiereModel.gans());
|
||||||
|
testItems[5].setState(tiereModel.elefant());
|
||||||
|
testItems[6].setState(tiereModel.affe());
|
||||||
|
testItems[7].setState(tiereModel.hund());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &futterModel = model.futter();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
testItems[0].setState(futterModel.salat());
|
||||||
|
testItems[1].setState(futterModel.fleisch());
|
||||||
|
testItems[2].setState(futterModel.knochen());
|
||||||
|
testItems[3].setState(futterModel.banane());
|
||||||
|
testItems[4].setState(futterModel.apfel());
|
||||||
|
testItems[5].setState(futterModel.karotte());
|
||||||
|
testItems[6].setState(futterModel.honig());
|
||||||
|
testItems[7].setState(futterModel.zucker());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &zirkusModel = model.zirkus();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(2).items();
|
||||||
|
|
||||||
|
testItems[0].setState(zirkusModel.kiste());
|
||||||
|
testItems[1].setState(zirkusModel.holz());
|
||||||
|
testItems[2].setState(zirkusModel.vorhang());
|
||||||
|
testItems[3].setState(zirkusModel.baum());
|
||||||
|
}
|
||||||
|
|
||||||
|
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void GenusModel::writeProtoBuf(ESGRAF48::GenusModel &model) const
|
||||||
|
{
|
||||||
|
auto *tiereModel = model.mutable_tiere();
|
||||||
|
if (tiereModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
tiereModel->set_tiger(testItems[0].isChecked());
|
||||||
|
tiereModel->set_baer(testItems[1].isChecked());
|
||||||
|
tiereModel->set_katze(testItems[2].isChecked());
|
||||||
|
tiereModel->set_pferd(testItems[3].isChecked());
|
||||||
|
tiereModel->set_gans(testItems[4].isChecked());
|
||||||
|
tiereModel->set_elefant(testItems[5].isChecked());
|
||||||
|
tiereModel->set_affe(testItems[6].isChecked());
|
||||||
|
tiereModel->set_hund(testItems[7].isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *futterModel = model.mutable_futter();
|
||||||
|
if (futterModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
futterModel->set_salat(testItems[0].isChecked());
|
||||||
|
futterModel->set_fleisch(testItems[1].isChecked());
|
||||||
|
futterModel->set_knochen(testItems[2].isChecked());
|
||||||
|
futterModel->set_banane(testItems[3].isChecked());
|
||||||
|
futterModel->set_apfel(testItems[4].isChecked());
|
||||||
|
futterModel->set_karotte(testItems[5].isChecked());
|
||||||
|
futterModel->set_honig(testItems[6].isChecked());
|
||||||
|
futterModel->set_zucker(testItems[7].isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *zirkusModel = model.mutable_zirkus();
|
||||||
|
if (zirkusModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(2).items();
|
||||||
|
|
||||||
|
zirkusModel->set_kiste(testItems[0].isChecked());
|
||||||
|
zirkusModel->set_holz(testItems[1].isChecked());
|
||||||
|
zirkusModel->set_vorhang(testItems[2].isChecked());
|
||||||
|
zirkusModel->set_baum(testItems[3].isChecked());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CheckableTestModel.h"
|
#include "CheckableTestModel.h"
|
||||||
|
#include "GenusModel.pb.h"
|
||||||
|
|
||||||
class GenusModel : public CheckableTestModel
|
class GenusModel : public CheckableTestModel
|
||||||
{
|
{
|
||||||
|
@ -8,4 +9,7 @@ class GenusModel : public CheckableTestModel
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GenusModel(QObject *parent);
|
GenusModel(QObject *parent);
|
||||||
|
|
||||||
|
void readProtoBuf(const ESGRAF48::GenusModel &model);
|
||||||
|
void writeProtoBuf(ESGRAF48::GenusModel &model) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,18 +3,30 @@ cmake_minimum_required(VERSION 3.6)
|
||||||
project(LateSkills LANGUAGES CXX)
|
project(LateSkills LANGUAGES CXX)
|
||||||
|
|
||||||
find_package(Qt5Widgets REQUIRED)
|
find_package(Qt5Widgets REQUIRED)
|
||||||
|
find_package(Protobuf REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
qt5_wrap_ui(UI_HEADERS
|
qt5_wrap_ui(UI_HEADERS
|
||||||
LateSkillsWidget.ui
|
LateSkillsWidget.ui
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LateSkills_PROTO_FILES
|
||||||
|
../../../proto/LateSkillsGenitivModel.proto
|
||||||
|
../../../proto/LateSkillsPassivModel.proto
|
||||||
|
)
|
||||||
|
|
||||||
|
protobuf_generate_cpp(LateSkills_PROTO_SRCS LateSkills_PROTO_HDRS
|
||||||
|
${LateSkills_PROTO_FILES}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}
|
add_library(${PROJECT_NAME}
|
||||||
LateSkillsWidget.cpp
|
LateSkillsWidget.cpp
|
||||||
PassivModel.cpp
|
PassivModel.cpp
|
||||||
GenitivModel.cpp
|
GenitivModel.cpp
|
||||||
${UI_HEADERS}
|
${UI_HEADERS}
|
||||||
|
${LateSkills_PROTO_SRCS}
|
||||||
|
${LateSkills_PROTO_HDRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}
|
set_target_properties(${PROJECT_NAME}
|
||||||
|
@ -23,15 +35,17 @@ set_target_properties(${PROJECT_NAME}
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME}
|
target_include_directories(${PROJECT_NAME}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${Protobuf_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
CheckableItem
|
CheckableItem
|
||||||
CheckableTest
|
CheckableTest
|
||||||
CheckableTestModel
|
CheckableTestModel
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
|
${Protobuf_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,45 +1,109 @@
|
||||||
#include "GenitivModel.h"
|
#include "GenitivModel.h"
|
||||||
|
|
||||||
GenitivModel::GenitivModel(QObject *parent)
|
GenitivModel::GenitivModel(QObject *parent)
|
||||||
: CheckableTestModel(parent)
|
: CheckableTestModel(parent)
|
||||||
{
|
{
|
||||||
m_tests = {
|
m_tests = {
|
||||||
{ "Genitiv Präpositionen",
|
{"Genitiv Präpositionen",
|
||||||
{ "anstelle (1)", "anstelle (2)", "außerhalb (1)", "außerhalb (2)",
|
{"anstelle (1)", "anstelle (2)", "außerhalb (1)", "außerhalb (2)", "mithilfe (1)",
|
||||||
"mithilfe (1)", "mithilfe (2)" } },
|
"mithilfe (2)"}},
|
||||||
{ "Attributierung",
|
{"Attributierung",
|
||||||
{ "Schuhe (1)", "Schuhe (2)", "Zauberstab (1)", "Zauberstab (2)",
|
{"Schuhe (1)", "Schuhe (2)", "Zauberstab (1)", "Zauberstab (2)", "Hut (1)", "Hut (2)",
|
||||||
"Hut (1)", "Hut (2)", "Brille (1)", "Brille (2)", "Gürtel (1)",
|
"Brille (1)", "Brille (2)", "Gürtel (1)", "Gürtel (2)"}},
|
||||||
"Gürtel (2)" } },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
for (auto index : { 1, 3, 5 })
|
for (auto index : {1, 3, 5})
|
||||||
{
|
{
|
||||||
m_tests[0].items()[index].setValue(2);
|
m_tests[0].items()[index].setValue(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto index : { 1, 3, 5, 7, 9 })
|
for (auto index : {1, 3, 5, 7, 9})
|
||||||
{
|
{
|
||||||
m_tests[1].items()[index].setValue(2);
|
m_tests[1].items()[index].setValue(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GenitivModel::setData(
|
bool GenitivModel::setData(const QModelIndex &modelIndex, const QVariant &value, int role)
|
||||||
const QModelIndex &modelIndex, const QVariant &value, int role)
|
|
||||||
{
|
{
|
||||||
if (role == Qt::CheckStateRole && value.toBool() == true)
|
if (role == Qt::CheckStateRole && value.toBool() == true)
|
||||||
{
|
{
|
||||||
if (modelIndex.column() % 2 == 0)
|
if (modelIndex.column() % 2 == 0)
|
||||||
{
|
{
|
||||||
CheckableTestModel::setData(
|
CheckableTestModel::setData(index(modelIndex.row(), modelIndex.column() + 1), false,
|
||||||
index(modelIndex.row(), modelIndex.column() + 1), false, role);
|
role);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckableTestModel::setData(
|
CheckableTestModel::setData(index(modelIndex.row(), modelIndex.column() - 1), false,
|
||||||
index(modelIndex.row(), modelIndex.column() - 1), false, role);
|
role);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return CheckableTestModel::setData(modelIndex, value, role);
|
return CheckableTestModel::setData(modelIndex, value, role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GenitivModel::read(const ESGRAF48::LateSkillsGenitivModel &model)
|
||||||
|
{
|
||||||
|
const auto &praepositionenModel = model.praepositionen();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
testItems[0].setState(praepositionenModel.anstelle1());
|
||||||
|
testItems[1].setState(praepositionenModel.anstelle2());
|
||||||
|
testItems[2].setState(praepositionenModel.ausserhalb1());
|
||||||
|
testItems[3].setState(praepositionenModel.ausserhalb2());
|
||||||
|
testItems[4].setState(praepositionenModel.mithilfe1());
|
||||||
|
testItems[5].setState(praepositionenModel.mithilfe2());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &attributierungModel = model.attributierung();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
testItems[0].setState(attributierungModel.schuhe1());
|
||||||
|
testItems[1].setState(attributierungModel.schuhe2());
|
||||||
|
testItems[2].setState(attributierungModel.zauberstab1());
|
||||||
|
testItems[3].setState(attributierungModel.zauberstab2());
|
||||||
|
testItems[4].setState(attributierungModel.hut1());
|
||||||
|
testItems[5].setState(attributierungModel.hut2());
|
||||||
|
testItems[6].setState(attributierungModel.brille1());
|
||||||
|
testItems[7].setState(attributierungModel.brille2());
|
||||||
|
testItems[8].setState(attributierungModel.guertel1());
|
||||||
|
testItems[9].setState(attributierungModel.guertel2());
|
||||||
|
}
|
||||||
|
|
||||||
|
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void GenitivModel::write(ESGRAF48::LateSkillsGenitivModel &model) const
|
||||||
|
{
|
||||||
|
auto *praepositionenModel = model.mutable_praepositionen();
|
||||||
|
if (praepositionenModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
praepositionenModel->set_anstelle1(testItems[0].isChecked());
|
||||||
|
praepositionenModel->set_anstelle2(testItems[1].isChecked());
|
||||||
|
praepositionenModel->set_ausserhalb1(testItems[2].isChecked());
|
||||||
|
praepositionenModel->set_ausserhalb2(testItems[3].isChecked());
|
||||||
|
praepositionenModel->set_mithilfe1(testItems[4].isChecked());
|
||||||
|
praepositionenModel->set_mithilfe2(testItems[5].isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *attributierungModel = model.mutable_attributierung();
|
||||||
|
if (attributierungModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
attributierungModel->set_schuhe1(testItems[0].isChecked());
|
||||||
|
attributierungModel->set_schuhe2(testItems[1].isChecked());
|
||||||
|
attributierungModel->set_zauberstab1(testItems[2].isChecked());
|
||||||
|
attributierungModel->set_zauberstab2(testItems[3].isChecked());
|
||||||
|
attributierungModel->set_hut1(testItems[4].isChecked());
|
||||||
|
attributierungModel->set_hut2(testItems[5].isChecked());
|
||||||
|
attributierungModel->set_brille1(testItems[6].isChecked());
|
||||||
|
attributierungModel->set_brille2(testItems[7].isChecked());
|
||||||
|
attributierungModel->set_guertel1(testItems[8].isChecked());
|
||||||
|
attributierungModel->set_guertel2(testItems[9].isChecked());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CheckableTestModel.h"
|
#include "CheckableTestModel.h"
|
||||||
|
#include "LateSkillsGenitivModel.pb.h"
|
||||||
|
|
||||||
class GenitivModel : public CheckableTestModel
|
class GenitivModel : public CheckableTestModel
|
||||||
{
|
{
|
||||||
|
@ -10,4 +11,7 @@ public:
|
||||||
GenitivModel(QObject *parent);
|
GenitivModel(QObject *parent);
|
||||||
bool setData(const QModelIndex &index, const QVariant &value,
|
bool setData(const QModelIndex &index, const QVariant &value,
|
||||||
int role = Qt::EditRole) override;
|
int role = Qt::EditRole) override;
|
||||||
|
|
||||||
|
void read(const ESGRAF48::LateSkillsGenitivModel &model);
|
||||||
|
void write(ESGRAF48::LateSkillsGenitivModel &model) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,35 +1,67 @@
|
||||||
#include "PassivModel.h"
|
#include "PassivModel.h"
|
||||||
|
|
||||||
PassivModel::PassivModel(QObject *parent)
|
PassivModel::PassivModel(QObject *parent)
|
||||||
: CheckableTestModel(parent)
|
: CheckableTestModel(parent)
|
||||||
{
|
{
|
||||||
m_tests = { { "Passiv",
|
m_tests = {{"Passiv",
|
||||||
{ "Elefant (1)", "Elefant (2)", "Pferde (1)", "Pferde (2)", "Bälle (1)",
|
{"Elefant (1)", "Elefant (2)", "Pferde (1)", "Pferde (2)", "Bälle (1)", "Bälle (2)",
|
||||||
"Bälle (2)", "Ball (1)", "Ball (2)", "Fleisch (1)",
|
"Ball (1)", "Ball (2)", "Fleisch (1)", "Fleisch (2)"}}};
|
||||||
"Fleisch (2)" } } };
|
|
||||||
|
|
||||||
for (auto index : { 1, 3, 5, 7, 9 })
|
for (auto index : {1, 3, 5, 7, 9})
|
||||||
{
|
{
|
||||||
m_tests[0].items()[index].setValue(2);
|
m_tests[0].items()[index].setValue(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PassivModel::setData(
|
bool PassivModel::setData(const QModelIndex &modelIndex, const QVariant &value, int role)
|
||||||
const QModelIndex &modelIndex, const QVariant &value, int role)
|
|
||||||
{
|
{
|
||||||
if (role == Qt::CheckStateRole && value.toBool() == true)
|
if (role == Qt::CheckStateRole && value.toBool() == true)
|
||||||
{
|
{
|
||||||
if (modelIndex.column() % 2 == 0)
|
if (modelIndex.column() % 2 == 0)
|
||||||
{
|
{
|
||||||
CheckableTestModel::setData(
|
CheckableTestModel::setData(index(modelIndex.row(), modelIndex.column() + 1), false,
|
||||||
index(modelIndex.row(), modelIndex.column() + 1), false, role);
|
role);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckableTestModel::setData(
|
CheckableTestModel::setData(index(modelIndex.row(), modelIndex.column() - 1), false,
|
||||||
index(modelIndex.row(), modelIndex.column() - 1), false, role);
|
role);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return CheckableTestModel::setData(modelIndex, value, role);
|
return CheckableTestModel::setData(modelIndex, value, role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PassivModel::read(const ESGRAF48::LateSkillsPassivModel &model)
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
testItems[0].setState(model.elefant1());
|
||||||
|
testItems[1].setState(model.elefant2());
|
||||||
|
testItems[2].setState(model.pferde1());
|
||||||
|
testItems[3].setState(model.pferde2());
|
||||||
|
testItems[4].setState(model.baelle1());
|
||||||
|
testItems[5].setState(model.baelle2());
|
||||||
|
testItems[6].setState(model.ball1());
|
||||||
|
testItems[7].setState(model.ball2());
|
||||||
|
testItems[8].setState(model.fleisch1());
|
||||||
|
testItems[9].setState(model.fleisch2());
|
||||||
|
|
||||||
|
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void PassivModel::write(ESGRAF48::LateSkillsPassivModel &model) const
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
model.set_elefant1(testItems[0].isChecked());
|
||||||
|
model.set_elefant2(testItems[1].isChecked());
|
||||||
|
model.set_pferde1(testItems[2].isChecked());
|
||||||
|
model.set_pferde2(testItems[3].isChecked());
|
||||||
|
model.set_baelle1(testItems[4].isChecked());
|
||||||
|
model.set_baelle2(testItems[5].isChecked());
|
||||||
|
model.set_ball1(testItems[6].isChecked());
|
||||||
|
model.set_ball2(testItems[7].isChecked());
|
||||||
|
model.set_fleisch1(testItems[8].isChecked());
|
||||||
|
model.set_fleisch2(testItems[9].isChecked());
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CheckableTestModel.h"
|
#include "CheckableTestModel.h"
|
||||||
|
#include "LateSkillsPassivModel.pb.h"
|
||||||
|
|
||||||
class PassivModel : public CheckableTestModel
|
class PassivModel : public CheckableTestModel
|
||||||
{
|
{
|
||||||
|
@ -10,4 +11,7 @@ public:
|
||||||
PassivModel(QObject *parent);
|
PassivModel(QObject *parent);
|
||||||
bool setData(const QModelIndex &index, const QVariant &value,
|
bool setData(const QModelIndex &index, const QVariant &value,
|
||||||
int role = Qt::EditRole) override;
|
int role = Qt::EditRole) override;
|
||||||
|
|
||||||
|
void read(const ESGRAF48::LateSkillsPassivModel &model);
|
||||||
|
void write(ESGRAF48::LateSkillsPassivModel &model) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.6)
|
||||||
project(Plural LANGUAGES CXX)
|
project(Plural LANGUAGES CXX)
|
||||||
|
|
||||||
find_package(Qt5Widgets REQUIRED)
|
find_package(Qt5Widgets REQUIRED)
|
||||||
|
find_package(Protobuf REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
|
@ -10,10 +11,18 @@ qt5_wrap_ui(UI_HEADERS
|
||||||
PluralWidget.ui
|
PluralWidget.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(Plural_PROTO_FILES
|
||||||
|
../../../proto/PluralModel.proto
|
||||||
|
)
|
||||||
|
|
||||||
|
protobuf_generate_cpp(Plural_PROTO_SRCS Plural_PROTO_HDRS ${Plural_PROTO_FILES})
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}
|
add_library(${PROJECT_NAME}
|
||||||
PluralWidget.cpp
|
PluralWidget.cpp
|
||||||
PluralModel.cpp
|
PluralModel.cpp
|
||||||
${UI_HEADERS}
|
${UI_HEADERS}
|
||||||
|
${Plural_PROTO_SRCS}
|
||||||
|
${Plural_PROTO_HDRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}
|
set_target_properties(${PROJECT_NAME}
|
||||||
|
@ -25,6 +34,7 @@ target_include_directories(${PROJECT_NAME}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${Protobuf_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
@ -33,4 +43,5 @@ target_link_libraries(${PROJECT_NAME}
|
||||||
CheckableTest
|
CheckableTest
|
||||||
CheckableTestModel
|
CheckableTestModel
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
|
${Protobuf_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,20 +3,51 @@
|
||||||
#include <QSize>
|
#include <QSize>
|
||||||
|
|
||||||
PluralModel::PluralModel(QObject *parent)
|
PluralModel::PluralModel(QObject *parent)
|
||||||
: CheckableTestModel(parent)
|
: CheckableTestModel(parent)
|
||||||
{
|
{
|
||||||
m_tests = { { "",
|
m_tests = {{"",
|
||||||
{ "Fisch /-e/", "Banane /-n/", "Bonbon /-s/", "Ei /-er/", "Eimer /-ø/",
|
{"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"}}};
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant PluralModel::data(const QModelIndex &index, int role) const
|
QVariant PluralModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
if (role == Qt::SizeHintRole)
|
if (role == Qt::SizeHintRole)
|
||||||
{
|
{
|
||||||
return QSize(180, 0);
|
return QSize(180, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return CheckableTestModel::data(index, role);
|
return CheckableTestModel::data(index, role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PluralModel::read(const ESGRAF48::PluralModel &model)
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
testItems[0].setState(model.fisch());
|
||||||
|
testItems[1].setState(model.banane());
|
||||||
|
testItems[2].setState(model.bonbon());
|
||||||
|
testItems[3].setState(model.ei());
|
||||||
|
testItems[4].setState(model.eimer());
|
||||||
|
testItems[5].setState(model.korn());
|
||||||
|
testItems[6].setState(model.nuss());
|
||||||
|
testItems[7].setState(model.baer());
|
||||||
|
testItems[8].setState(model.apfel());
|
||||||
|
|
||||||
|
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void PluralModel::write(ESGRAF48::PluralModel &model) const
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
model.set_fisch(testItems[0].isChecked());
|
||||||
|
model.set_banane(testItems[1].isChecked());
|
||||||
|
model.set_bonbon(testItems[2].isChecked());
|
||||||
|
model.set_ei(testItems[3].isChecked());
|
||||||
|
model.set_eimer(testItems[4].isChecked());
|
||||||
|
model.set_korn(testItems[5].isChecked());
|
||||||
|
model.set_nuss(testItems[6].isChecked());
|
||||||
|
model.set_baer(testItems[7].isChecked());
|
||||||
|
model.set_apfel(testItems[8].isChecked());
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CheckableTestModel.h"
|
#include "CheckableTestModel.h"
|
||||||
|
#include "PluralModel.pb.h"
|
||||||
|
|
||||||
class PluralModel : public CheckableTestModel
|
class PluralModel : public CheckableTestModel
|
||||||
{
|
{
|
||||||
|
@ -11,4 +12,7 @@ public:
|
||||||
|
|
||||||
QVariant data(
|
QVariant data(
|
||||||
const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
|
||||||
|
void read(const ESGRAF48::PluralModel &model);
|
||||||
|
void write(ESGRAF48::PluralModel &model) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.6)
|
||||||
project(V2Svk LANGUAGES CXX)
|
project(V2Svk LANGUAGES CXX)
|
||||||
|
|
||||||
find_package(Qt5Widgets REQUIRED)
|
find_package(Qt5Widgets REQUIRED)
|
||||||
|
find_package(Protobuf REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
|
@ -10,10 +11,18 @@ qt5_wrap_ui(UI_HEADERS
|
||||||
V2SvkWidget.ui
|
V2SvkWidget.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(V2Svk_PROTO_FILES
|
||||||
|
../../../proto/V2SvkModel.proto
|
||||||
|
)
|
||||||
|
|
||||||
|
protobuf_generate_cpp(V2Svk_PROTO_SRCS V2Svk_PROTO_HDRS ${V2Svk_PROTO_FILES})
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}
|
add_library(${PROJECT_NAME}
|
||||||
V2SvkWidget.cpp
|
V2SvkWidget.cpp
|
||||||
V2SvkModel.cpp
|
V2SvkModel.cpp
|
||||||
${UI_HEADERS}
|
${UI_HEADERS}
|
||||||
|
${V2Svk_PROTO_SRCS}
|
||||||
|
${V2Svk_PROTO_HDRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}
|
set_target_properties(${PROJECT_NAME}
|
||||||
|
@ -25,6 +34,7 @@ target_include_directories(${PROJECT_NAME}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${Protobuf_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
@ -33,4 +43,5 @@ target_link_libraries(${PROJECT_NAME}
|
||||||
CheckableTest
|
CheckableTest
|
||||||
CheckableTestModel
|
CheckableTestModel
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
|
${Protobuf_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,46 +1,39 @@
|
||||||
#include "V2SvkModel.h"
|
#include "V2SvkModel.h"
|
||||||
|
|
||||||
V2SvkModel::V2SvkModel(QObject *parent)
|
V2SvkModel::V2SvkModel(QObject *parent)
|
||||||
: CheckableTestModel(parent)
|
: CheckableTestModel(parent)
|
||||||
{
|
{
|
||||||
m_tests = {
|
m_tests = {
|
||||||
{ "W-Frage",
|
{"W-Frage",
|
||||||
{ "Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein",
|
{"Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein", "Gans",
|
||||||
"Gans" , "Gans", "Gans", "Gans"} },
|
"Gans", "Gans", "Gans"}},
|
||||||
{ "Verbtrennung",
|
{"Verbtrennung", {"", "Affe", "", "", "", "", "", "Schwein", "", "", "Gans", ""}},
|
||||||
{ "", "Affe", "", "", "", "", "", "Schwein", "" , "", "Gans", ""} },
|
{"SVK: /-st/",
|
||||||
{ "SVK: /-st/",
|
{"Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein", "Gans",
|
||||||
{ "Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein",
|
"Gans", "Gans", "Gans"}},
|
||||||
"Gans" , "Gans", "Gans", "Gans"} },
|
|
||||||
|
|
||||||
{ "Objekt-Topikalisierung",
|
{"Objekt-Topikalisierung",
|
||||||
{ "Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein",
|
{"Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein", "Gans",
|
||||||
"Gans" , "Gans", "Gans", "Gans"} },
|
"Gans", "Gans", "Gans"}},
|
||||||
{ "SVK: Stamm",
|
{"SVK: Stamm",
|
||||||
{ "Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein",
|
{"Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein", "Gans",
|
||||||
"Gans" , "Gans", "Gans", "Gans"} },
|
"Gans", "Gans", "Gans"}},
|
||||||
|
|
||||||
{ "Temporaladverb Präsens",
|
{"Temporaladverb Präsens", {"Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans"}},
|
||||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
{"SKV: /-e/ o. Stamm", {"Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans"}},
|
||||||
{ "SKV: /-e/ o. Stamm",
|
|
||||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
|
||||||
|
|
||||||
{ "Temporaladverb Perfekt",
|
{"Temporaladverb Perfekt", {"Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans"}},
|
||||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
{"Verbtrennung", {"Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans"}},
|
||||||
{ "Verbtrennung",
|
{"SVK: /-e/ o. Stamm", {"Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans"}},
|
||||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
{"Partizip", {"Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans"}},
|
||||||
{ "SVK: /-e/ o. Stamm",
|
|
||||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
|
||||||
{ "Partizip",
|
|
||||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int V2SvkModel::getV2Points()
|
unsigned int V2SvkModel::getV2Points()
|
||||||
{
|
{
|
||||||
unsigned int points = 0;
|
unsigned int points = 0;
|
||||||
|
|
||||||
for (auto testIndex : { 0, 1, 3, 5, 7, 8 })
|
for (auto testIndex : {0, 1, 3, 5, 7, 8})
|
||||||
{
|
{
|
||||||
const auto &test = m_tests.at(testIndex);
|
const auto &test = m_tests.at(testIndex);
|
||||||
|
|
||||||
|
@ -58,9 +51,9 @@ unsigned int V2SvkModel::getV2Points()
|
||||||
|
|
||||||
unsigned int V2SvkModel::getSvkPoints()
|
unsigned int V2SvkModel::getSvkPoints()
|
||||||
{
|
{
|
||||||
unsigned int points = 0;
|
unsigned int points = 0;
|
||||||
|
|
||||||
for (auto testIndex : { 2, 4, 6, 9, 10 })
|
for (auto testIndex : {2, 4, 6, 9, 10})
|
||||||
{
|
{
|
||||||
const auto &test = m_tests.at(testIndex);
|
const auto &test = m_tests.at(testIndex);
|
||||||
|
|
||||||
|
@ -75,3 +68,134 @@ unsigned int V2SvkModel::getSvkPoints()
|
||||||
|
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool V2SvkModel::isValidIndex(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
switch (index.row())
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
return index.column() == 1 || index.column() == 7 || index.column() == 10;
|
||||||
|
case 5:
|
||||||
|
case 6:
|
||||||
|
case 7:
|
||||||
|
case 8:
|
||||||
|
case 9:
|
||||||
|
case 10:
|
||||||
|
return index.column() < 6;
|
||||||
|
default:
|
||||||
|
return CheckableTestModel::isValidIndex(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void V2SvkModel::writeProtoBuf(ESGRAF48::V2SvkModel &model) const
|
||||||
|
{
|
||||||
|
auto writeOneVal = [&](ESGRAF48::V2SvkModel::OneEach *modelData, int testIndex) {
|
||||||
|
if (modelData != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(testIndex).items();
|
||||||
|
|
||||||
|
modelData->set_affe(testItems[1].isChecked());
|
||||||
|
modelData->set_schwein(testItems[7].isChecked());
|
||||||
|
modelData->set_gans(testItems[10].isChecked());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
auto writeTwoVals = [&](ESGRAF48::V2SvkModel::TwoEach *modelData, int testIndex) {
|
||||||
|
if (modelData != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(testIndex).items();
|
||||||
|
|
||||||
|
modelData->set_affe1(testItems[0].isChecked());
|
||||||
|
modelData->set_affe2(testItems[1].isChecked());
|
||||||
|
modelData->set_schwein1(testItems[2].isChecked());
|
||||||
|
modelData->set_schwein2(testItems[3].isChecked());
|
||||||
|
modelData->set_gans1(testItems[4].isChecked());
|
||||||
|
modelData->set_gans2(testItems[5].isChecked());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
auto writeFourVals = [&](ESGRAF48::V2SvkModel::FourEach *modelData, int testIndex) {
|
||||||
|
if (modelData != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(testIndex).items();
|
||||||
|
|
||||||
|
modelData->set_affe1(testItems[0].isChecked());
|
||||||
|
modelData->set_affe2(testItems[1].isChecked());
|
||||||
|
modelData->set_affe3(testItems[2].isChecked());
|
||||||
|
modelData->set_affe4(testItems[3].isChecked());
|
||||||
|
modelData->set_schwein1(testItems[4].isChecked());
|
||||||
|
modelData->set_schwein2(testItems[5].isChecked());
|
||||||
|
modelData->set_schwein3(testItems[6].isChecked());
|
||||||
|
modelData->set_schwein4(testItems[7].isChecked());
|
||||||
|
modelData->set_gans1(testItems[8].isChecked());
|
||||||
|
modelData->set_gans2(testItems[9].isChecked());
|
||||||
|
modelData->set_gans3(testItems[10].isChecked());
|
||||||
|
modelData->set_gans4(testItems[11].isChecked());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
writeFourVals(model.mutable_wfrage(), 0);
|
||||||
|
writeOneVal(model.mutable_verbtrennung1(), 1);
|
||||||
|
writeFourVals(model.mutable_svkst(), 2);
|
||||||
|
writeFourVals(model.mutable_objtop(), 3);
|
||||||
|
writeFourVals(model.mutable_svkstamm(), 4);
|
||||||
|
writeTwoVals(model.mutable_temppraes(), 5);
|
||||||
|
writeTwoVals(model.mutable_svke1(), 6);
|
||||||
|
writeTwoVals(model.mutable_tempperf(), 7);
|
||||||
|
writeTwoVals(model.mutable_verbtrennung2(), 8);
|
||||||
|
writeTwoVals(model.mutable_svke2(), 9);
|
||||||
|
writeTwoVals(model.mutable_partizip(), 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
void V2SvkModel::readProtoBuf(const ESGRAF48::V2SvkModel &model)
|
||||||
|
{
|
||||||
|
auto readOneVal = [&](const ESGRAF48::V2SvkModel::OneEach &modelData, int testIndex) {
|
||||||
|
auto &testItems = m_tests.at(testIndex).items();
|
||||||
|
|
||||||
|
testItems[1].setState(modelData.affe());
|
||||||
|
testItems[7].setState(modelData.schwein());
|
||||||
|
testItems[10].setState(modelData.gans());
|
||||||
|
};
|
||||||
|
|
||||||
|
auto readTwoVals = [&](const ESGRAF48::V2SvkModel::TwoEach &modelData, int testIndex) {
|
||||||
|
auto &testItems = m_tests.at(testIndex).items();
|
||||||
|
|
||||||
|
testItems[0].setState(modelData.affe1());
|
||||||
|
testItems[1].setState(modelData.affe2());
|
||||||
|
testItems[2].setState(modelData.schwein1());
|
||||||
|
testItems[3].setState(modelData.schwein2());
|
||||||
|
testItems[4].setState(modelData.gans1());
|
||||||
|
testItems[5].setState(modelData.gans2());
|
||||||
|
};
|
||||||
|
|
||||||
|
auto readFourVals = [&](const ESGRAF48::V2SvkModel::FourEach &modelData, int testIndex) {
|
||||||
|
auto &testItems = m_tests.at(testIndex).items();
|
||||||
|
|
||||||
|
testItems[0].setState(modelData.affe1());
|
||||||
|
testItems[1].setState(modelData.affe2());
|
||||||
|
testItems[2].setState(modelData.affe3());
|
||||||
|
testItems[3].setState(modelData.affe4());
|
||||||
|
testItems[4].setState(modelData.schwein1());
|
||||||
|
testItems[5].setState(modelData.schwein2());
|
||||||
|
testItems[6].setState(modelData.schwein3());
|
||||||
|
testItems[7].setState(modelData.schwein4());
|
||||||
|
testItems[8].setState(modelData.gans1());
|
||||||
|
testItems[9].setState(modelData.gans2());
|
||||||
|
testItems[10].setState(modelData.gans3());
|
||||||
|
testItems[11].setState(modelData.gans4());
|
||||||
|
};
|
||||||
|
|
||||||
|
readFourVals(model.wfrage(), 0);
|
||||||
|
readOneVal(model.verbtrennung1(), 1);
|
||||||
|
readFourVals(model.svkst(), 2);
|
||||||
|
readFourVals(model.objtop(), 3);
|
||||||
|
readFourVals(model.svkstamm(), 4);
|
||||||
|
readTwoVals(model.temppraes(), 5);
|
||||||
|
readTwoVals(model.svke1(), 6);
|
||||||
|
readTwoVals(model.tempperf(), 7);
|
||||||
|
readTwoVals(model.verbtrennung2(), 8);
|
||||||
|
readTwoVals(model.svke2(), 9);
|
||||||
|
readTwoVals(model.partizip(), 10);
|
||||||
|
|
||||||
|
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CheckableTestModel.h"
|
#include "CheckableTestModel.h"
|
||||||
|
#include "V2SvkModel.pb.h"
|
||||||
|
|
||||||
class V2SvkModel : public CheckableTestModel
|
class V2SvkModel : public CheckableTestModel
|
||||||
{
|
{
|
||||||
|
@ -11,4 +12,10 @@ public:
|
||||||
|
|
||||||
unsigned int getV2Points();
|
unsigned int getV2Points();
|
||||||
unsigned int getSvkPoints();
|
unsigned int getSvkPoints();
|
||||||
|
|
||||||
|
void writeProtoBuf(ESGRAF48::V2SvkModel &model) const;
|
||||||
|
void readProtoBuf(const ESGRAF48::V2SvkModel &model);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool isValidIndex(const QModelIndex &index) const override;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.6)
|
||||||
project(VerbEnd LANGUAGES CXX)
|
project(VerbEnd LANGUAGES CXX)
|
||||||
|
|
||||||
find_package(Qt5Widgets REQUIRED)
|
find_package(Qt5Widgets REQUIRED)
|
||||||
|
find_package(Protobuf REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
|
@ -10,10 +11,18 @@ qt5_wrap_ui(UI_HEADERS
|
||||||
VerbEndWidget.ui
|
VerbEndWidget.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(VerbEnd_PROTO_FILES
|
||||||
|
../../../proto/VerbEndModel.proto
|
||||||
|
)
|
||||||
|
|
||||||
|
protobuf_generate_cpp(VerbEnd_PROTO_SRCS VerbEnd_PROTO_HDRS ${VerbEnd_PROTO_FILES})
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}
|
add_library(${PROJECT_NAME}
|
||||||
VerbEndWidget.cpp
|
VerbEndWidget.cpp
|
||||||
VerbEndModel.cpp
|
VerbEndModel.cpp
|
||||||
${UI_HEADERS}
|
${UI_HEADERS}
|
||||||
|
${VerbEnd_PROTO_SRCS}
|
||||||
|
${VerbEnd_PROTO_HDRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}
|
set_target_properties(${PROJECT_NAME}
|
||||||
|
@ -25,6 +34,7 @@ target_include_directories(${PROJECT_NAME}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${Protobuf_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
@ -33,4 +43,5 @@ target_link_libraries(${PROJECT_NAME}
|
||||||
CheckableTest
|
CheckableTest
|
||||||
CheckableTestModel
|
CheckableTestModel
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
|
${Protobuf_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
|
@ -11,3 +11,90 @@ VerbEndModel::VerbEndModel(QObject *parent)
|
||||||
{ "Zauberregel", { "Temporal", "Kausal", "Final", "Relativ",
|
{ "Zauberregel", { "Temporal", "Kausal", "Final", "Relativ",
|
||||||
"Temporal", "Relativ" } } };
|
"Temporal", "Relativ" } } };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VerbEndModel::writeProtoBuf(ESGRAF48::VerbEndModel &model) const
|
||||||
|
{
|
||||||
|
auto *telefonatModel = model.mutable_telefonat();
|
||||||
|
if (telefonatModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
telefonatModel->set_kausal1(testItems[0].isChecked());
|
||||||
|
telefonatModel->set_kausal2(testItems[1].isChecked());
|
||||||
|
telefonatModel->set_relativ(testItems[2].isChecked());
|
||||||
|
telefonatModel->set_kausal3(testItems[3].isChecked());
|
||||||
|
telefonatModel->set_final(testItems[4].isChecked());
|
||||||
|
telefonatModel->set_temporal1(testItems[5].isChecked());
|
||||||
|
telefonatModel->set_temporal2(testItems[6].isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *zaubertrickModel = model.mutable_zaubertrick();
|
||||||
|
if (zaubertrickModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
zaubertrickModel->set_relativ(testItems[0].isChecked());
|
||||||
|
zaubertrickModel->set_final1(testItems[1].isChecked());
|
||||||
|
zaubertrickModel->set_kausal1(testItems[2].isChecked());
|
||||||
|
zaubertrickModel->set_final2(testItems[3].isChecked());
|
||||||
|
zaubertrickModel->set_temporal1(testItems[4].isChecked());
|
||||||
|
zaubertrickModel->set_kausal2(testItems[5].isChecked());
|
||||||
|
zaubertrickModel->set_temporal2(testItems[6].isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *zauberregelModel = model.mutable_zauberregel();
|
||||||
|
if (zauberregelModel != nullptr)
|
||||||
|
{
|
||||||
|
const auto &testItems = m_tests.at(2).items();
|
||||||
|
|
||||||
|
zauberregelModel->set_temporal1(testItems[0].isChecked());
|
||||||
|
zauberregelModel->set_kausal(testItems[1].isChecked());
|
||||||
|
zauberregelModel->set_final(testItems[2].isChecked());
|
||||||
|
zauberregelModel->set_relativ1(testItems[3].isChecked());
|
||||||
|
zauberregelModel->set_temporal2(testItems[4].isChecked());
|
||||||
|
zauberregelModel->set_relativ2(testItems[5].isChecked());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VerbEndModel::readProtoBuf(const ESGRAF48::VerbEndModel &model)
|
||||||
|
{
|
||||||
|
const auto &telefonatModel = model.telefonat();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(0).items();
|
||||||
|
|
||||||
|
testItems[0].setState(telefonatModel.kausal1());
|
||||||
|
testItems[1].setState(telefonatModel.kausal2());
|
||||||
|
testItems[2].setState(telefonatModel.relativ());
|
||||||
|
testItems[3].setState(telefonatModel.kausal3());
|
||||||
|
testItems[4].setState(telefonatModel.final());
|
||||||
|
testItems[5].setState(telefonatModel.temporal1());
|
||||||
|
testItems[6].setState(telefonatModel.temporal2());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &zaubertrickModel = model.zaubertrick();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(1).items();
|
||||||
|
|
||||||
|
testItems[0].setState(zaubertrickModel.relativ());
|
||||||
|
testItems[1].setState(zaubertrickModel.final1());
|
||||||
|
testItems[2].setState(zaubertrickModel.kausal1());
|
||||||
|
testItems[3].setState(zaubertrickModel.final2());
|
||||||
|
testItems[4].setState(zaubertrickModel.temporal1());
|
||||||
|
testItems[5].setState(zaubertrickModel.kausal2());
|
||||||
|
testItems[6].setState(zaubertrickModel.temporal2());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &zauberregelModel = model.zauberregel();
|
||||||
|
{
|
||||||
|
auto &testItems = m_tests.at(2).items();
|
||||||
|
|
||||||
|
testItems[0].setState(zauberregelModel.temporal1());
|
||||||
|
testItems[1].setState(zauberregelModel.kausal());
|
||||||
|
testItems[2].setState(zauberregelModel.final());
|
||||||
|
testItems[3].setState(zauberregelModel.relativ1());
|
||||||
|
testItems[4].setState(zauberregelModel.temporal2());
|
||||||
|
testItems[5].setState(zauberregelModel.relativ2());
|
||||||
|
}
|
||||||
|
|
||||||
|
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CheckableTestModel.h"
|
#include "CheckableTestModel.h"
|
||||||
|
#include "VerbEndModel.pb.h"
|
||||||
|
|
||||||
class VerbEndModel : public CheckableTestModel
|
class VerbEndModel : public CheckableTestModel
|
||||||
{
|
{
|
||||||
|
@ -8,4 +9,7 @@ class VerbEndModel : public CheckableTestModel
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VerbEndModel(QObject *parent);
|
VerbEndModel(QObject *parent);
|
||||||
|
|
||||||
|
void writeProtoBuf(ESGRAF48::VerbEndModel &model) const;
|
||||||
|
void readProtoBuf(const ESGRAF48::VerbEndModel &model);
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
: QMainWindow(parent)
|
: QMainWindow(parent)
|
||||||
, ui(new Ui::MainWindow)
|
, ui(new Ui::MainWindow)
|
||||||
|
@ -72,17 +74,8 @@ void MainWindow::openFile()
|
||||||
|
|
||||||
closeFile();
|
closeFile();
|
||||||
|
|
||||||
QFile loadFile(filename);
|
std::fstream protoInFile(filename.toStdString(), std::ios::in | std::ios::binary);
|
||||||
if (!loadFile.open(QFile::ReadOnly))
|
m_dataModel->readProtoBuf(protoInFile);
|
||||||
{
|
|
||||||
qWarning("Could not open file");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray byteData = loadFile.readAll();
|
|
||||||
QJsonDocument loadDoc = QJsonDocument::fromJson(byteData);
|
|
||||||
|
|
||||||
m_dataModel->read(loadDoc.object());
|
|
||||||
|
|
||||||
setWindowModified(false);
|
setWindowModified(false);
|
||||||
setWindowTitle(filename + "[*]");
|
setWindowTitle(filename + "[*]");
|
||||||
|
@ -135,6 +128,9 @@ void MainWindow::closeFile()
|
||||||
|
|
||||||
void MainWindow::print() const
|
void MainWindow::print() const
|
||||||
{
|
{
|
||||||
|
//std::ofstream htmlfile("print.html");
|
||||||
|
//htmlfile << m_dataModel->toHtml();
|
||||||
|
|
||||||
QPrinter printer;
|
QPrinter printer;
|
||||||
|
|
||||||
QPrintDialog dialog(&printer);
|
QPrintDialog dialog(&printer);
|
||||||
|
@ -144,12 +140,7 @@ void MainWindow::print() const
|
||||||
}
|
}
|
||||||
|
|
||||||
QTextDocument printDoc;
|
QTextDocument printDoc;
|
||||||
printDoc.setHtml(
|
printDoc.setHtml(QString::fromStdString(m_dataModel->toHtml()));
|
||||||
"<html>"
|
|
||||||
"<body>"
|
|
||||||
"<h2>Hello World</h2>"
|
|
||||||
"</body>"
|
|
||||||
"</hthml>");
|
|
||||||
|
|
||||||
printDoc.print(&printer);
|
printDoc.print(&printer);
|
||||||
}
|
}
|
||||||
|
@ -167,15 +158,9 @@ void MainWindow::closeEvent(QCloseEvent *event)
|
||||||
|
|
||||||
void MainWindow::saveFile(const QString &filename)
|
void MainWindow::saveFile(const QString &filename)
|
||||||
{
|
{
|
||||||
QJsonObject saveData;
|
std::fstream protoOutFile(filename.toStdString(),
|
||||||
m_dataModel->write(saveData);
|
std::ios::out | std::ios::trunc | std::ios::binary);
|
||||||
|
m_dataModel->writeProtoBuf(protoOutFile);
|
||||||
QJsonDocument saveDoc(saveData);
|
|
||||||
|
|
||||||
QFile saveFile(filename);
|
|
||||||
saveFile.open(QFile::WriteOnly);
|
|
||||||
saveFile.write(saveDoc.toJson());
|
|
||||||
saveFile.close();
|
|
||||||
|
|
||||||
qDebug() << "Wrote" << filename;
|
qDebug() << "Wrote" << filename;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue