# HG changeset patch # User unc0rr # Date 1410468674 -14400 # Node ID 3313336c1ee00f357ab65dd9b6d950e32cff6bc3 # Parent c3127602329527292ff83c952a258b04f82604ea Let's get it started diff -r c31276023295 -r 3313336c1ee0 QTfrontend/net/tcpBase.cpp --- a/QTfrontend/net/tcpBase.cpp Mon Aug 25 22:52:59 2014 +0400 +++ b/QTfrontend/net/tcpBase.cpp Fri Sep 12 00:51:14 2014 +0400 @@ -111,8 +111,6 @@ m_connected(false), IPCSocket(0) { - process = 0; - if(!IPCServer) { IPCServer = new QTcpServer(0); diff -r c31276023295 -r 3313336c1ee0 qmlFrontend/hwengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlFrontend/hwengine.cpp Fri Sep 12 00:51:14 2014 +0400 @@ -0,0 +1,44 @@ +#include +#include + +#include "hwengine.h" + +extern "C" { + void (*RunEngine)(int argc, char ** argv); +} + +HWEngine::HWEngine(QObject *parent) : + QObject(parent) +{ + QLibrary hwlib("hwengine"); + + if(!hwlib.load()) + qWarning("Engine library not found"); + + RunEngine = (void (*)(int, char **))hwlib.resolve("RunEngine"); +} + +HWEngine::~HWEngine() +{ + +} + +void HWEngine::run() +{ + RunEngine(0, nullptr); +} + +static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine) +{ + Q_UNUSED(engine) + Q_UNUSED(scriptEngine) + + HWEngine *hwengine = new HWEngine(); + return hwengine; +} + +void HWEngine::exposeToQML() +{ + qDebug("HWEngine::exposeToQML"); + qmlRegisterSingletonType("Hedgewars.Engine", 1, 0, "HWEngine", hwengine_singletontype_provider); +} diff -r c31276023295 -r 3313336c1ee0 qmlFrontend/hwengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlFrontend/hwengine.h Fri Sep 12 00:51:14 2014 +0400 @@ -0,0 +1,23 @@ +#ifndef HWENGINE_H +#define HWENGINE_H + +#include + +class HWEngine : public QObject +{ + Q_OBJECT +public: + explicit HWEngine(QObject *parent = 0); + ~HWEngine(); + + static void exposeToQML(); + Q_INVOKABLE void run(); + +signals: + +public slots: + +}; + +#endif // HWENGINE_H + diff -r c31276023295 -r 3313336c1ee0 qmlFrontend/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlFrontend/main.cpp Fri Sep 12 00:51:14 2014 +0400 @@ -0,0 +1,17 @@ +#include +#include "qtquick2applicationviewer/qtquick2applicationviewer.h" + +#include "hwengine.h" + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + HWEngine::exposeToQML(); + + QtQuick2ApplicationViewer viewer; + viewer.setMainQmlFile(QStringLiteral("qml/qmlFrontend/main.qml")); + viewer.showExpanded(); + + return app.exec(); +} diff -r c31276023295 -r 3313336c1ee0 qmlFrontend/qml/qmlFrontend/HWButton.qml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlFrontend/qml/qmlFrontend/HWButton.qml Fri Sep 12 00:51:14 2014 +0400 @@ -0,0 +1,23 @@ +import QtQuick 2.0 + +Rectangle { + id: hwbutton + width: 360 + height: 360 + color: "#15193a" + radius: 8 + border.width: 4 + border.color: "#ea761d" + opacity: 1 + + signal clicked() + + MouseArea { + id: mousearea + anchors.fill: parent + hoverEnabled: true + onEntered: parent.border.color = "#eaea00" + onExited: parent.border.color = "#ea761d" + onClicked: hwbutton.clicked() + } +} diff -r c31276023295 -r 3313336c1ee0 qmlFrontend/qml/qmlFrontend/main.qml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlFrontend/qml/qmlFrontend/main.qml Fri Sep 12 00:51:14 2014 +0400 @@ -0,0 +1,27 @@ +import QtQuick 2.0 +import Hedgewars.Engine 1.0 + +Rectangle { + width: 400 + height: 400 + + HWButton { + id: hwbutton1 + x: 8 + y: 66 + width: 166 + height: 158 + + onClicked: { + HWEngine.run() + } + } + + HWButton { + id: hwbutton2 + x: 192 + y: 66 + width: 200 + height: 139 + } +} diff -r c31276023295 -r 3313336c1ee0 qmlFrontend/qmlFrontend.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlFrontend/qmlFrontend.pro Fri Sep 12 00:51:14 2014 +0400 @@ -0,0 +1,32 @@ +# Add more folders to ship with the application, here +folder_01.source = qml/qmlFrontend +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# If your application uses the Qt Mobility libraries, uncomment the following +# lines and add the respective components to the MOBILITY variable. +# CONFIG += mobility +# MOBILITY += + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp \ + hwengine.cpp + +# Installation path +# target.path = + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +qtcAddDeployment() + +HEADERS += \ + qtquick2applicationviewer/qtquick2applicationviewer.h \ + hwengine.h + +OTHER_FILES += \ + qtquick2applicationviewer/qtquick2applicationviewer.pri \ + qml/qmlFrontend/HWButton.qml \ + qml/qmlFrontend/main.qml diff -r c31276023295 -r 3313336c1ee0 qmlFrontend/qtquick2applicationviewer/qtquick2applicationviewer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlFrontend/qtquick2applicationviewer/qtquick2applicationviewer.cpp Fri Sep 12 00:51:14 2014 +0400 @@ -0,0 +1,81 @@ +// checksum 0x4f6f version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#if defined(Q_OS_MAC) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif defined(Q_OS_BLACKBERRY) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) + showFullScreen(); +#else + show(); +#endif +} diff -r c31276023295 -r 3313336c1ee0 qmlFrontend/qtquick2applicationviewer/qtquick2applicationviewer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlFrontend/qtquick2applicationviewer/qtquick2applicationviewer.h Fri Sep 12 00:51:14 2014 +0400 @@ -0,0 +1,33 @@ +// checksum 0xfde6 version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff -r c31276023295 -r 3313336c1ee0 qmlFrontend/qtquick2applicationviewer/qtquick2applicationviewer.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlFrontend/qtquick2applicationviewer/qtquick2applicationviewer.pri Fri Sep 12 00:51:14 2014 +0400 @@ -0,0 +1,180 @@ +# checksum 0x7b0d version 0x90005 +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Android and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +android-no-sdk { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + target.path = /data/user/qt + + export(target.path) + INSTALLS += target +} else:android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + target ~= s,\\\\\\.?\\\\,\\, + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + targetFullPath ~= s,/\\.?/,/, + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + !isEmpty(target.path) { + installPrefix = $${target.path} + } else { + installPrefix = /opt/$${TARGET} + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + isEmpty(target.path) { + target.path = $${installPrefix}/bin + export(target.path) + } + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +}