src/QtRelationalReaderStringHadler.h
branchv_0
changeset 13 c84042d014c9
child 18 16784291982f
--- /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();
+	};
+};