Index: sources/applicationcontroller.cpp =================================================================== diff -u -r5194f3afffb28dac90a7ca4153b6a0ca2f239387 -rc933552983a659ca4cc351ff4d43d07319adab1e --- sources/applicationcontroller.cpp (.../applicationcontroller.cpp) (revision 5194f3afffb28dac90a7ca4153b6a0ca2f239387) +++ sources/applicationcontroller.cpp (.../applicationcontroller.cpp) (revision c933552983a659ca4cc351ff4d43d07319adab1e) @@ -14,48 +14,97 @@ #include "applicationcontroller.h" // Qt -#include // Project +#include "guiglobals.h" +#include "maintimer.h" +#include "guicontroller.h" +#include "messagedispatcher.h" -ApplicationController *ApplicationController::_instance = nullptr; +// Singleton +SINGLETON_INIT(ApplicationController) + +/*! + * \brief ApplicationController Constructor + * \param parent + */ ApplicationController::ApplicationController(QObject *parent) : QObject(parent) { - _guiController = Gui::GuiController::I(); _fileHandler = new Storage::FileHandler (this); _applicationPost = new ApplicationPost(this); - connect(_guiController,&GuiController::initialized,this, &ApplicationController::UiInitialized); + } -bool ApplicationController::event(QEvent *event) +/*! + * \brief ApplicationController initializer + */ +bool ApplicationController::init() { - return QObject::event(event); + if (!_fileHandler ->init()) return false; + if (!_applicationPost->init()) return false; + initConnections(); + return true; } -ApplicationController *ApplicationController::I() +/*! + * \brief GUI Controller connections definition + */ +void ApplicationController::initConnections() { - if (!_instance) { - _instance = new ApplicationController(); - } - return _instance; + + connect(_MainTimer , SIGNAL( didTimeout()), + this , SLOT(onMainTimerTimeout())); + + // From GUI + connect(_GuiController , SIGNAL(didActionTransmit(GuiActionType, const QVariantList &)), + this , SLOT( onActionTransmit(GuiActionType, const QVariantList &))); + // From HD/DG + connect(_MessageDispatcher, SIGNAL(didActionReceive(GuiActionType, const QVariantList &)), + this , SLOT( onActionReceive(GuiActionType, const QVariantList &))); } -bool ApplicationController::init() +/*! + * \brief Process the requested action + * \details Processes the requested action + * \param vAction - User requested Action + */ +void ApplicationController::onActionTransmit(GuiActionType vAction, const QVariantList &vData) { - if (!_fileHandler ->init()) return false; - if (!_applicationPost->init()) return false; - _guiController->init(); - return true; + emit didActionTransmit(vAction, vData); } -void ApplicationController::UiInitialized(bool ok) +/*! + * \brief An action has been confirmed + * \details GUI requested an action. + * In response HD confirmed the action. + * \param vAction + * \param vData + */ +void ApplicationController::onActionReceive (GuiActionType vAction, const QVariantList &vData) { - if(ok) { - if(_applicationPost->init()) { - _applicationPost->start(); - } - } - else { - quit(-1); - } + emit didActionReceive (vAction, vData); } + +/*! + * \brief ApplicationController::onMainTimerTimeout + * \details This slot is called by MainTimer::didTimeout each second + * to call required methods like keepAlive + */ +void ApplicationController::onMainTimerTimeout() +{ + keepAlive(); +} + +/*! + * \brief ApplicationController::keepAlive + * \details This is the message which has to be send over the CANBUS + * as an monitor for other nodes on the bus to notify UI is alive + */ +void ApplicationController::keepAlive() +{ +#ifndef DISABLE_KEEP_ALIVE + QVariantList mData; + mData += static_cast(GuiActionData::NoData); + onActionTransmit(GuiActionType::KeepAlive, mData); +#endif +}