blob: b8f899f04a5e3b2e638d003957489057f8cc1193 [file] [log] [blame]
/*
*
* Copyright 2013 Canonical Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
#ifndef QMLPLUGIN_H_SDASDAS
#define QMLPLUGIN_H_SDASDAS
#include <QtCore>
#include <QtQuick>
#include <cassert>
#include "cordova.h"
class CordovaWrapper: public QQuickItem {
Q_OBJECT
Q_PROPERTY(QString wwwDir READ wwwDir WRITE setWwwDir SCRIPTABLE true FINAL)
Q_PROPERTY(QString mainUrl READ mainUrl CONSTANT)
public:
CordovaWrapper() = default;
QString wwwDir() {
if (!_cordova.data()) {
return "";
}
return _wwwDir;
}
void setWwwDir(const QString &www) {
_wwwDir = www;
initialize();
}
Q_INVOKABLE QString getSplashscreenPath() {
assert(_cordova.data());
return _cordova->getSplashscreenPath();
}
Q_INVOKABLE static QString getDataLocation() {
return QStandardPaths::writableLocation(QStandardPaths::DataLocation);
}
QString mainUrl() {
if (!_cordova.data()) {
return "";
}
return _cordova->mainUrl();
}
Q_INVOKABLE bool isUrlWhiteListed(const QString &uri) {
if (!_cordova.data()) {
return true;
}
return _cordova->config().whitelist().isUrlWhiteListed(uri);
}
Q_INVOKABLE CordovaInternal::Config* config() const {
assert(_cordova.data());
//FIXME:
CordovaInternal::Config *config = const_cast<CordovaInternal::Config*>(&_cordova->config());
QQmlEngine::setObjectOwnership(config, QQmlEngine::CppOwnership);
return config;
}
signals:
void javaScriptExecNeeded(const QString &js);
void pluginWantsToBeAdded(const QString &pluginName, QObject *pluginObject, const QString &pluginShortName);
void qmlExecNeeded(const QString &src);
public slots:
void setTitle(const QString &title) {
if (!_cordova.data() || !_cordova->rootObject()) {
return;
}
return _cordova->setTitle(title);
}
void loadFinished(bool b) {
if (!_cordova.data()) {
return;
}
return _cordova->loadFinished(b);
}
void appLoaded() {
assert(_cordova.data());
return _cordova->appLoaded();
}
private:
void initialize() {
assert(!_cordova.data());
if (!_wwwDir.size())
return;
_cordova = QSharedPointer<Cordova>(new Cordova(QDir(_wwwDir), this));
connect(_cordova.data(), &Cordova::javaScriptExecNeeded, [&] (const QString &js) {
emit javaScriptExecNeeded(js);
});
connect(_cordova.data(), &Cordova::qmlExecNeeded, [&] (const QString &src) {
emit qmlExecNeeded(src);
});
connect(_cordova.data(), &Cordova::pluginWantsToBeAdded, [&] (const QString &pluginName, QObject *pluginObject, const QString &pluginShortName) {
emit pluginWantsToBeAdded(pluginName, pluginObject, pluginShortName);
});
}
QSharedPointer<Cordova> _cordova;
QString _wwwDir;
};
class CordovaUbuntuPlugin: public QQmlExtensionPlugin {
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
public:
void registerTypes(const char *uri);
};
#endif