src/QtRelationalReaderStringHadler.h
branchv_0
changeset 20 b13e7ed9eea3
parent 18 16784291982f
child 29 0f9f7d6564cd
equal deleted inserted replaced
19:ac70c7af6a9b 20:b13e7ed9eea3
     8 #include <relpipe/reader/handlers/AttributeMetadata.h>
     8 #include <relpipe/reader/handlers/AttributeMetadata.h>
     9 
     9 
    10 using namespace relpipe::reader;
    10 using namespace relpipe::reader;
    11 using namespace relpipe::reader::handlers;
    11 using namespace relpipe::reader::handlers;
    12 
    12 
    13 // signal/slot parameters must be declared here and registered with qRegisterMetaType()
    13 class QtRelationalReaderStringHadler : public QObject, public RelationalReaderStringHadler {
    14 
    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
    15 	Q_OBJECT
    20 private:
       
    21 	RelationalReaderStringHadler* target;
       
    22 public:
    16 public:
    23 
    17 	QtRelationalReaderStringHadler(QObject* parent) : QObject(parent) {
    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 	}
    18 	}
    35 
    19 
    36 	virtual ~QtRelationalReaderStringHadler() {
    20 	virtual ~QtRelationalReaderStringHadler() {
    37 
       
    38 	}
    21 	}
    39 
    22 
    40 	virtual void startRelation(string_t name, std::vector<AttributeMetadata> attributes) override {
    23 	virtual void startRelation(string_t name, std::vector<AttributeMetadata> attributes) override {
    41 		emit signal_startRelation(name, attributes);
    24 		emit startRelationReceived(name, attributes);
    42 	}
    25 	}
    43 
    26 
    44 	virtual void attribute(const string_t& value) override {
    27 	virtual void attribute(const string_t& value) override {
    45 		emit signal_attribute(value);
    28 		emit attributeReceived(value);
    46 	};
    29 	};
    47 
    30 
    48 	virtual void endOfPipe() override {
    31 	virtual void endOfPipe() override {
    49 		emit signal_endOfPipe();
    32 		emit endOfPipeReceived();
    50 	};
    33 	};
    51 
    34 
    52 signals:
    35 signals:
    53 	void signal_startRelation(string_t name, std::vector<AttributeMetadata> attributes);
    36 	void startRelationReceived(const string_t name, std::vector<AttributeMetadata> attributes);
    54 	void signal_attribute(const string_t& value);
    37 	void attributeReceived(const string_t value);
    55 	void signal_endOfPipe();
    38 	void endOfPipeReceived();
    56 
       
    57 private slots:
       
    58 
       
    59 	// FIXME: asynchronous signal-slot data passing between two threads
       
    60 
       
    61 	void slot_startRelation(string_t name, std::vector<AttributeMetadata> attributes) {
       
    62 		target->startRelation(name, attributes);
       
    63 	};
       
    64 
       
    65 	void slot_attribute(const string_t& value) {
       
    66 		target->attribute(value);
       
    67 	};
       
    68 
       
    69 	void slot_endOfPipe() {
       
    70 		target->endOfPipe();
       
    71 	};
       
    72 };
    39 };