/*! * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file main.h * \author (last) Peter Lucia * \date (last) 26-Jun-2020 * \author (original) Behrouz NematiPour * \date (original) 28-Oct-2019 * */ #pragma once // Qt #include // Project // TODO : A singleton parent class needs to be created // to taking care of the Threading, init, quit, and so // TODO : // - We still need to work on threading on other classes // - We need to have a singleton parent class // - Some code has been added to debug can interface (We still have swap frames) #define SINGLETON(vCLASS) \ private: \ explicit vCLASS(QObject *parent = nullptr); \ virtual ~vCLASS() { } \ vCLASS(vCLASS const &) = delete; \ vCLASS & operator = (vCLASS const &) = delete; \ public: \ static vCLASS &I() { \ static vCLASS _instance; \ return _instance; \ } \ //--------------------------------------------------------------------------------// //--------------------------------------------------------------------------------// extern int gFakeInterval; extern QByteArray gFakeData; extern const char*gFakeData_default; extern bool gSendEmptyKeepAwake; extern bool gFakeSeqAtBegin; extern bool gDisableHunhandledReport; extern bool gDisableTimeout; //--------------------------------------------------------------------------------// //--------------------------------------------------------------------------------// #define DEBUG_PROPERTY_CHANGED(vVARIABLE) //qDebug() << "#" << #vVARIABLE << v##vVARIABLE; //--------------------------------------------------------------------------------// #define PROPERTY_SLOT( vTYPE , vVARIABLE ) \ protected : \ void vVARIABLE ( const vTYPE & v##vVARIABLE ) { \ static bool init = false; \ if ( !init || _##vVARIABLE != v##vVARIABLE ) { \ DEBUG_PROPERTY_CHANGED(vVARIABLE) \ init = true; \ _##vVARIABLE = v##vVARIABLE; \ emit vVARIABLE##Changed( _##vVARIABLE ); \ } \ } //--------------------------------------------------------------------------------// #define TRIGGER_SLOT( vTYPE , vVARIABLE ) \ protected: \ void vVARIABLE ( const vTYPE & v##vVARIABLE ) { \ DEBUG_PROPERTY_CHANGED(vVARIABLE) \ _##vVARIABLE = v##vVARIABLE; \ emit vVARIABLE##Triggered( _##vVARIABLE ); \ } //--------------------------------------------------------------------------------// #define PROPERTY_BASE(vTYPE , vVARIABLE , vDEFVALUE, vSIGNAL) \ Q_PROPERTY( vTYPE vVARIABLE \ READ vVARIABLE \ WRITE vVARIABLE \ NOTIFY vVARIABLE##vSIGNAL) \ Q_SIGNALS: \ void vVARIABLE##vSIGNAL( const vTYPE & v##vVARIABLE ); \ private: \ vTYPE _##vVARIABLE = vDEFVALUE; \ protected: \ vTYPE vVARIABLE () const { \ return _##vVARIABLE ; \ } //--------------------------------------------------------------------------------// #define PROPERTY( vTYPE , vVARIABLE , vDEFVALUE ) \ Q_PROPERTY( vTYPE vVARIABLE \ READ vVARIABLE \ WRITE vVARIABLE \ NOTIFY vVARIABLE##Changed) \ Q_SIGNALS: \ void vVARIABLE##Changed( const vTYPE & v##vVARIABLE ); \ private: \ vTYPE _##vVARIABLE = vDEFVALUE; \ protected: \ vTYPE vVARIABLE () const { \ return _##vVARIABLE ; \ } \ void vVARIABLE (const vTYPE & v##vVARIABLE) { \ static bool init = false; \ if ( !init || _##vVARIABLE != v##vVARIABLE ) { \ DEBUG_PROPERTY_CHANGED(vVARIABLE) \ init = true; \ _##vVARIABLE = v##vVARIABLE; \ emit vVARIABLE##Changed(_##vVARIABLE); \ } \ } //--------------------------------------------------------------------------------// #define TRIGGER(vTYPE , vVARIABLE, vDEFVALUE) \ Q_PROPERTY(vTYPE vVARIABLE \ READ vVARIABLE \ WRITE vVARIABLE \ NOTIFY vVARIABLE##Triggered) \ Q_SIGNALS: \ void vVARIABLE##Triggered(const vTYPE& v##vVARIABLE); \ private: \ vTYPE _##vVARIABLE = vDEFVALUE; \ protected: \ vTYPE vVARIABLE() const { \ return _##vVARIABLE; \ } \ void vVARIABLE(const vTYPE & v##vVARIABLE) { \ DEBUG_PROPERTY_CHANGED(vVARIABLE) \ _##vVARIABLE = v##vVARIABLE; \ emit vVARIABLE##Triggered( _##vVARIABLE ); \ } //--------------------------------------------------------------------------------// #define ACTION_VIEW_CONNECTION(vTYPE) \ connect(&_GuiController, SIGNAL(didActionReceive(const vTYPE &)), \ this, SLOT( onActionReceive(const vTYPE &))); //--------------------------------------------------------------------------------// #define ADJUST_VIEW_CONNECTION(vTYPE) \ connect( this, SIGNAL(didAdjustment(const vTYPE &)), \ &_GuiController, SLOT( doAdjustment(const vTYPE &))); //--------------------------------------------------------------------------------// //--------------------------------------------------------------------------------// #define ACTION_METHOD_BRIDGE_CONNECTION(vMETHOD, vSOURCE, vTYPE) \ connect(&vSOURCE, SIGNAL(did##vMETHOD(const vTYPE &)), \ this , SLOT( on##vMETHOD(const vTYPE &))); //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, vTYPE) \ connect(&vSOURCE, SIGNAL(didActionReceive(const vTYPE &)), \ this , SLOT( onActionReceive(const vTYPE &))); //--------------------------------------------------------------------------------// #define ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, vTYPE) \ connect(&vSOURCE, SIGNAL(didAdjustment(const vTYPE &)), \ this , SLOT( onAdjustment(const vTYPE &))); \ //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_PRIVATE_SLOT(vTYPE) \ private Q_SLOTS: \ void onActionReceive(const vTYPE &vData) { \ emit didActionReceive(vData); \ } //--------------------------------------------------------------------------------// #define ADJUST_TRANSMT_PRIVATE_SLOT_DEFINITION(vTYPE) \ private Q_SLOTS: \ void onAdjustment(const vTYPE &vData); //--------------------------------------------------------------------------------// #define ADJUST_TRANSMT_PRIVATE_SLOT(vTYPE) \ private Q_SLOTS: \ void onAdjustment(const vTYPE &vData) { \ emit didAdjustment(vData); \ } //--------------------------------------------------------------------------------// #define ADJUST_TRANSMT_PUBLIC_SLOT(vTYPE) \ public Q_SLOTS: \ void doAdjustment(const vTYPE &vData) { \ emit didAdjustment(vData); \ } //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_SIGNAL(vTYPE) \ Q_SIGNALS: \ void didActionReceive(const vTYPE &vData); //--------------------------------------------------------------------------------// #define ACTION_TRANSMT_SIGNAL(vTYPE) \ Q_SIGNALS: \ void didActionTransmit(const vTYPE &vData); //--------------------------------------------------------------------------------// #define ADJUST_TRANSMT_SIGNAL(vTYPE) \ Q_SIGNALS: \ void didAdjustment(const vTYPE &vData); //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_BRIDGE_DEFINITION(vTYPE) \ private Q_SLOTS: \ void onActionReceive(const vTYPE &vData) { \ emit didActionReceive(vData); \ } \ Q_SIGNALS: \ void didActionReceive(const vTYPE &vData); //--------------------------------------------------------------------------------// #define ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT(vTYPE) \ private Q_SLOTS: \ void onAdjustment(const vTYPE &vData); \ Q_SIGNALS: \ void didAdjustment(const vTYPE &vData); //--------------------------------------------------------------------------------// #define ADJUST_TRANSMT_BRIDGE_DEFINITION(vTYPE) \ private Q_SLOTS: \ void onAdjustment(const vTYPE &vData) { \ emit didAdjustment(vData); \ } \ Q_SIGNALS: \ void didAdjustment(const vTYPE &vData); //--------------------------------------------------------------------------------// #define ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC(vTYPE) \ public Q_SLOTS: \ void doAdjustment(const vTYPE &vData) { \ emit didAdjustment(vData); \ } \ Q_SIGNALS: \ void didAdjustment (const vTYPE &vData); //--------------------------------------------------------------------------------// #define REGISTER_METATYPE(vTYPE) \ qRegisterMetaType (#vTYPE); //--------------------------------------------------------------------------------// #define REGISTER_TYPE(vTYPE) \ qmlRegisterType (#vTYPE, 0, 1, #vTYPE);