qmlapplicationviewer.cpp
174 lines
| 4.9 KiB
| text/x-c
|
CppLexer
Tero Ahola
|
r1240 | // checksum 0x3fbf version 0x70013 | ||
/* | ||||
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_UNIX | ||||
#ifdef Q_OS_MAC | ||||
if (!QDir::isAbsolutePath(path)) | ||||
return QString::fromLatin1("%1/../Resources/%2") | ||||
.arg(QCoreApplication::applicationDirPath(), path); | ||||
#else | ||||
const QString pathInInstallDir = | ||||
QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); | ||||
if (QFileInfo(pathInInstallDir).exists()) | ||||
return pathInInstallDir; | ||||
#endif | ||||
#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); | ||||
setSource(QUrl::fromLocalFile(d->mainQmlFile)); | ||||
} | ||||
void QmlApplicationViewer::addImportPath(const QString &path) | ||||
{ | ||||
engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); | ||||
} | ||||
void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) | ||||
{ | ||||
#if defined(Q_OS_SYMBIAN) | ||||
// If the version of Qt on the device is < 4.7.2, that attribute won't work | ||||
if (orientation != ScreenOrientationAuto) { | ||||
const QStringList v = QString::fromLatin1(qVersion()).split(QLatin1Char('.')); | ||||
if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) { | ||||
qWarning("Screen orientation locking only supported with Qt 4.7.2 and above"); | ||||
return; | ||||
} | ||||
} | ||||
#endif // Q_OS_SYMBIAN | ||||
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); | ||||
} | ||||
void QmlApplicationViewer::showExpanded() | ||||
{ | ||||
#if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR) | ||||
showFullScreen(); | ||||
#elif defined(Q_WS_MAEMO_5) | ||||
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 | ||||
} | ||||