} buttonProxy->setQmlButton(nullptr); }} void TabletProxy::desktopWindowClosed() { gotoHomeScreen();} void TabletProxy::addButtonsToToolbar() { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); Qt::ConnectionType connectionType = Qt::AutoConnection; if (QThread::currentThread() != toolbarProxy->thread()) { connectionType = Qt::BlockingQueuedConnection; } for (auto& buttonProxy : _tabletButtonProxies) { // copy properties from tablet button proxy to toolbar button proxy. QObject* toolbarButtonProxy = nullptr; bool hasResult = QMetaObject::invokeMethod(toolbarProxy, "addButton", connectionType, Q_RETURN_ARG(QObject*, toolbarButtonProxy), Q_ARG(QVariant, buttonProxy->getProperties())); if (hasResult) { buttonProxy->setToolbarButtonProxy(toolbarButtonProxy); } else { qCWarning(scriptengine) << "ToolbarProxy addButton has no result"; } } // make the toolbar visible QMetaObject::invokeMethod(toolbarProxy, "writeProperty", Qt::AutoConnection, Q_ARG(QString, "visible"), Q_ARG(QVariant, QVariant(true)));} void TabletProxy::removeButtonsFromToolbar() { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); for (auto& buttonProxy : _tabletButtonProxies) { // remove button from toolbarProxy QMetaObject::invokeMethod(toolbarProxy, "removeButton", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getUuid().toString())); buttonProxy->setToolbarButtonProxy(nullptr); }} QQuickItem* TabletProxy::getQmlTablet() const { if (!_qmlTabletRoot) { return nullptr; } auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); if (!loader) { return nullptr; } auto tablet = loader->findChild<QQuickItem*>("tablet"); if (!tablet) { return nullptr; } return tablet;} QQuickItem* TabletProxy::getQmlMenu() const { if (!_qmlTabletRoot) { return nullptr; } auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); if (!loader) { return nullptr; } QQuickItem* VrMenu = loader->findChild<QQuickItem*>("tabletMenu"); if (!VrMenu) { return nullptr; } QQuickItem* menuList = VrMenu->findChild<QQuickItem*>("tabletMenuHandlerItem"); if (!menuList) { return nullptr; } return menuList;} //// TabletButtonProxy// const QString UUID_KEY = "uuid";const QString OBJECT_NAME_KEY = "objectName";const QString STABLE_ORDER_KEY = "stableOrder";static int s_stableOrder = 1; TabletButtonProxy::TabletButtonProxy(const QVariantMap& properties) : _uuid(QUuid::createUuid()), _stableOrder(++s_stableOrder), _properties(properties) { // this is used to uniquely identify this button. _properties[UUID_KEY] = _uuid; _properties[OBJECT_NAME_KEY] = _uuid.toString(); _properties[STABLE_ORDER_KEY] = _stableOrder;} void TabletButtonProxy::setQmlButton(QQuickItem* qmlButton) { std::lock_guard<std::mutex> guard(_mutex); _qmlButton = qmlButton;} void TabletButtonProxy::setToolbarButtonProxy(QObject* toolbarButtonProxy) { std::lock_guard<std::mutex> guard(_mutex); _toolbarButtonProxy = toolbarButtonProxy; if (_toolbarButtonProxy) { QObject::connect(_toolbarButtonProxy, SIGNAL(clicked()), this, SLOT(clickedSlot())); }} QVariantMap TabletButtonProxy::getProperties() const { std::lock_guard<std::mutex> guard(_mutex); return _properties;} void TabletButtonProxy::editProperties(QVariantMap properties) { std::lock_guard<std::mutex> guard(_mutex); QVariantMap::const_iterator iter = properties.constBegin(); while (iter != properties.constEnd()) { _properties[iter.key()] = iter.value(); if (_qmlButton) { QMetaObject::invokeMethod(_qmlButton, "changeProperty", Qt::AutoConnection, Q_ARG(QVariant, QVariant(iter.key())), Q_ARG(QVariant, iter.value())); } ++iter; } if (_toolbarButtonProxy) { QMetaObject::invokeMethod(_toolbarButtonProxy, "editProperties", Qt::AutoConnection, Q_ARG(QVariantMap, properties)); }} #include "TabletScriptingInterface.moc" Lines 501–636 of 636. Previous lines
} buttonProxy->setQmlButton(nullptr); } } void TabletProxy::desktopWindowClosed() { gotoHomeScreen(); } void TabletProxy::addButtonsToToolbar() { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); Qt::ConnectionType connectionType = Qt::AutoConnection; if (QThread::currentThread() != toolbarProxy->thread()) { connectionType = Qt::BlockingQueuedConnection; } for (auto& buttonProxy : _tabletButtonProxies) { // copy properties from tablet button proxy to toolbar button proxy. QObject* toolbarButtonProxy = nullptr; bool hasResult = QMetaObject::invokeMethod(toolbarProxy, "addButton", connectionType, Q_RETURN_ARG(QObject*, toolbarButtonProxy), Q_ARG(QVariant, buttonProxy->getProperties())); if (hasResult) { buttonProxy->setToolbarButtonProxy(toolbarButtonProxy); } else { qCWarning(scriptengine) << "ToolbarProxy addButton has no result"; } } // make the toolbar visible QMetaObject::invokeMethod(toolbarProxy, "writeProperty", Qt::AutoConnection, Q_ARG(QString, "visible"), Q_ARG(QVariant, QVariant(true))); } void TabletProxy::removeButtonsFromToolbar() { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); for (auto& buttonProxy : _tabletButtonProxies) { // remove button from toolbarProxy QMetaObject::invokeMethod(toolbarProxy, "removeButton", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getUuid().toString())); buttonProxy->setToolbarButtonProxy(nullptr); } } QQuickItem* TabletProxy::getQmlTablet() const { if (!_qmlTabletRoot) { return nullptr; } auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); if (!loader) { return nullptr; } auto tablet = loader->findChild<QQuickItem*>("tablet"); if (!tablet) { return nullptr; } return tablet; } QQuickItem* TabletProxy::getQmlMenu() const { if (!_qmlTabletRoot) { return nullptr; } auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); if (!loader) { return nullptr; } QQuickItem* VrMenu = loader->findChild<QQuickItem*>("tabletMenu"); if (!VrMenu) { return nullptr; } QQuickItem* menuList = VrMenu->findChild<QQuickItem*>("tabletMenuHandlerItem"); if (!menuList) { return nullptr; } return menuList; } // // TabletButtonProxy // const QString UUID_KEY = "uuid"; const QString OBJECT_NAME_KEY = "objectName"; const QString STABLE_ORDER_KEY = "stableOrder"; static int s_stableOrder = 1; TabletButtonProxy::TabletButtonProxy(const QVariantMap& properties) : _uuid(QUuid::createUuid()), _stableOrder(++s_stableOrder), _properties(properties) { // this is used to uniquely identify this button. _properties[UUID_KEY] = _uuid; _properties[OBJECT_NAME_KEY] = _uuid.toString(); _properties[STABLE_ORDER_KEY] = _stableOrder; } void TabletButtonProxy::setQmlButton(QQuickItem* qmlButton) { std::lock_guard<std::mutex> guard(_mutex); _qmlButton = qmlButton; } void TabletButtonProxy::setToolbarButtonProxy(QObject* toolbarButtonProxy) { std::lock_guard<std::mutex> guard(_mutex); _toolbarButtonProxy = toolbarButtonProxy; if (_toolbarButtonProxy) { QObject::connect(_toolbarButtonProxy, SIGNAL(clicked()), this, SLOT(clickedSlot())); } } QVariantMap TabletButtonProxy::getProperties() const { std::lock_guard<std::mutex> guard(_mutex); return _properties; } void TabletButtonProxy::editProperties(QVariantMap properties) { std::lock_guard<std::mutex> guard(_mutex); QVariantMap::const_iterator iter = properties.constBegin(); while (iter != properties.constEnd()) { _properties[iter.key()] = iter.value(); if (_qmlButton) { QMetaObject::invokeMethod(_qmlButton, "changeProperty", Qt::AutoConnection, Q_ARG(QVariant, QVariant(iter.key())), Q_ARG(QVariant, iter.value())); } ++iter; } if (_toolbarButtonProxy) { QMetaObject::invokeMethod(_toolbarButtonProxy, "editProperties", Qt::AutoConnection, Q_ARG(QVariantMap, properties)); } } #include "TabletScriptingInterface.moc"