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 }; |