--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/QtRelationalReaderStringHadler.h Sat Sep 29 00:43:16 2018 +0200
@@ -0,0 +1,70 @@
+#pragma once
+
+#include <QObject>
+
+#include <relpipe/reader/typedefs.h>
+#include <relpipe/reader/TypeId.h>
+#include <relpipe/reader/handlers/RelationalReaderStringHandler.h>
+#include <relpipe/reader/handlers/AttributeMetadata.h>
+
+using namespace relpipe::reader;
+using namespace relpipe::reader::handlers;
+
+// signal/slot parameters must be declared here and registered with qRegisterMetaType()
+
+Q_DECLARE_METATYPE(string_t)
+Q_DECLARE_METATYPE(std::vector<AttributeMetadata>)
+
+class QtRelationalReaderStringHadler : public QObject, public RelationalReaderStringHadler {
+ Q_OBJECT
+private:
+ RelationalReaderStringHadler* target;
+public:
+
+ QtRelationalReaderStringHadler(QObject* parent, RelationalReaderStringHadler* target) :
+ QObject(parent), target(target) {
+
+ // see Q_DECLARE_METATYPE above
+ qRegisterMetaType<string_t>();
+ qRegisterMetaType<std::vector < AttributeMetadata >> ();
+
+ QObject::connect(this, &QtRelationalReaderStringHadler::signal_startRelation, this, &QtRelationalReaderStringHadler::slot_startRelation);
+ QObject::connect(this, &QtRelationalReaderStringHadler::signal_attribute, this, &QtRelationalReaderStringHadler::slot_attribute);
+ QObject::connect(this, &QtRelationalReaderStringHadler::signal_endOfPipe, this, &QtRelationalReaderStringHadler::slot_endOfPipe);
+ }
+
+ virtual ~QtRelationalReaderStringHadler() {
+
+ }
+
+ virtual void startRelation(string_t name, std::vector<AttributeMetadata> attributes) override {
+ emit signal_startRelation(name, attributes);
+ }
+
+ virtual void attribute(const string_t& value) override {
+ emit signal_attribute(value);
+ };
+
+ virtual void endOfPipe() override {
+ emit signal_endOfPipe();
+ };
+
+signals:
+ void signal_startRelation(string_t name, std::vector<AttributeMetadata> attributes);
+ void signal_attribute(const string_t& value);
+ void signal_endOfPipe();
+
+private slots:
+
+ void slot_startRelation(string_t name, std::vector<AttributeMetadata> attributes) {
+ target->startRelation(name, attributes);
+ };
+
+ void slot_attribute(const string_t& value) {
+ target->attribute(value);
+ };
+
+ void slot_endOfPipe() {
+ target->endOfPipe();
+ };
+};