From 93c61993336ecd5612281c80e8cbc14ba56ca00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Thu, 1 Dec 2016 09:47:06 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@143 a8b55f48-bf90-11e4-a774-851b48703e85 --- piqt_utils/CMakeLists.txt | 1 + piqt_utils/qpiconnection.cpp | 30 ++++++++++++++++++++++++++++++ piqt_utils/qpiconnection.h | 31 +++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 piqt_utils/qpiconnection.cpp create mode 100644 piqt_utils/qpiconnection.h diff --git a/piqt_utils/CMakeLists.txt b/piqt_utils/CMakeLists.txt index 84353cb..bf98d73 100644 --- a/piqt_utils/CMakeLists.txt +++ b/piqt_utils/CMakeLists.txt @@ -4,6 +4,7 @@ find_package(Qt4 REQUIRED) if (LIBPROJECT) set(PIP_CMG ${CMAKE_CURRENT_BINARY_DIR}/../pip/utils/code_model_generator/pip_cmg.exe) include(${CMAKE_CURRENT_SOURCE_DIR}/../pip/PIPMacros2.cmake) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../piqt) else () find_package(PIP REQUIRED) endif () diff --git a/piqt_utils/qpiconnection.cpp b/piqt_utils/qpiconnection.cpp new file mode 100644 index 0000000..e5df01d --- /dev/null +++ b/piqt_utils/qpiconnection.cpp @@ -0,0 +1,30 @@ +#include "qpiconnection.h" + + +QPIConnection::QPIConnection(const QString & name): QObject(), PIConnection(Q2PIString(name)) { + setObjectName(name); + CONNECTU(this, dataReceivedEvent, this, piDataRec); + CONNECTU(this, packetReceivedEvent, this, piPacketRec); +} + + +bool QPIConnection::loadFromCMFile(const QString & file) { + QPIConfig f(file, QIODevice::ReadOnly); + if (!f.isOpen()) return false; + QByteArray cd = f.getValue("config", QByteArray()); + PIString cs = Q2PIString(QString::fromLatin1(cd)); + configureFromString(&cs, Q2PIString(f.getValue("name", ""))); + return true; +} + + +void QPIConnection::piDataRec(const PIString & from, const PIByteArray & data) { + QMetaObject::invokeMethod(this, "qDataReceivedEvent", Qt::QueuedConnection, + Q_ARG(QString, PI2QString(from)), Q_ARG(QByteArray, PI2QByteArray(data))); +} + + +void QPIConnection::piPacketRec(const PIString & from, const PIByteArray & data) { + QMetaObject::invokeMethod(this, "qPacketReceivedEvent", Qt::QueuedConnection, + Q_ARG(QString, PI2QString(from)), Q_ARG(QByteArray, PI2QByteArray(data))); +} diff --git a/piqt_utils/qpiconnection.h b/piqt_utils/qpiconnection.h new file mode 100644 index 0000000..e9ff617 --- /dev/null +++ b/piqt_utils/qpiconnection.h @@ -0,0 +1,31 @@ +#ifndef QPICONNECTION_H +#define QPICONNECTION_H + +#include +#include +#include "piconnection.h" +#include "qpiconfig.h" +#include "piqt.h" + +class QPIConnection: public QObject, public PIConnection { + Q_OBJECT + PIOBJECT_SUBCLASS(QPIConnection, PIConnection) +public: + QPIConnection(const QString & name = QString()); + + bool loadFromCMFile(const QString & file); + +protected: + void propertyChanged(const PIString & ) {setObjectName(PI2QString(name()));} + EVENT_HANDLER2(void, piDataRec, const PIString &, from, const PIByteArray &, data); + EVENT_HANDLER2(void, piPacketRec, const PIString &, from, const PIByteArray &, data); + +public slots: + +signals: + void qDataReceivedEvent(QString from, QByteArray data); + void qPacketReceivedEvent(QString from, QByteArray data); + +}; + +#endif // QPICONNECTION_H