Merge pull request #9368 from hyperlogic/tablet-ui

Fixes for qt asserts in debug
This commit is contained in:
Seth Alves 2017-01-12 13:46:42 -08:00 committed by GitHub
commit 998cda6dd7
2 changed files with 17 additions and 18 deletions

View file

@ -21,10 +21,6 @@ TabletScriptingInterface::TabletScriptingInterface() {
qmlRegisterType<SoundEffect>("Hifi", 1, 0, "SoundEffect"); qmlRegisterType<SoundEffect>("Hifi", 1, 0, "SoundEffect");
} }
TabletScriptingInterface::~TabletScriptingInterface() {
qDebug() << "Shutting down TabletScriptingInterface";
}
QObject* TabletScriptingInterface::getTablet(const QString& tabletId) { QObject* TabletScriptingInterface::getTablet(const QString& tabletId) {
std::lock_guard<std::mutex> guard(_mutex); std::lock_guard<std::mutex> guard(_mutex);
@ -57,7 +53,6 @@ void TabletScriptingInterface::setQmlTabletRoot(QString tabletId, QQuickItem* qm
static const char* TABLET_SOURCE_URL = "Tablet.qml"; static const char* TABLET_SOURCE_URL = "Tablet.qml";
static const char* WEB_VIEW_SOURCE_URL = "TabletWebView.qml"; static const char* WEB_VIEW_SOURCE_URL = "TabletWebView.qml";
static const char* LOADER_SOURCE_PROPERTY_NAME = "LoaderSource";
static const char* VRMENU_SOURCE_URL = "TabletMenu.qml"; static const char* VRMENU_SOURCE_URL = "TabletMenu.qml";
TabletProxy::TabletProxy(QString name) : _name(name) { TabletProxy::TabletProxy(QString name) : _name(name) {
@ -95,38 +90,40 @@ void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscr
gotoHomeScreen(); gotoHomeScreen();
} else { } else {
removeButtonsFromHomeScreen(); removeButtonsFromHomeScreen();
_state = State::Uninitialized;
} }
} }
void TabletProxy::gotoMenuScreen() { void TabletProxy::gotoMenuScreen() {
if (_qmlTabletRoot) { if (_qmlTabletRoot) {
_qmlTabletRoot->setProperty(LOADER_SOURCE_PROPERTY_NAME, VRMENU_SOURCE_URL); if (_state != State::Menu) {
auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader");
QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToMenuScreen())); QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToMenuScreen()));
QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(VRMENU_SOURCE_URL))); QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(VRMENU_SOURCE_URL)));
_state = State::Menu;
}
} }
} }
void TabletProxy::gotoHomeScreen() { void TabletProxy::gotoHomeScreen() {
if (_qmlTabletRoot) { if (_qmlTabletRoot) {
QString tabletSource = _qmlTabletRoot->property(LOADER_SOURCE_PROPERTY_NAME).toString(); if (_state != State::Home) {
if (tabletSource != TABLET_SOURCE_URL) {
_qmlTabletRoot->setProperty(LOADER_SOURCE_PROPERTY_NAME, TABLET_SOURCE_URL);
auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader");
QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen())); QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen()));
QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_SOURCE_URL))); QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_SOURCE_URL)));
_state = State::Home;
} }
} }
} }
void TabletProxy::gotoWebScreen(const QString& url) { void TabletProxy::gotoWebScreen(const QString& url) {
if (_qmlTabletRoot) { if (_qmlTabletRoot) {
removeButtonsFromHomeScreen(); if (_state == State::Home) {
QString tabletSource = _qmlTabletRoot->property(LOADER_SOURCE_PROPERTY_NAME).toString(); removeButtonsFromHomeScreen();
if (tabletSource != WEB_VIEW_SOURCE_URL) { }
_qmlTabletRoot->setProperty(LOADER_SOURCE_PROPERTY_NAME, WEB_VIEW_SOURCE_URL); if (_state != State::Web) {
QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(WEB_VIEW_SOURCE_URL))); QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(WEB_VIEW_SOURCE_URL)));
// TABLET_UI_HACK: TODO: addEventBridge to tablet.... _state = State::Web;
} }
QMetaObject::invokeMethod(_qmlTabletRoot, "loadWebUrl", Q_ARG(const QVariant&, QVariant(url))); QMetaObject::invokeMethod(_qmlTabletRoot, "loadWebUrl", Q_ARG(const QVariant&, QVariant(url)));
} }

View file

@ -36,7 +36,6 @@ class TabletScriptingInterface : public QObject, public Dependency {
Q_OBJECT Q_OBJECT
public: public:
TabletScriptingInterface(); TabletScriptingInterface();
virtual ~TabletScriptingInterface();
/**jsdoc /**jsdoc
* Creates or retruns a new TabletProxy and returns it. * Creates or retruns a new TabletProxy and returns it.
@ -132,6 +131,9 @@ protected:
std::vector<QSharedPointer<TabletButtonProxy>> _tabletButtonProxies; std::vector<QSharedPointer<TabletButtonProxy>> _tabletButtonProxies;
QQuickItem* _qmlTabletRoot { nullptr }; QQuickItem* _qmlTabletRoot { nullptr };
QObject* _qmlOffscreenSurface { nullptr }; QObject* _qmlOffscreenSurface { nullptr };
enum class State { Uninitialized, Home, Web, Menu };
State _state { State::Uninitialized };
}; };
/**jsdoc /**jsdoc