// // // InfoView.h // // Created by Bradley Austin Davis 2015/04/25 // Copyright 2015 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #include "InfoView.h" #include #include #include #include const QUrl InfoView::QML{ "InfoView.qml" }; const QString InfoView::NAME{ "InfoView" }; Setting::Handle infoVersion("info-version", QString()); static bool registered{ false }; InfoView::InfoView(QQuickItem* parent) : QQuickItem(parent) { registerType(); } void InfoView::registerType() { if (!registered) { qmlRegisterType("Hifi", 1, 0, NAME.toLocal8Bit().constData()); registered = true; } } QString fetchVersion(const QUrl& url) { QXmlQuery query; query.bindVariable("file", QVariant(url)); query.setQuery("string((doc($file)//input[@id='version'])[1]/@value)"); QString r; query.evaluateTo(&r); return r.trimmed(); } void InfoView::show(const QString& path, bool firstOrChangedOnly, QString urlQuery) { registerType(); QUrl url; if (QDir(path).isRelative()) { url = PathUtils::resourcesUrl(path); } else { url = QUrl::fromLocalFile(path); } url.setQuery(urlQuery); if (firstOrChangedOnly) { const QString lastVersion = infoVersion.get(); const QString version = fetchVersion(url); // If we have version information stored if (!lastVersion.isNull()) { // Check to see the document version. If it's valid and matches // the stored version, we're done, so exit if (version.isNull() || version == lastVersion) { return; } } infoVersion.set(version); } if (auto offscreenUI = DependencyManager::get()) { QString infoViewName(NAME + "_" + path); offscreenUI->show(QML, NAME + "_" + path, [=] (QQmlContext* context, QObject* newObject) { QQuickItem* item = dynamic_cast(newObject); item->setWidth(1024); item->setHeight(720); InfoView* newInfoView = newObject->findChild(); Q_ASSERT(newInfoView); newInfoView->parent()->setObjectName(infoViewName); newInfoView->setUrl(url); }); } } QUrl InfoView::url() { return _url; } void InfoView::setUrl(const QUrl& url) { if (url != _url) { _url = url; emit urlChanged(); } }