src/QtRelationalReaderStringHadler.h
branchv_0
changeset 13 c84042d014c9
child 18 16784291982f
equal deleted inserted replaced
12:a45d1cac365e 13:c84042d014c9
       
     1 #pragma once
       
     2 
       
     3 #include <QObject>
       
     4 
       
     5 #include <relpipe/reader/typedefs.h>
       
     6 #include <relpipe/reader/TypeId.h>
       
     7 #include <relpipe/reader/handlers/RelationalReaderStringHandler.h>
       
     8 #include <relpipe/reader/handlers/AttributeMetadata.h>
       
     9 
       
    10 using namespace relpipe::reader;
       
    11 using namespace relpipe::reader::handlers;
       
    12 
       
    13 // signal/slot parameters must be declared here and registered with qRegisterMetaType()
       
    14 
       
    15 Q_DECLARE_METATYPE(string_t)
       
    16 Q_DECLARE_METATYPE(std::vector<AttributeMetadata>)
       
    17 
       
    18 class QtRelationalReaderStringHadler : public QObject, public RelationalReaderStringHadler {
       
    19 	Q_OBJECT
       
    20 private:
       
    21 	RelationalReaderStringHadler* target;
       
    22 public:
       
    23 
       
    24 	QtRelationalReaderStringHadler(QObject* parent, RelationalReaderStringHadler* target) :
       
    25 	QObject(parent), target(target) {
       
    26 
       
    27 		// see Q_DECLARE_METATYPE above
       
    28 		qRegisterMetaType<string_t>();
       
    29 		qRegisterMetaType<std::vector < AttributeMetadata >> ();
       
    30 
       
    31 		QObject::connect(this, &QtRelationalReaderStringHadler::signal_startRelation, this, &QtRelationalReaderStringHadler::slot_startRelation);
       
    32 		QObject::connect(this, &QtRelationalReaderStringHadler::signal_attribute, this, &QtRelationalReaderStringHadler::slot_attribute);
       
    33 		QObject::connect(this, &QtRelationalReaderStringHadler::signal_endOfPipe, this, &QtRelationalReaderStringHadler::slot_endOfPipe);
       
    34 	}
       
    35 
       
    36 	virtual ~QtRelationalReaderStringHadler() {
       
    37 
       
    38 	}
       
    39 
       
    40 	virtual void startRelation(string_t name, std::vector<AttributeMetadata> attributes) override {
       
    41 		emit signal_startRelation(name, attributes);
       
    42 	}
       
    43 
       
    44 	virtual void attribute(const string_t& value) override {
       
    45 		emit signal_attribute(value);
       
    46 	};
       
    47 
       
    48 	virtual void endOfPipe() override {
       
    49 		emit signal_endOfPipe();
       
    50 	};
       
    51 
       
    52 signals:
       
    53 	void signal_startRelation(string_t name, std::vector<AttributeMetadata> attributes);
       
    54 	void signal_attribute(const string_t& value);
       
    55 	void signal_endOfPipe();
       
    56 
       
    57 private slots:
       
    58 
       
    59 	void slot_startRelation(string_t name, std::vector<AttributeMetadata> attributes) {
       
    60 		target->startRelation(name, attributes);
       
    61 	};
       
    62 
       
    63 	void slot_attribute(const string_t& value) {
       
    64 		target->attribute(value);
       
    65 	};
       
    66 
       
    67 	void slot_endOfPipe() {
       
    68 		target->endOfPipe();
       
    69 	};
       
    70 };