qmlFrontend/hwengine.cpp
branchqmlfrontend
changeset 10430 899a30018ede
parent 10428 7c25297720f1
child 10432 b0abef0ee78c
equal deleted inserted replaced
10428:7c25297720f1 10430:899a30018ede
     8 #include "previewimageprovider.h"
     8 #include "previewimageprovider.h"
     9 
     9 
    10 extern "C" {
    10 extern "C" {
    11     RunEngine_t *flibRunEngine;
    11     RunEngine_t *flibRunEngine;
    12     registerGUIMessagesCallback_t *flibRegisterGUIMessagesCallback;
    12     registerGUIMessagesCallback_t *flibRegisterGUIMessagesCallback;
       
    13     setSeed_t *flibSetSeed;
       
    14     getSeed_t *flibGetSeed;
    13     getPreview_t *flibGetPreview;
    15     getPreview_t *flibGetPreview;
    14     flibInit_t *flibInit;
    16     flibInit_t *flibInit;
    15     flibFree_t *flibFree;
    17     flibFree_t *flibFree;
    16 }
    18 }
    17 
    19 
       
    20 Q_DECLARE_METATYPE(MessageType);
       
    21 
    18 HWEngine::HWEngine(QQmlEngine *engine, QObject *parent) :
    22 HWEngine::HWEngine(QQmlEngine *engine, QObject *parent) :
    19     QObject(parent),
    23     QObject(parent),
    20     m_engine(engine)
    24     m_engine(engine)
    21 {
    25 {
       
    26     qRegisterMetaType<MessageType>("MessageType");
       
    27 
    22     QLibrary hwlib("./libhwengine.so");
    28     QLibrary hwlib("./libhwengine.so");
    23 
    29 
    24     if(!hwlib.load())
    30     if(!hwlib.load())
    25         qWarning() << "Engine library not found" << hwlib.errorString();
    31         qWarning() << "Engine library not found" << hwlib.errorString();
    26 
    32 
    27     flibRunEngine = (RunEngine_t*) hwlib.resolve("RunEngine");
    33     flibRunEngine = (RunEngine_t*) hwlib.resolve("RunEngine");
    28     flibRegisterGUIMessagesCallback = (registerGUIMessagesCallback_t*) hwlib.resolve("registerGUIMessagesCallback");
    34     flibRegisterGUIMessagesCallback = (registerGUIMessagesCallback_t*) hwlib.resolve("registerGUIMessagesCallback");
       
    35     flibSetSeed = (setSeed_t*) hwlib.resolve("setSeed");
       
    36     flibGetSeed = (getSeed_t*) hwlib.resolve("getSeed");
    29     flibGetPreview = (getPreview_t*) hwlib.resolve("getPreview");
    37     flibGetPreview = (getPreview_t*) hwlib.resolve("getPreview");
    30     flibInit = (flibInit_t*) hwlib.resolve("flibInit");
    38     flibInit = (flibInit_t*) hwlib.resolve("flibInit");
    31     flibFree = (flibFree_t*) hwlib.resolve("flibFree");
    39     flibFree = (flibFree_t*) hwlib.resolve("flibFree");
    32 
    40 
    33     flibInit(".", "~/.hedgewars");
    41     flibInit(".", "~/.hedgewars");
    39     flibFree();
    47     flibFree();
    40 }
    48 }
    41 
    49 
    42 void HWEngine::getPreview()
    50 void HWEngine::getPreview()
    43 {
    51 {
    44     //m_seed = QUuid::createUuid().toString();
    52     flibSetSeed(QUuid::createUuid().toString().toLatin1());
    45     flibGetPreview();
    53     flibGetPreview();
    46 }
    54 }
    47 
    55 
    48 static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
    56 static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
    49 {
    57 {
    65     HWEngine * obj = (HWEngine *)context;
    73     HWEngine * obj = (HWEngine *)context;
    66     QByteArray b = QByteArray::fromRawData(msg, len);
    74     QByteArray b = QByteArray::fromRawData(msg, len);
    67 
    75 
    68     qDebug() << "FLIPC in" << b.size() << b;
    76     qDebug() << "FLIPC in" << b.size() << b;
    69 
    77 
    70     QMetaObject::invokeMethod(obj, "engineMessageHandler", Qt::QueuedConnection, Q_ARG(QByteArray, b));
    78     QMetaObject::invokeMethod(obj, "engineMessageHandler", Qt::QueuedConnection, Q_ARG(MessageType, mt), Q_ARG(QByteArray, b));
    71 }
    79 }
    72 
    80 
    73 void HWEngine::engineMessageHandler(const QByteArray &msg)
    81 void HWEngine::engineMessageHandler(MessageType mt, const QByteArray &msg)
    74 {
    82 {
    75     if(msg.size() == 128 * 256)
    83     switch(mt)
    76     {
    84     {
       
    85     case MSG_PREVIEW:
    77         PreviewImageProvider * preview = (PreviewImageProvider *)m_engine->imageProvider(QLatin1String("preview"));
    86         PreviewImageProvider * preview = (PreviewImageProvider *)m_engine->imageProvider(QLatin1String("preview"));
    78         preview->setPixmap(msg);
    87         preview->setPixmap(msg);
    79         emit previewImageChanged();
    88         emit previewImageChanged();
       
    89         break;
    80     }
    90     }
    81 }
    91 }
    82 
    92 
    83 QString HWEngine::currentSeed()
    93 QString HWEngine::currentSeed()
    84 {
    94 {
    85     return m_seed;
    95     return QString::fromLatin1(flibGetSeed());
    86 }
    96 }