qmlapplicationviewer.cpp
177 lines
| 4.9 KiB
| text/x-c
|
CppLexer
Mika Salmela
|
r2481 | // checksum 0xbd34 version 0x80016 | ||
/* | ||||
This file was generated by the Qt Quick Application wizard of Qt Creator. | ||||
QmlApplicationViewer 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 "qmlapplicationviewer.h" | ||||
#include <QDir> | ||||
#include <QFileInfo> | ||||
#include <QApplication> | ||||
#include <QDeclarativeComponent> | ||||
#include <QDeclarativeEngine> | ||||
#include <QDeclarativeContext> | ||||
#include <qplatformdefs.h> // MEEGO_EDITION_HARMATTAN | ||||
#ifdef HARMATTAN_BOOSTER | ||||
#include <MDeclarativeCache> | ||||
#endif | ||||
#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 | ||||
#include <qt_private/qdeclarativedebughelper_p.h> | ||||
#if !defined(NO_JSDEBUGGER) | ||||
#include <jsdebuggeragent.h> | ||||
#endif | ||||
#if !defined(NO_QMLOBSERVER) | ||||
#include <qdeclarativeviewobserver.h> | ||||
#endif | ||||
// Enable debugging before any QDeclarativeEngine is created | ||||
struct QmlJsDebuggingEnabler | ||||
{ | ||||
QmlJsDebuggingEnabler() | ||||
{ | ||||
QDeclarativeDebugHelper::enableDebugging(); | ||||
} | ||||
}; | ||||
// Execute code in constructor before first QDeclarativeEngine is instantiated | ||||
static QmlJsDebuggingEnabler enableDebuggingHelper; | ||||
#endif // QMLJSDEBUGGER | ||||
class QmlApplicationViewerPrivate | ||||
{ | ||||
QString mainQmlFile; | ||||
friend class QmlApplicationViewer; | ||||
static QString adjustPath(const QString &path); | ||||
}; | ||||
QString QmlApplicationViewerPrivate::adjustPath(const QString &path) | ||||
{ | ||||
#ifdef Q_OS_MAC | ||||
if (!QDir::isAbsolutePath(path)) | ||||
return QString::fromLatin1("%1/../Resources/%2") | ||||
.arg(QCoreApplication::applicationDirPath(), path); | ||||
#elif defined(Q_OS_QNX) | ||||
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; | ||||
} | ||||
QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) | ||||
: QDeclarativeView(parent) | ||||
, d(new QmlApplicationViewerPrivate()) | ||||
{ | ||||
connect(engine(), SIGNAL(quit()), SLOT(close())); | ||||
setResizeMode(QDeclarativeView::SizeRootObjectToView); | ||||
// Qt versions prior to 4.8.0 don't have QML/JS debugging services built in | ||||
#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 | ||||
#if !defined(NO_JSDEBUGGER) | ||||
new QmlJSDebugger::JSDebuggerAgent(engine()); | ||||
#endif | ||||
#if !defined(NO_QMLOBSERVER) | ||||
new QmlJSDebugger::QDeclarativeViewObserver(this, this); | ||||
#endif | ||||
#endif | ||||
} | ||||
QmlApplicationViewer::~QmlApplicationViewer() | ||||
{ | ||||
delete d; | ||||
} | ||||
QmlApplicationViewer *QmlApplicationViewer::create() | ||||
{ | ||||
return new QmlApplicationViewer(); | ||||
} | ||||
void QmlApplicationViewer::setMainQmlFile(const QString &file) | ||||
{ | ||||
d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); | ||||
#ifdef Q_OS_ANDROID | ||||
setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); | ||||
#else | ||||
setSource(QUrl::fromLocalFile(d->mainQmlFile)); | ||||
#endif | ||||
} | ||||
void QmlApplicationViewer::addImportPath(const QString &path) | ||||
{ | ||||
engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); | ||||
} | ||||
void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) | ||||
{ | ||||
#if QT_VERSION < 0x050000 | ||||
Qt::WidgetAttribute attribute; | ||||
switch (orientation) { | ||||
#if QT_VERSION < 0x040702 | ||||
// Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes | ||||
case ScreenOrientationLockPortrait: | ||||
attribute = static_cast<Qt::WidgetAttribute>(128); | ||||
break; | ||||
case ScreenOrientationLockLandscape: | ||||
attribute = static_cast<Qt::WidgetAttribute>(129); | ||||
break; | ||||
default: | ||||
case ScreenOrientationAuto: | ||||
attribute = static_cast<Qt::WidgetAttribute>(130); | ||||
break; | ||||
#else // QT_VERSION < 0x040702 | ||||
case ScreenOrientationLockPortrait: | ||||
attribute = Qt::WA_LockPortraitOrientation; | ||||
break; | ||||
case ScreenOrientationLockLandscape: | ||||
attribute = Qt::WA_LockLandscapeOrientation; | ||||
break; | ||||
default: | ||||
case ScreenOrientationAuto: | ||||
attribute = Qt::WA_AutoOrientation; | ||||
break; | ||||
#endif // QT_VERSION < 0x040702 | ||||
}; | ||||
setAttribute(attribute, true); | ||||
#else // QT_VERSION < 0x050000 | ||||
Q_UNUSED(orientation) | ||||
#endif // QT_VERSION < 0x050000 | ||||
} | ||||
void QmlApplicationViewer::showExpanded() | ||||
{ | ||||
#if defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR) | ||||
showFullScreen(); | ||||
#elif defined(Q_WS_MAEMO_5) || defined(Q_OS_QNX) | ||||
showMaximized(); | ||||
#else | ||||
show(); | ||||
#endif | ||||
} | ||||
QApplication *createApplication(int &argc, char **argv) | ||||
{ | ||||
#ifdef HARMATTAN_BOOSTER | ||||
return MDeclarativeCache::qApplication(argc, argv); | ||||
#else | ||||
return new QApplication(argc, argv); | ||||
#endif | ||||
} | ||||