#include "qmlapplicationviewer.h" #include #include #include #include #include #include #if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) #include #include #include #include #endif // Q_OS_SYMBIAN && ORIENTATIONLOCK 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 QCoreApplication::applicationDirPath() + QLatin1String("/../Resources/") + path; #else const QString pathInShareDir = QCoreApplication::applicationDirPath() + QLatin1String("/../share/") + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + QLatin1Char('/') + path; if (QFileInfo(pathInShareDir).exists()) return pathInShareDir; #endif #endif return path; } QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : #ifdef QMLINSPECTOR QmlViewer::QDeclarativeDesignView(parent) #else QDeclarativeView(parent) #endif , m_d(new QmlApplicationViewerPrivate) { connect(engine(), SIGNAL(quit()), SLOT(close())); setResizeMode(QDeclarativeView::SizeRootObjectToView); } QmlApplicationViewer::~QmlApplicationViewer() { delete m_d; } void QmlApplicationViewer::setMainQmlFile(const QString &file) { m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); } void QmlApplicationViewer::addImportPath(const QString &path) { engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); } void QmlApplicationViewer::setOrientation(Orientation orientation) { if (orientation != Auto) { #if defined(Q_OS_SYMBIAN) #if defined(ORIENTATIONLOCK) const CAknAppUiBase::TAppUiOrientation uiOrientation = (orientation == LockPortrait) ? CAknAppUi::EAppUiOrientationPortrait : CAknAppUi::EAppUiOrientationLandscape; CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); TRAPD(error, if (appUi) appUi->SetOrientationL(uiOrientation); ); #else // ORIENTATIONLOCK qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); #endif // ORIENTATIONLOCK #endif // Q_OS_SYMBIAN } } void QmlApplicationViewer::setLoadDummyData(bool loadDummyData) { if (loadDummyData) { const QFileInfo mainQmlFileInfo(m_d->mainQmlFile); const QDir dir(mainQmlFileInfo.absolutePath() + QLatin1String("/dummydata"), QLatin1String("*.qml")); foreach (const QFileInfo &qmlFile, dir.entryInfoList()) { QFile f(qmlFile.absoluteFilePath()); if (f.open(QIODevice::ReadOnly)) { QDeclarativeComponent comp(engine()); comp.setData(f.readAll(), QUrl()); QObject *dummyData = comp.create(); if (dummyData) { rootContext()->setContextProperty(qmlFile.baseName(), dummyData); dummyData->setParent(this); } } } } }