moved meta-data to sub-project

This commit is contained in:
Michael Mandl 2018-05-18 20:36:48 +02:00
parent 639e1b21e2
commit 441a01bdc3
10 changed files with 43 additions and 12 deletions

View file

@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.6)
project(MetaData LANGUAGES CXX)
find_package(Qt5Widgets REQUIRED)
set(CMAKE_AUTOMOC ON)
qt5_wrap_ui(UI_HEADERS
MetaDataWidget.ui
)
add_library(${PROJECT_NAME}
MetaDataModel.cpp
MetaDataWidget.cpp
${UI_HEADERS}
)
set_target_properties(${PROJECT_NAME}
PROPERTIES CXX_STANDARD 14
)
target_include_directories(${PROJECT_NAME}
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
)
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt5::Widgets
)

View file

@ -0,0 +1,142 @@
#include "MetaDataModel.h"
#include <QDebug>
MetaDataModel::MetaDataModel(QObject *parent) : QAbstractTableModel(parent)
{
}
int MetaDataModel::rowCount(const QModelIndex &parent) const
{
return 1;
}
int MetaDataModel::columnCount(const QModelIndex &parent) const
{
return 5;
}
QVariant MetaDataModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole || role == Qt::EditRole)
{
switch (index.column())
{
case 0:
return m_participant;
case 1:
return m_instructor;
case 2:
return m_dateOfBirth;
case 3:
return m_dateOfTest;
case 4:
return m_remarks;
default:
return QVariant();
}
}
return QVariant();
}
Qt::ItemFlags MetaDataModel::flags(const QModelIndex &index) const
{
return QAbstractTableModel::flags(index) | Qt::ItemIsEditable;
}
bool MetaDataModel::setData(
const QModelIndex &index, const QVariant &value, int role)
{
if (role != Qt::EditRole)
{
return QAbstractTableModel::setData(index, value, role);
}
bool valueChanged = false;
switch (index.column())
{
case 0:
if (value.toString() != m_participant)
{
m_participant = value.toString();
valueChanged = true;
}
break;
case 1:
if (value.toString() != m_instructor)
{
m_instructor = value.toString();
valueChanged = true;
}
break;
case 2:
if (value.toDate() != m_dateOfBirth)
{
m_dateOfBirth = value.toDate();
valueChanged = true;
}
break;
case 3:
if (value.toDate() != m_dateOfTest)
{
m_dateOfTest = value.toDate();
valueChanged = true;
}
break;
case 4:
if (value.toString() != m_remarks)
{
m_remarks = value.toString();
valueChanged = true;
}
break;
default:
break;
}
return valueChanged;
}
void MetaDataModel::write(QJsonObject &json) const
{
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;
}
void MetaDataModel::read(const QJsonObject &json)
{
const auto &participant = json["participant name"];
if (participant.isString())
{
m_participant = participant.toString();
}
const auto &instructor = json["instructor name"];
if (instructor.isString())
{
m_instructor = instructor.toString();
}
const auto &dateOfBirth = json["date of birth"];
if (dateOfBirth.isString())
{
m_dateOfBirth = QDate::fromString(dateOfBirth.toString(), Qt::ISODate);
}
const auto &dateOfTest = json["date of test"];
if (dateOfTest.isString())
{
m_dateOfTest = QDate::fromString(dateOfTest.toString(), Qt::ISODate);
}
const auto &remarks = json["remarks"];
if (remarks.isString())
{
m_remarks = remarks.toString();
}
}

View file

@ -0,0 +1,31 @@
#pragma once
#include <QAbstractTableModel>
#include <QString>
#include <QDate>
#include <QJsonObject>
class MetaDataModel : public QAbstractTableModel
{
Q_OBJECT
private:
QString m_participant;
QString m_instructor;
QDate m_dateOfBirth;
QDate m_dateOfTest;
QString m_remarks;
public:
MetaDataModel(QObject *parent);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(
const QModelIndex &index, int role = Qt::DisplayRole) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
bool setData(const QModelIndex &index, const QVariant &value,
int role = Qt::EditRole) override;
void write(QJsonObject &json) const;
void read(const QJsonObject &json);
};

View file

@ -0,0 +1,35 @@
#include "MetaDataWidget.h"
#include "ui_MetaDataWidget.h"
#include "MetaDataModel.h"
#include <QDataWidgetMapper>
MetaDataWidget::MetaDataWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MetaDataWidget)
, m_widgetMapper(new QDataWidgetMapper(this))
{
ui->setupUi(this);
}
MetaDataWidget::~MetaDataWidget()
{
delete ui;
}
void MetaDataWidget::setModel(MetaDataModel *model)
{
m_widgetMapper->setModel(model);
m_widgetMapper->addMapping(ui->participantLineEdit, 0);
m_widgetMapper->addMapping(ui->instructorLineEdit, 1);
m_widgetMapper->addMapping(ui->dateOfBirthDateEdit, 2);
m_widgetMapper->addMapping(ui->dateOfTestDateEdit, 3);
m_widgetMapper->addMapping(ui->remarksPlainTextEdit, 4);
m_widgetMapper->toFirst();
}
void MetaDataWidget::toFirst()
{
m_widgetMapper->toFirst();
}

View file

@ -0,0 +1,26 @@
#pragma once
#include <QWidget>
class QDataWidgetMapper;
class MetaDataModel;
namespace Ui {
class MetaDataWidget;
};
class MetaDataWidget : public QWidget
{
Q_OBJECT
private:
Ui::MetaDataWidget *ui;
QDataWidgetMapper *m_widgetMapper;
public:
MetaDataWidget(QWidget *parent = nullptr);
~MetaDataWidget();
void setModel(MetaDataModel *model);
void toFirst();
};

View file

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MetaDataWidget</class>
<widget class="QWidget" name="MetaDataWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>637</width>
<height>269</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="upperArea" native="true">
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<widget class="QLabel" name="dateOfTestLabel">
<property name="text">
<string>Untersuchungsdatum</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="participantLineEdit"/>
</item>
<item row="2" column="2">
<widget class="QLabel" name="dateOfBirthLabel">
<property name="text">
<string>Geburtsdatum</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="participantLabel">
<property name="text">
<string>Name, Vorname</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="instructorLineEdit"/>
</item>
<item row="1" column="2">
<widget class="QLabel" name="instructorLabel">
<property name="text">
<string>Untersucher(in)</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDateEdit" name="dateOfTestDateEdit"/>
</item>
<item row="2" column="3">
<widget class="QDateEdit" name="dateOfBirthDateEdit"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="remarksLabel">
<property name="text">
<string>Bemerkungen</string>
</property>
</widget>
</item>
<item>
<widget class="QPlainTextEdit" name="remarksPlainTextEdit"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>