Merge branch 'feature/save-to-protobuf' into develop
commit
6f35ffda7f
|
@ -2,3 +2,4 @@ compile_commands.json
|
|||
_*/
|
||||
build-*
|
||||
*.user
|
||||
tags
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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(Qt5PrintSupport REQUIRED)
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
@ -16,6 +17,22 @@ qt5_add_resources(LOGO_TEST_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
|
||||
LogoTest.cpp
|
||||
DataModel.cpp
|
||||
|
@ -23,6 +40,8 @@ add_executable(${PROJECT_NAME} WIN32
|
|||
Age.cpp
|
||||
${LOGO_TEST_UI}
|
||||
${LOGO_TEST_QRC}
|
||||
${DataModel_PROTO_SRCS}
|
||||
${DataModel_PROTO_HDRS}
|
||||
)
|
||||
|
||||
set_target_properties(${PROJECT_NAME}
|
||||
|
@ -33,6 +52,7 @@ target_include_directories(${PROJECT_NAME}
|
|||
PRIVATE
|
||||
${CMAKE_CURRENT_LIST_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${Protobuf_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
@ -50,6 +70,7 @@ target_link_libraries(${PROJECT_NAME}
|
|||
ResultWidget
|
||||
Qt5::Widgets
|
||||
Qt5::PrintSupport
|
||||
${Protobuf_LIBRARIES}
|
||||
)
|
||||
|
||||
add_subdirectory(CheckableItem)
|
||||
|
|
|
@ -30,9 +30,10 @@ public:
|
|||
|
||||
unsigned int getPoints() const;
|
||||
|
||||
private:
|
||||
bool isValidIndex(const QModelIndex &index) const;
|
||||
protected:
|
||||
virtual bool isValidIndex(const QModelIndex &index) const;
|
||||
|
||||
private:
|
||||
CheckableItems &getItems(const QModelIndex &index);
|
||||
const CheckableItems &getItems(const QModelIndex &index) const;
|
||||
|
||||
|
|
|
@ -1,64 +1,86 @@
|
|||
#include "DataModel.h"
|
||||
#include "DataModel.pb.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <sstream>
|
||||
|
||||
DataModel::DataModel(QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_metaData(this)
|
||||
, m_verbEnd(this)
|
||||
, m_genus(this)
|
||||
, m_plural(this)
|
||||
, m_results(this)
|
||||
, m_akkusativ(this)
|
||||
, m_dativ(this)
|
||||
, m_v2Svk(this)
|
||||
: QObject(parent)
|
||||
, m_metaData(this)
|
||||
, m_verbEnd(this)
|
||||
, m_genus(this)
|
||||
, m_plural(this)
|
||||
, m_results(this)
|
||||
, m_akkusativ(this)
|
||||
, m_dativ(this)
|
||||
, m_v2Svk(this)
|
||||
, m_passiv(this)
|
||||
, m_genitiv(this)
|
||||
{
|
||||
connect(&m_plural, &PluralModel::dataChanged, this,
|
||||
&DataModel::pluralModelChanged);
|
||||
connect(&m_metaData, &MetaDataModel::dataChanged, this,
|
||||
&DataModel::metaDataChanged);
|
||||
connect(&m_genus, &GenusModel::dataChanged, this,
|
||||
&DataModel::genusModelChanged);
|
||||
connect(&m_verbEnd, &VerbEndModel::dataChanged, this,
|
||||
&DataModel::verbEndModelChanged);
|
||||
connect(&m_akkusativ, &AkkusativModel::dataChanged, this,
|
||||
&DataModel::akkusativModelChanged);
|
||||
connect(&m_dativ, &DativModel::dataChanged, this,
|
||||
&DataModel::dativModelChanged);
|
||||
connect(&m_v2Svk, &V2SvkModel::dataChanged, this,
|
||||
&DataModel::v2SvkModelChanged);
|
||||
connect(&m_passiv, &PassivModel::dataChanged, this,
|
||||
&DataModel::passivModelChanged);
|
||||
connect(&m_genitiv, &GenitivModel::dataChanged, this,
|
||||
&DataModel::genitivModelChanged);
|
||||
connect(&m_plural, &PluralModel::dataChanged, this, &DataModel::pluralModelChanged);
|
||||
connect(&m_metaData, &MetaDataModel::dataChanged, this, &DataModel::metaDataChanged);
|
||||
connect(&m_genus, &GenusModel::dataChanged, this, &DataModel::genusModelChanged);
|
||||
connect(&m_verbEnd, &VerbEndModel::dataChanged, this, &DataModel::verbEndModelChanged);
|
||||
connect(&m_akkusativ, &AkkusativModel::dataChanged, this, &DataModel::akkusativModelChanged);
|
||||
connect(&m_dativ, &DativModel::dataChanged, this, &DataModel::dativModelChanged);
|
||||
connect(&m_v2Svk, &V2SvkModel::dataChanged, this, &DataModel::v2SvkModelChanged);
|
||||
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");
|
||||
write(m_verbEnd, target, "VerbEnd");
|
||||
write(m_genus, target, "Genus");
|
||||
write(m_plural, target, "Plural");
|
||||
write(m_akkusativ, target, "Akkusativ");
|
||||
write(m_dativ, target, "Dativ");
|
||||
write(m_v2Svk, target, "V2Svk");
|
||||
write(m_passiv, target, "Passiv");
|
||||
write(m_genitiv, target, "Genitiv");
|
||||
ESGRAF48::DataModel dataModel;
|
||||
|
||||
m_metaData.writeProtoBuf(*dataModel.mutable_metadata());
|
||||
m_v2Svk.writeProtoBuf(*dataModel.mutable_v2svk());
|
||||
m_verbEnd.writeProtoBuf(*dataModel.mutable_verbend());
|
||||
m_genus.writeProtoBuf(*dataModel.mutable_genus());
|
||||
m_akkusativ.write(*dataModel.mutable_akkusativ());
|
||||
m_dativ.write(*dataModel.mutable_dativ());
|
||||
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");
|
||||
read(m_verbEnd, source, "VerbEnd");
|
||||
read(m_genus, source, "Genus");
|
||||
read(m_plural, source, "Plural");
|
||||
read(m_akkusativ, source, "Akkusativ");
|
||||
read(m_dativ, source, "Dativ");
|
||||
read(m_v2Svk, source, "V2Svk");
|
||||
read(m_passiv, source, "Passiv");
|
||||
read(m_genitiv, source, "Genitiv");
|
||||
ESGRAF48::DataModel dataModel;
|
||||
dataModel.ParseFromIstream(&inStream);
|
||||
|
||||
m_metaData.readProtoBuf(dataModel.metadata());
|
||||
m_v2Svk.readProtoBuf(dataModel.v2svk());
|
||||
m_verbEnd.readProtoBuf(dataModel.verbend());
|
||||
m_genus.readProtoBuf(dataModel.genus());
|
||||
m_akkusativ.read(dataModel.akkusativ());
|
||||
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()
|
||||
|
@ -113,14 +135,14 @@ void DataModel::v2SvkModelChanged()
|
|||
|
||||
void DataModel::passivModelChanged()
|
||||
{
|
||||
m_results.setPassivResult(m_passiv.getPoints());
|
||||
m_results.setPassivResult(m_passiv.getPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
void DataModel::genitivModelChanged()
|
||||
{
|
||||
m_results.setGenitivResult(m_genitiv.getPoints());
|
||||
m_results.setGenitivResult(m_genitiv.getPoints());
|
||||
|
||||
emit modelChanged();
|
||||
}
|
||||
|
|
|
@ -34,8 +34,10 @@ public:
|
|||
public:
|
||||
DataModel(QObject *parent);
|
||||
|
||||
void write(QJsonObject &target) const;
|
||||
void read(const QJsonObject &source);
|
||||
std::string toHtml() const;
|
||||
|
||||
void writeProtoBuf(std::ostream &outStream) const;
|
||||
void readProtoBuf(std::istream &inStream);
|
||||
|
||||
signals:
|
||||
void modelChanged();
|
||||
|
|
|
@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.6)
|
|||
project(MetaData LANGUAGES CXX)
|
||||
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
|
@ -10,10 +11,20 @@ qt5_wrap_ui(META_DATA_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}
|
||||
MetaDataModel.cpp
|
||||
MetaDataWidget.cpp
|
||||
${META_DATA_UI}
|
||||
${MetaDataModel_PROTO_SRCS}
|
||||
${MetaDataModel_PROTO_HDRS}
|
||||
)
|
||||
|
||||
set_target_properties(${PROJECT_NAME}
|
||||
|
@ -23,6 +34,7 @@ set_target_properties(${PROJECT_NAME}
|
|||
target_include_directories(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${Protobuf_INCLUDE_DIRS}
|
||||
INTERFACE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
@ -30,4 +42,5 @@ target_include_directories(${PROJECT_NAME}
|
|||
target_link_libraries(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
Qt5::Widgets
|
||||
${Protobuf_LIBRARIES}
|
||||
)
|
||||
|
|
|
@ -2,8 +2,10 @@
|
|||
|
||||
#include <QDebug>
|
||||
|
||||
#include <sstream>
|
||||
|
||||
MetaDataModel::MetaDataModel(QObject *parent)
|
||||
: QAbstractTableModel(parent)
|
||||
: QAbstractTableModel(parent)
|
||||
{
|
||||
m_dateOfBirth = QDate::currentDate().addYears(-9);
|
||||
m_dateOfTest = QDate::currentDate();
|
||||
|
@ -50,8 +52,7 @@ Qt::ItemFlags MetaDataModel::flags(const QModelIndex &modelIndex) const
|
|||
return QAbstractTableModel::flags(modelIndex) | Qt::ItemIsEditable;
|
||||
}
|
||||
|
||||
bool MetaDataModel::setData(
|
||||
const QModelIndex &modelIndex, const QVariant &value, int role)
|
||||
bool MetaDataModel::setData(const QModelIndex &modelIndex, const QVariant &value, int role)
|
||||
{
|
||||
if (role != Qt::EditRole)
|
||||
{
|
||||
|
@ -111,20 +112,57 @@ bool MetaDataModel::setData(
|
|||
return valueChanged;
|
||||
}
|
||||
|
||||
void MetaDataModel::write(QJsonObject &json) const
|
||||
void MetaDataModel::readProtoBuf(const ESGRAF48::MetaDataModel &model)
|
||||
{
|
||||
json["participant name"] = m_participant;
|
||||
json["instructor name"] = m_instructor;
|
||||
json["date of birth"] = m_dateOfBirth.toString(Qt::ISODate);
|
||||
json["date of test"] = m_dateOfTest.toString(Qt::ISODate);
|
||||
json["remarks"] = m_remarks;
|
||||
setData(index(0, 0), QString::fromStdString(model.participantname()));
|
||||
setData(index(0, 1), QString::fromStdString(model.instructorname()));
|
||||
setData(index(0, 2), QString::fromStdString(model.dateofbirth()));
|
||||
setData(index(0, 3), QString::fromStdString(model.dateoftest()));
|
||||
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);
|
||||
setData(index(0, 1), json["instructor name"].toVariant(), Qt::EditRole);
|
||||
setData(index(0, 2), json["date of birth"].toVariant(), Qt::EditRole);
|
||||
setData(index(0, 3), json["date of test"].toVariant(), Qt::EditRole);
|
||||
setData(index(0, 4), json["remarks"].toVariant(), Qt::EditRole);
|
||||
model.set_participantname(m_participant.toStdString());
|
||||
model.set_instructorname(m_instructor.toStdString());
|
||||
model.set_dateofbirth(m_dateOfBirth.toString(Qt::ISODate).toStdString());
|
||||
model.set_dateoftest(m_dateOfTest.toString(Qt::ISODate).toStdString());
|
||||
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 "MetaDataModel.pb.h"
|
||||
|
||||
#include <QAbstractTableModel>
|
||||
#include <QString>
|
||||
#include <QDate>
|
||||
|
@ -28,8 +30,10 @@ public:
|
|||
bool setData(const QModelIndex &index, const QVariant &value,
|
||||
int role = Qt::EditRole) override;
|
||||
|
||||
void write(QJsonObject &json) const;
|
||||
void read(const QJsonObject &json);
|
||||
void readProtoBuf(const ESGRAF48::MetaDataModel &model);
|
||||
void writeProtoBuf(ESGRAF48::MetaDataModel &model) const;
|
||||
|
||||
std::string toHtml() const;
|
||||
|
||||
Age getAge() const
|
||||
{
|
||||
|
|
|
@ -1,15 +1,107 @@
|
|||
#include "AkkusativModel.h"
|
||||
|
||||
AkkusativModel::AkkusativModel(QObject *parent)
|
||||
: CheckableTestModel(parent)
|
||||
: CheckableTestModel(parent)
|
||||
{
|
||||
m_tests = {
|
||||
{ "Akkusativ Nominalphrase", { "Tiger", "Katze", "Affe", "Gans", "Bär",
|
||||
"Pferd", "Hund", "Elefant" } },
|
||||
{ "Präpositionalphrase (Verstecke)",
|
||||
{ "Vorhang", "Kiste", "Holz", "Kiste", "Baum", "Vorhang", "Holz",
|
||||
"Baum" } },
|
||||
{ "Nominalphrase (Futter)", { "Salat", "Fleisch", "Knochen", "Banane",
|
||||
"Apfel", "Karotte", "Honig", "Zucker" } }
|
||||
};
|
||||
m_tests = {{"Akkusativ Nominalphrase",
|
||||
{"Tiger", "Katze", "Affe", "Gans", "Bär", "Pferd", "Hund", "Elefant"}},
|
||||
{"Präpositionalphrase (Verstecke)",
|
||||
{"Vorhang", "Kiste", "Holz", "Kiste", "Baum", "Vorhang", "Holz", "Baum"}},
|
||||
{"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
|
||||
|
||||
#include "CheckableTestModel.h"
|
||||
#include "AkkusativModel.pb.h"
|
||||
|
||||
class AkkusativModel : public CheckableTestModel
|
||||
{
|
||||
|
@ -8,4 +9,7 @@ class AkkusativModel : public CheckableTestModel
|
|||
|
||||
public:
|
||||
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)
|
||||
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
|
@ -10,11 +11,22 @@ qt5_wrap_ui(UI_HEADERS
|
|||
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}
|
||||
AkkusativDativWidget.cpp
|
||||
AkkusativModel.cpp
|
||||
DativModel.cpp
|
||||
${UI_HEADERS}
|
||||
${AkkusativDativ_PROTO_SRCS}
|
||||
${AkkusativDativ_PROTO_HDRS}
|
||||
)
|
||||
|
||||
set_target_properties(${PROJECT_NAME}
|
||||
|
@ -26,6 +38,7 @@ target_include_directories(${PROJECT_NAME}
|
|||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${Protobuf_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
@ -34,4 +47,5 @@ target_link_libraries(${PROJECT_NAME}
|
|||
CheckableTest
|
||||
CheckableTestModel
|
||||
Qt5::Widgets
|
||||
${Protobuf_LIBRARIES}
|
||||
)
|
||||
|
|
|
@ -1,15 +1,107 @@
|
|||
#include "DativModel.h"
|
||||
|
||||
DativModel::DativModel(QObject *parent)
|
||||
: CheckableTestModel(parent)
|
||||
: CheckableTestModel(parent)
|
||||
{
|
||||
m_tests = {
|
||||
{ "Dativ Nominalphrase", { "Tiger", "Katze", "Affe", "Gans", "Bär",
|
||||
"Pferd", "Hund", "Elefant" } },
|
||||
{ "Präpositionalphrase (Verstecke)",
|
||||
{ "Vorhang", "Kiste", "Holz", "Kiste", "Baum", "Vorhang", "Holz",
|
||||
"Baum" } },
|
||||
{ "Nominalphrase (Tiere)", { "Salat", "Fleisch", "Knochen", "Banane",
|
||||
"Apfel", "Karotte", "Honig", "Zucker" } }
|
||||
};
|
||||
m_tests = {{"Dativ Nominalphrase",
|
||||
{"Tiger", "Katze", "Affe", "Gans", "Bär", "Pferd", "Hund", "Elefant"}},
|
||||
{"Präpositionalphrase (Verstecke)",
|
||||
{"Vorhang", "Kiste", "Holz", "Kiste", "Baum", "Vorhang", "Holz", "Baum"}},
|
||||
{"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
|
||||
|
||||
#include "CheckableTestModel.h"
|
||||
#include "DativModel.pb.h"
|
||||
|
||||
class DativModel : public CheckableTestModel
|
||||
{
|
||||
|
@ -8,4 +9,7 @@ class DativModel : public CheckableTestModel
|
|||
|
||||
public:
|
||||
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)
|
||||
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
|
@ -10,10 +11,18 @@ qt5_wrap_ui(GENUS_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}
|
||||
GenusWidget.cpp
|
||||
GenusModel.cpp
|
||||
${GENUS_UI}
|
||||
${Genus_PROTO_SRCS}
|
||||
${Genus_PROTO_HDRS}
|
||||
)
|
||||
|
||||
set_target_properties(${PROJECT_NAME}
|
||||
|
@ -25,6 +34,7 @@ target_include_directories(${PROJECT_NAME}
|
|||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${Protobuf_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
@ -33,4 +43,5 @@ target_link_libraries(${PROJECT_NAME}
|
|||
CheckableTest
|
||||
CheckableTestModel
|
||||
Qt5::Widgets
|
||||
${Protobuf_LIBRARIES}
|
||||
)
|
||||
|
|
|
@ -1,11 +1,97 @@
|
|||
#include "GenusModel.h"
|
||||
|
||||
GenusModel::GenusModel(QObject *parent)
|
||||
: CheckableTestModel(parent)
|
||||
: CheckableTestModel(parent)
|
||||
{
|
||||
m_tests = { { "Tiere", { "Tiger", "Bär", "Katze", "Pferd", "Gans",
|
||||
"Elefant", "Affe", "Hund" } },
|
||||
{ "Futter", { "Salat", "Fleisch", "Knochen", "Banane", "Apfel", "Karotte",
|
||||
"Honig", "Zucker" } },
|
||||
{ "Zirkus", { "Kiste", "Holz", "Vorhang", "Baum" } } };
|
||||
m_tests = {{"Tiere", {"Tiger", "Bär", "Katze", "Pferd", "Gans", "Elefant", "Affe", "Hund"}},
|
||||
{"Futter",
|
||||
{"Salat", "Fleisch", "Knochen", "Banane", "Apfel", "Karotte", "Honig", "Zucker"}},
|
||||
{"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
|
||||
|
||||
#include "CheckableTestModel.h"
|
||||
#include "GenusModel.pb.h"
|
||||
|
||||
class GenusModel : public CheckableTestModel
|
||||
{
|
||||
|
@ -8,4 +9,7 @@ class GenusModel : public CheckableTestModel
|
|||
|
||||
public:
|
||||
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)
|
||||
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
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}
|
||||
LateSkillsWidget.cpp
|
||||
LateSkillsWidget.cpp
|
||||
PassivModel.cpp
|
||||
GenitivModel.cpp
|
||||
${UI_HEADERS}
|
||||
${LateSkills_PROTO_SRCS}
|
||||
${LateSkills_PROTO_HDRS}
|
||||
)
|
||||
|
||||
set_target_properties(${PROJECT_NAME}
|
||||
|
@ -23,15 +35,17 @@ set_target_properties(${PROJECT_NAME}
|
|||
|
||||
target_include_directories(${PROJECT_NAME}
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${Protobuf_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
CheckableItem
|
||||
CheckableTest
|
||||
CheckableTestModel
|
||||
Qt5::Widgets
|
||||
CheckableItem
|
||||
CheckableTest
|
||||
CheckableTestModel
|
||||
Qt5::Widgets
|
||||
${Protobuf_LIBRARIES}
|
||||
)
|
||||
|
|
|
@ -1,45 +1,109 @@
|
|||
#include "GenitivModel.h"
|
||||
|
||||
GenitivModel::GenitivModel(QObject *parent)
|
||||
: CheckableTestModel(parent)
|
||||
: CheckableTestModel(parent)
|
||||
{
|
||||
m_tests = {
|
||||
{ "Genitiv Präpositionen",
|
||||
{ "anstelle (1)", "anstelle (2)", "außerhalb (1)", "außerhalb (2)",
|
||||
"mithilfe (1)", "mithilfe (2)" } },
|
||||
{ "Attributierung",
|
||||
{ "Schuhe (1)", "Schuhe (2)", "Zauberstab (1)", "Zauberstab (2)",
|
||||
"Hut (1)", "Hut (2)", "Brille (1)", "Brille (2)", "Gürtel (1)",
|
||||
"Gürtel (2)" } },
|
||||
{"Genitiv Präpositionen",
|
||||
{"anstelle (1)", "anstelle (2)", "außerhalb (1)", "außerhalb (2)", "mithilfe (1)",
|
||||
"mithilfe (2)"}},
|
||||
{"Attributierung",
|
||||
{"Schuhe (1)", "Schuhe (2)", "Zauberstab (1)", "Zauberstab (2)", "Hut (1)", "Hut (2)",
|
||||
"Brille (1)", "Brille (2)", "Gürtel (1)", "Gürtel (2)"}},
|
||||
};
|
||||
|
||||
for (auto index : { 1, 3, 5 })
|
||||
for (auto index : {1, 3, 5})
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
bool GenitivModel::setData(
|
||||
const QModelIndex &modelIndex, const QVariant &value, int role)
|
||||
bool GenitivModel::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);
|
||||
CheckableTestModel::setData(index(modelIndex.row(), modelIndex.column() + 1), false,
|
||||
role);
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckableTestModel::setData(
|
||||
index(modelIndex.row(), modelIndex.column() - 1), false, role);
|
||||
CheckableTestModel::setData(index(modelIndex.row(), modelIndex.column() - 1), false,
|
||||
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
|
||||
|
||||
#include "CheckableTestModel.h"
|
||||
#include "LateSkillsGenitivModel.pb.h"
|
||||
|
||||
class GenitivModel : public CheckableTestModel
|
||||
{
|
||||
|
@ -10,4 +11,7 @@ public:
|
|||
GenitivModel(QObject *parent);
|
||||
bool setData(const QModelIndex &index, const QVariant &value,
|
||||
int role = Qt::EditRole) override;
|
||||
|
||||
void read(const ESGRAF48::LateSkillsGenitivModel &model);
|
||||
void write(ESGRAF48::LateSkillsGenitivModel &model) const;
|
||||
};
|
||||
|
|
|
@ -1,35 +1,67 @@
|
|||
#include "PassivModel.h"
|
||||
|
||||
PassivModel::PassivModel(QObject *parent)
|
||||
: CheckableTestModel(parent)
|
||||
: CheckableTestModel(parent)
|
||||
{
|
||||
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)" } } };
|
||||
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 })
|
||||
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)
|
||||
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);
|
||||
CheckableTestModel::setData(index(modelIndex.row(), modelIndex.column() + 1), false,
|
||||
role);
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckableTestModel::setData(
|
||||
index(modelIndex.row(), modelIndex.column() - 1), false, role);
|
||||
CheckableTestModel::setData(index(modelIndex.row(), modelIndex.column() - 1), false,
|
||||
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
|
||||
|
||||
#include "CheckableTestModel.h"
|
||||
#include "LateSkillsPassivModel.pb.h"
|
||||
|
||||
class PassivModel : public CheckableTestModel
|
||||
{
|
||||
|
@ -10,4 +11,7 @@ public:
|
|||
PassivModel(QObject *parent);
|
||||
bool setData(const QModelIndex &index, const QVariant &value,
|
||||
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)
|
||||
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
|
@ -10,10 +11,18 @@ qt5_wrap_ui(UI_HEADERS
|
|||
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}
|
||||
PluralWidget.cpp
|
||||
PluralModel.cpp
|
||||
${UI_HEADERS}
|
||||
${Plural_PROTO_SRCS}
|
||||
${Plural_PROTO_HDRS}
|
||||
)
|
||||
|
||||
set_target_properties(${PROJECT_NAME}
|
||||
|
@ -25,6 +34,7 @@ target_include_directories(${PROJECT_NAME}
|
|||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${Protobuf_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
@ -33,4 +43,5 @@ target_link_libraries(${PROJECT_NAME}
|
|||
CheckableTest
|
||||
CheckableTestModel
|
||||
Qt5::Widgets
|
||||
${Protobuf_LIBRARIES}
|
||||
)
|
||||
|
|
|
@ -3,20 +3,51 @@
|
|||
#include <QSize>
|
||||
|
||||
PluralModel::PluralModel(QObject *parent)
|
||||
: CheckableTestModel(parent)
|
||||
: CheckableTestModel(parent)
|
||||
{
|
||||
m_tests = { { "",
|
||||
{ "Fisch /-e/", "Banane /-n/", "Bonbon /-s/", "Ei /-er/", "Eimer /-ø/",
|
||||
"Korn UML+/-er/", "Nuss UML+/-e/", "Bär /-en/", "Apfel UML" } } };
|
||||
m_tests = {{"",
|
||||
{"Fisch /-e/", "Banane /-n/", "Bonbon /-s/", "Ei /-er/", "Eimer /-ø/",
|
||||
"Korn UML+/-er/", "Nuss UML+/-e/", "Bär /-en/", "Apfel UML"}}};
|
||||
}
|
||||
|
||||
QVariant PluralModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (role == Qt::SizeHintRole)
|
||||
{
|
||||
return QSize(180, 0);
|
||||
}
|
||||
if (role == Qt::SizeHintRole)
|
||||
{
|
||||
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
|
||||
|
||||
#include "CheckableTestModel.h"
|
||||
#include "PluralModel.pb.h"
|
||||
|
||||
class PluralModel : public CheckableTestModel
|
||||
{
|
||||
|
@ -11,4 +12,7 @@ public:
|
|||
|
||||
QVariant data(
|
||||
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)
|
||||
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
|
@ -10,10 +11,18 @@ qt5_wrap_ui(UI_HEADERS
|
|||
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}
|
||||
V2SvkWidget.cpp
|
||||
V2SvkModel.cpp
|
||||
${UI_HEADERS}
|
||||
${V2Svk_PROTO_SRCS}
|
||||
${V2Svk_PROTO_HDRS}
|
||||
)
|
||||
|
||||
set_target_properties(${PROJECT_NAME}
|
||||
|
@ -25,6 +34,7 @@ target_include_directories(${PROJECT_NAME}
|
|||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${Protobuf_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
@ -33,4 +43,5 @@ target_link_libraries(${PROJECT_NAME}
|
|||
CheckableTest
|
||||
CheckableTestModel
|
||||
Qt5::Widgets
|
||||
${Protobuf_LIBRARIES}
|
||||
)
|
||||
|
|
|
@ -1,46 +1,39 @@
|
|||
#include "V2SvkModel.h"
|
||||
|
||||
V2SvkModel::V2SvkModel(QObject *parent)
|
||||
: CheckableTestModel(parent)
|
||||
: CheckableTestModel(parent)
|
||||
{
|
||||
m_tests = {
|
||||
{ "W-Frage",
|
||||
{ "Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein",
|
||||
"Gans" , "Gans", "Gans", "Gans"} },
|
||||
{ "Verbtrennung",
|
||||
{ "", "Affe", "", "", "", "", "", "Schwein", "" , "", "Gans", ""} },
|
||||
{ "SVK: /-st/",
|
||||
{ "Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein",
|
||||
"Gans" , "Gans", "Gans", "Gans"} },
|
||||
m_tests = {
|
||||
{"W-Frage",
|
||||
{"Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein", "Gans",
|
||||
"Gans", "Gans", "Gans"}},
|
||||
{"Verbtrennung", {"", "Affe", "", "", "", "", "", "Schwein", "", "", "Gans", ""}},
|
||||
{"SVK: /-st/",
|
||||
{"Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein", "Gans",
|
||||
"Gans", "Gans", "Gans"}},
|
||||
|
||||
{ "Objekt-Topikalisierung",
|
||||
{ "Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein",
|
||||
"Gans" , "Gans", "Gans", "Gans"} },
|
||||
{ "SVK: Stamm",
|
||||
{ "Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein",
|
||||
"Gans" , "Gans", "Gans", "Gans"} },
|
||||
{"Objekt-Topikalisierung",
|
||||
{"Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein", "Gans",
|
||||
"Gans", "Gans", "Gans"}},
|
||||
{"SVK: Stamm",
|
||||
{"Affe", "Affe", "Affe", "Affe", "Schwein", "Schwein", "Schwein", "Schwein", "Gans",
|
||||
"Gans", "Gans", "Gans"}},
|
||||
|
||||
{ "Temporaladverb Präsens",
|
||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
||||
{ "SKV: /-e/ o. Stamm",
|
||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
||||
{"Temporaladverb Präsens", {"Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans"}},
|
||||
{"SKV: /-e/ o. Stamm", {"Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans"}},
|
||||
|
||||
{ "Temporaladverb Perfekt",
|
||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
||||
{ "Verbtrennung",
|
||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
||||
{ "SVK: /-e/ o. Stamm",
|
||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
||||
{ "Partizip",
|
||||
{ "Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans" } },
|
||||
{"Temporaladverb Perfekt", {"Affe", "Affe", "Schwein", "Schwein", "Gans", "Gans"}},
|
||||
{"Verbtrennung", {"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 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);
|
||||
|
||||
|
@ -58,9 +51,9 @@ unsigned int V2SvkModel::getV2Points()
|
|||
|
||||
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);
|
||||
|
||||
|
@ -75,3 +68,134 @@ unsigned int V2SvkModel::getSvkPoints()
|
|||
|
||||
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
|
||||
|
||||
#include "CheckableTestModel.h"
|
||||
#include "V2SvkModel.pb.h"
|
||||
|
||||
class V2SvkModel : public CheckableTestModel
|
||||
{
|
||||
|
@ -11,4 +12,10 @@ public:
|
|||
|
||||
unsigned int getV2Points();
|
||||
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)
|
||||
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
|
@ -10,10 +11,18 @@ qt5_wrap_ui(UI_HEADERS
|
|||
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}
|
||||
VerbEndWidget.cpp
|
||||
VerbEndModel.cpp
|
||||
${UI_HEADERS}
|
||||
${VerbEnd_PROTO_SRCS}
|
||||
${VerbEnd_PROTO_HDRS}
|
||||
)
|
||||
|
||||
set_target_properties(${PROJECT_NAME}
|
||||
|
@ -25,6 +34,7 @@ target_include_directories(${PROJECT_NAME}
|
|||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${Protobuf_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
@ -33,4 +43,5 @@ target_link_libraries(${PROJECT_NAME}
|
|||
CheckableTest
|
||||
CheckableTestModel
|
||||
Qt5::Widgets
|
||||
${Protobuf_LIBRARIES}
|
||||
)
|
||||
|
|
|
@ -11,3 +11,90 @@ VerbEndModel::VerbEndModel(QObject *parent)
|
|||
{ "Zauberregel", { "Temporal", "Kausal", "Final", "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
|
||||
|
||||
#include "CheckableTestModel.h"
|
||||
#include "VerbEndModel.pb.h"
|
||||
|
||||
class VerbEndModel : public CheckableTestModel
|
||||
{
|
||||
|
@ -8,4 +9,7 @@ class VerbEndModel : public CheckableTestModel
|
|||
|
||||
public:
|
||||
VerbEndModel(QObject *parent);
|
||||
|
||||
void writeProtoBuf(ESGRAF48::VerbEndModel &model) const;
|
||||
void readProtoBuf(const ESGRAF48::VerbEndModel &model);
|
||||
};
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
#include <QDebug>
|
||||
|
||||
#include <fstream>
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, ui(new Ui::MainWindow)
|
||||
|
@ -72,17 +74,8 @@ void MainWindow::openFile()
|
|||
|
||||
closeFile();
|
||||
|
||||
QFile loadFile(filename);
|
||||
if (!loadFile.open(QFile::ReadOnly))
|
||||
{
|
||||
qWarning("Could not open file");
|
||||
return;
|
||||
}
|
||||
|
||||
QByteArray byteData = loadFile.readAll();
|
||||
QJsonDocument loadDoc = QJsonDocument::fromJson(byteData);
|
||||
|
||||
m_dataModel->read(loadDoc.object());
|
||||
std::fstream protoInFile(filename.toStdString(), std::ios::in | std::ios::binary);
|
||||
m_dataModel->readProtoBuf(protoInFile);
|
||||
|
||||
setWindowModified(false);
|
||||
setWindowTitle(filename + "[*]");
|
||||
|
@ -135,6 +128,9 @@ void MainWindow::closeFile()
|
|||
|
||||
void MainWindow::print() const
|
||||
{
|
||||
//std::ofstream htmlfile("print.html");
|
||||
//htmlfile << m_dataModel->toHtml();
|
||||
|
||||
QPrinter printer;
|
||||
|
||||
QPrintDialog dialog(&printer);
|
||||
|
@ -144,12 +140,7 @@ void MainWindow::print() const
|
|||
}
|
||||
|
||||
QTextDocument printDoc;
|
||||
printDoc.setHtml(
|
||||
"<html>"
|
||||
"<body>"
|
||||
"<h2>Hello World</h2>"
|
||||
"</body>"
|
||||
"</hthml>");
|
||||
printDoc.setHtml(QString::fromStdString(m_dataModel->toHtml()));
|
||||
|
||||
printDoc.print(&printer);
|
||||
}
|
||||
|
@ -167,15 +158,9 @@ void MainWindow::closeEvent(QCloseEvent *event)
|
|||
|
||||
void MainWindow::saveFile(const QString &filename)
|
||||
{
|
||||
QJsonObject saveData;
|
||||
m_dataModel->write(saveData);
|
||||
|
||||
QJsonDocument saveDoc(saveData);
|
||||
|
||||
QFile saveFile(filename);
|
||||
saveFile.open(QFile::WriteOnly);
|
||||
saveFile.write(saveDoc.toJson());
|
||||
saveFile.close();
|
||||
std::fstream protoOutFile(filename.toStdString(),
|
||||
std::ios::out | std::ios::trunc | std::ios::binary);
|
||||
m_dataModel->writeProtoBuf(protoOutFile);
|
||||
|
||||
qDebug() << "Wrote" << filename;
|
||||
|
||||
|
|
Loading…
Reference in New Issue