History

WIP commit

Anthony J. Thibault committed 9 years ago

Commit 5e25d071 parent f8055a03 files · +84 −4Browse files

Showing the changes to libraries/script-engine/src/TabletScriptingInterface.cpp (1 of 3 files). Show all

Unified · Split

libraries/script-engine/src/TabletScriptingInterface.cpp+64−1
@@ -22,6 +22,22 @@ TabletScriptingInterface::TabletScriptingInterface() { · 21 unmodified lines
2222 qmlRegisterType<SoundEffect>("Hifi", 1, 0, "SoundEffect");
2323 }
2424
25+QObject* TabletScriptingInterface::getSystemToolbarProxy() {
26+ const QString SYSTEM_TOOLBAR = "com.highfidelity.interface.toolbar.system";
27+ Qt::ConnectionType connectionType = Qt::AutoConnection;
28+ if (QThread::currentThread() != _toolbarScriptingInterface->thread()) {
29+ connectionType = Qt::BlockingQueuedConnection;
30+ }
31+ QObject* toolbarProxy = nullptr;
32+ bool hasResult = QMetaObject::invokeMethod(_toolbarScriptingInterface, "getToolbar", connectionType, Q_RETURN_ARG(QObject*, toolbarProxy), Q_ARG(QString, SYSTEM_TOOLBAR));
33+ if (hasResult) {
34+ return toolbarProxy;
35+ } else {
36+ qCWarning(scriptengine) << "ToolbarScriptingInterface getToolbar has no result";
37+ return nullptr;
38+ }
39+}
40+
2541 QObject* TabletScriptingInterface::getTablet(const QString& tabletId) {
2642
2743 std::lock_guard<std::mutex> guard(_mutex);
@@ -145,6 +161,21 @@ TabletProxy::TabletProxy(QString name) : _name(name) { · 117 unmodified lines
145161 ;
146162 }
147163
164+void TabletProxy::setToolbarMode(bool toolbarMode) {
165+ if (toolbarMode == _toolbarMode) {
166+ return;
167+ }
168+
169+ if (toolbarMode) {
170+ removeButtonsFromHomeScreen();
171+ addButtonsToToolbar();
172+ } else {
173+ removeButtonsFromToolbar();
174+ addButtonsToHomeScreen();
175+ }
176+ _toolbarMode = toolbarMode;
177+}
178+
148179 static void addButtonProxyToQmlTablet(QQuickItem* qmlTablet, TabletButtonProxy* buttonProxy) {
149180 QVariant resultVar;
150181 Qt::ConnectionType connectionType = Qt::AutoConnection;
@@ -379,12 +410,34 @@ void TabletProxy::addButtonsToMenuScreen() { · 228 unmodified lines
379410 }
380411
381412 void TabletProxy::removeButtonsFromHomeScreen() {
382− auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
383413 for (auto& buttonProxy : _tabletButtonProxies) {
384414 buttonProxy->setQmlButton(nullptr);
385415 }
386416 }
387417
418+void TabletProxy::addButtonsToToolbar() {
419+ auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
420+ QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy();
421+ for (auto& buttonProxy : _tabletButtonProxies) {
422+ // copy properties from tablet button proxy to toolbar button proxy.
423+ Qt::ConnectionType connectionType = Qt::AutoConnection;
424+ if (QThread::currentThread() != toolbarProxy->thread()) {
425+ connectionType = Qt::BlockingQueuedConnection;
426+ }
427+ QObject* toolbarButtonProxy = nullptr;
428+ bool hasResult = QMetaObject::invokeMethod(toolbarProxy, "addButton", connectionType, Q_RETURN_ARG(QObject*, toolbarButtonProxy), Q_ARG(QVariant, buttonProxy->getProperties()));
429+ if (hasResult) {
430+ buttonProxy->setToolbarButtonProxy(toolbarButtonProxy);
431+ } else {
432+ qCWarning(scriptengine) << "ToolbarProxy addButton has no result";
433+ }
434+ }
435+}
436+
437+void TabletProxy::removeButtonsFromToolbar() {
438+ //
439+}
440+
388441 QQuickItem* TabletProxy::getQmlTablet() const {
389442 if (!_qmlTabletRoot) {
390443 return nullptr;
@@ -444,6 +497,11 @@ void TabletButtonProxy::setQmlButton(QQuickItem* qmlButton) { · 53 unmodified lines
444497 _qmlButton = qmlButton;
445498 }
446499
500+void TabletButtonProxy::setToolbarButtonProxy(QObject* toolbarButtonProxy) {
501+ std::lock_guard<std::mutex> guard(_mutex);
502+ _toolbarButtonProxy = toolbarButtonProxy;
503+}
504+
447505 QVariantMap TabletButtonProxy::getProperties() const {
448506 std::lock_guard<std::mutex> guard(_mutex);
449507 return _properties;
@@ -451,6 +509,7 @@ QVariantMap TabletButtonProxy::getProperties() const { · 1 unmodified line
451509
452510 void TabletButtonProxy::editProperties(QVariantMap properties) {
453511 std::lock_guard<std::mutex> guard(_mutex);
512+
454513 QVariantMap::const_iterator iter = properties.constBegin();
455514 while (iter != properties.constEnd()) {
456515 _properties[iter.key()] = iter.value();
@@ -459,6 +518,10 @@ void TabletButtonProxy::editProperties(QVariantMap properties) { · 2 unmodified lines
459518 }
460519 ++iter;
461520 }
521+
522+ if (_toolbarButtonProxy) {
523+ QMetaObject::invokeMethod(_toolbarButtonProxy, "editProperties", Qt::AutoConnection, Q_ARG(QVariant, properties));
524+ }
462525 }
463526
464527 #include "TabletScriptingInterface.moc"