#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
-#include <QQuickWindow>
+#include <QQmlContext>
+#include <QtQml/QQmlApplicationEngine>
#include <cstring>
+#include <QFileInfo>
#include "eventhandler.h"
+const char _myrole[] = "on_screen";
+const char _parameter[] = "parameter";
+const char _replyto[] = "replyto";
+const char _button_name[] = "buttonName";
+const char _drawing_name[] = "drawing_name";
+const char _application_id[] = "application_id";
+
+
void* EventHandler::myThis = 0;
EventHandler::EventHandler(QObject *parent) :
QObject(parent),
- mp_hs(NULL),
- mp_wm(NULL),
- mp_qw(NULL)
+ mp_hs(nullptr),
+ mp_wm(nullptr),
+ m_dsp_sts(false)
{
- m_dspreq = QString("");
- my_id = QString(APP_ID);
- my_role = QString(ROLE_NAME);
- m_req.clear();
}
EventHandler::~EventHandler()
{
- if (mp_hs != NULL) {
+ if (mp_hs != nullptr) {
delete mp_hs;
}
- if (mp_wm != NULL) {
+ if (mp_wm != nullptr) {
delete mp_wm;
}
}
mp_hs = new LibHomeScreen();
mp_hs->init(port, token);
-
-// my_id = QString(std::strtok(std::getenv("AFM_ID"), "@"));
+
mp_hs->registerCallback(nullptr, EventHandler::onRep_static);
mp_hs->set_event_handler(LibHomeScreen::Event_ShowWindow, [this](json_object *object){
- // {"id": "onscreenXXX", "parameter": {"replyid": "app's id", "file": "onsreen file path", "data": {"key": "value", ...}}}
- struct json_object *appid;
- json_object_object_get_ex(object, "application_id", &appid);
- const char *id = json_object_get_string(appid);
- if(my_id != QString(id)) {
- HMI_DEBUG(APP_ID, "Event_ShowWindow id = %s", id);
- return;
- }
- else
- HMI_DEBUG(APP_ID, "recived json message is[%s]", json_object_get_string(object));
+ /*
+ {
+ "application_id": "onscreenapp",
+ "parameter": {
+ "title": "onscreen title",
+ "type": "critical,exclamation,question,information",
+ "contents": "message contents",
+ "buttons": ["button_name1", "button_name2", "button_name3"],
+ "replyto":"caller application id"
+ }
+ } */
+ HMI_DEBUG(APP_ID, "recived json message is[%s]", json_object_get_string(object));
struct json_object *param;
- json_object_object_get_ex(object, "parameter", ¶m);
- if(json_object_get_type(param) != json_type_object ) {
+ if(!json_object_object_get_ex(object, _parameter, ¶m)
+ || json_object_get_type(param) != json_type_object) {
HMI_DEBUG(APP_ID, "parameter error!");
return;
}
struct json_object *replyid;
- json_object_object_get_ex(param, "replyid", &replyid);
- const char *_replyid = json_object_get_string(replyid);
-
- struct json_object *path;
- json_object_object_get_ex(param, "file", &path);
- const char *_path = json_object_get_string(path);
-
- struct json_object *data;
- json_bool rtn = json_object_object_get_ex(param, "data", &data);
- const char* _data = "";
- if(rtn) {
- _data = json_object_to_json_string(data);
+ const char *replyto = nullptr;
+ if(json_object_object_get_ex(param, _replyto, &replyid))
+ replyto = json_object_get_string(replyid);
+ if(replyto == nullptr) {
+ HMI_DEBUG(APP_ID, "received replyto is null!");
+ return;
}
+ m_req = qMakePair(QString(replyto), QString(json_object_to_json_string(param)));
- m_dspreq = QString(_replyid);
- if(m_req.contains(m_dspreq)) {
- m_req[m_dspreq] = qMakePair(QString(_path), QString(_data));
+ if (this->getDisplayStatus() == HIDING) {
+ this->activateWindow(_myrole, "on_screen");
+ }
+ else if(this->getDisplayStatus() == SHOWING) {
+ this->setDisplayStatus(SWAPPING);
+ emit this->hideOnScreen();
+ }
+ else {
+ HMI_DEBUG(APP_ID, "onscreen swapping!");
}
- else
- m_req.insert(QString(m_dspreq), qMakePair(QString(_path), QString(_data)));
-
- this->mp_wm->activateWindow(ROLE_NAME);
HMI_DEBUG(APP_ID, "received showWindow event, end!, line=%d", __LINE__);
});
mp_hs->set_event_handler(LibHomeScreen::Event_HideWindow, [this](json_object *object){
- struct json_object *value;
- json_object_object_get_ex(object, "application_id", &value);
- const char *appid = json_object_get_string(value);
-
- HMI_DEBUG(APP_ID, "release onScreen is %s!", appid);
-
- if (appid == my_id) {
- emit this->signalLoader(QVariant(""));
- this->mp_wm->deactivateWindow(ROLE_NAME);
- }
- else {
- HMI_DEBUG(APP_ID, "!!!!releaseOnScreen is not displaying!!!!!");
- }
+ emit this->hideOnScreen();
+ HMI_DEBUG(APP_ID, "hideWindow json_object=%s", json_object_get_string(object));
});
- if (mp_wm->requestSurface(ROLE_NAME) != 0) {
+ if (mp_wm->requestSurface(_myrole) != 0) {
HMI_DEBUG(APP_ID, "!!!!LayoutHandler requestSurface Failed!!!!!");
exit(EXIT_FAILURE);
}
mp_wm->set_event_handler(QLibWindowmanager::Event_SyncDraw, [this](json_object *object) {
- HMI_DEBUG(APP_ID, "Surface %s got syncDraw!", ROLE_NAME);
- emit this->signalLoader(QVariant("file://" + m_req[m_dspreq].first));
- emit this->signalOnScreenParameter(QVariant(m_req[m_dspreq].second));
- this->mp_wm->endDraw(QString(ROLE_NAME));
+ HMI_DEBUG(APP_ID, "Surface %s got syncDraw!", _myrole);
+ this->mp_wm->endDraw(QString(_myrole));
});
mp_wm->set_event_handler(QLibWindowmanager::Event_Visible, [this](json_object *object) {
struct json_object *value;
- json_object_object_get_ex(object, "drawing_name", &value);
+ json_object_object_get_ex(object, _drawing_name, &value);
const char *name = json_object_get_string(value);
+ if(!strcasecmp(_myrole, name)){
+ this->setDisplayStatus(SHOWING);
+ this->m_dsp = this->m_req;
+ this->updateModel(QVariant(this->m_dsp.second));
+ emit this->showOnScreen();
+ }
HMI_DEBUG(APP_ID, "Event_Visible kKeyDrawingName = %s", name);
});
mp_wm->set_event_handler(QLibWindowmanager::Event_Invisible, [this](json_object *object) {
struct json_object *value;
- json_object_object_get_ex(object, "drawing_name", &value);
+ json_object_object_get_ex(object, _drawing_name, &value);
const char *name = json_object_get_string(value);
HMI_DEBUG(APP_ID, "Event_Invisible kKeyDrawingName = %s", name);
HMI_DEBUG(APP_ID, "LayoutHander::init() finished.");
}
-void EventHandler::setQuickWindow(QQuickWindow *qw)
-{
- mp_qw = qw;
-}
-
void EventHandler::onRep_static(struct json_object* reply_contents)
{
static_cast<EventHandler*>(EventHandler::myThis)->onRep(reply_contents);
}
+
void EventHandler::onRep(struct json_object* reply_contents)
{
const char* str = json_object_to_json_string(reply_contents);
HMI_DEBUG(APP_ID, "EventHandler::onReply %s", str);
}
-void EventHandler::activateWindow(QString &role)
+void EventHandler::activateWindow(const char *role, const char *area)
{
HMI_DEBUG(APP_ID, "EventHandler::activateWindow()");
- mp_wm->activateWindow(role);
+ mp_wm->activateWindow(role, area);
}
-void EventHandler::deactivateWindow(QString &role)
+void EventHandler::deactivateWindow()
{
HMI_DEBUG(APP_ID, "EventHandler::deactivateWindow()");
-
- emit this->signalLoader(QVariant(""));
- mp_wm->deactivateWindow(role);
+ if(getDisplayStatus() == SWAPPING) {
+ setDisplayStatus(SHOWING);
+ m_dsp = m_req;
+ updateModel(QVariant(this->m_dsp.second));
+ emit showOnScreen();
+ }
+ else {
+ this->setDisplayStatus(HIDING);
+ mp_wm->deactivateWindow(_myrole);
+ }
}
void EventHandler::onScreenReply(const QString &btn_name)
{
- HMI_DEBUG(APP_ID, "EventHandler::onScreenReply()");
- deactivateWindow(my_role);
-
- struct json_object* j_obj = json_object_new_object();
- json_object_object_add(j_obj, "application_id", json_object_new_string(m_dspreq.toLatin1()));
+ HMI_DEBUG(APP_ID, "EventHandler::onScreenReply(),btn_name=%s", btn_name.toStdString().c_str());
+ emit this->hideOnScreen();
struct json_object* j_param = json_object_new_object();
- json_object_object_add(j_param, "method", json_object_new_string("Buttons.ButtonPress"));
- json_object_object_add(j_param, "buttonName", json_object_new_string(btn_name.toStdString().c_str()));
- json_object_object_add(j_param, "buttonPressMode", json_object_new_string("Short"));
- json_object_object_add(j_obj, "parameter", j_param);
-
- mp_hs->replyShowWindow(m_dspreq.toLatin1(), j_obj);
+ json_object_object_add(j_param, _button_name, json_object_new_string(btn_name.toStdString().c_str()));
+ mp_hs->replyShowWindow(m_dsp.first.toStdString().c_str(), j_param);
}