From 9b3db0725bb9d380c83482efe65ce5de257638ad Mon Sep 17 00:00:00 2001 From: vladest Date: Thu, 7 Dec 2017 22:36:34 +0100 Subject: [PATCH] Retreive buttons list from tablet proxy --- .../resources/qml/hifi/tablet/Tablet.qml | 102 +++++------------- .../ui/src/ui/TabletScriptingInterface.cpp | 14 +++ .../ui/src/ui/TabletScriptingInterface.h | 9 ++ 3 files changed, 51 insertions(+), 74 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/Tablet.qml b/interface/resources/qml/hifi/tablet/Tablet.qml index dad7896a9e..45130e5306 100644 --- a/interface/resources/qml/hifi/tablet/Tablet.qml +++ b/interface/resources/qml/hifi/tablet/Tablet.qml @@ -12,51 +12,54 @@ Item { property int rowIndex: 6 // by default property int columnIndex: 1 // point to 'go to location' property int count: 0 - property var tabletButtons: new Array() - - onTabletButtonsChanged: console.warn("tablet buttons", tabletButtons) Timer { id: gridsRecreateTimer - interval: 100 + interval: 200 repeat: false onTriggered: { - console.warn("timer triggered", tabletButtons.length) doRecreateGrids() } } + //fake invisible item for initial buttons creations Item { id: fakeParent visible: parent } function doRecreateGrids() { - console.warn("buttons length", tabletButtons.length) + var tabletProxy = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tabletButtons = tabletProxy.getButtonsList(); for (var i = 0; i < swipeView.count; i++) { var gridOuter = swipeView.itemAt(i); gridOuter.destroy(); swipeView.removeItem(i); } + sortButtons(tabletButtons); + for (var buttonIndex = 0; buttonIndex < tabletButtons.length; buttonIndex++) { - console.warn("button index", buttonIndex) - var grid = swipeView.itemAt(swipeView.count - 1); - if (grid === null || grid.children[0].children.length === 12) { - grid = pageComponent.createObject(swipeView); - console.warn("grid index", swipeView.count) - //swipeView.addItem(grid); - } var button = tabletButtons[buttonIndex] - button.parent = grid.children[0] - grid.children[0].children.push(button); + if (button !== null) { + var grid = swipeView.itemAt(swipeView.count - 1); + if (grid === null || grid.children[0].children.length === 12) { + grid = pageComponent.createObject(swipeView); + } + //reparent to actual grid + + button.parent = grid.children[0] + grid.children[0].children.push(button); + } } } // used to look up a button by its uuid function findButtonIndex(uuid) { if (!uuid) { - return -1;//{ page: -1, index: -1}; + return -1; } + var tabletProxy = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var tabletButtons = tabletProxy.getButtonsList(); for (var i in tabletButtons) { var child = tabletButtons[i]; if (child.uuid === uuid) { @@ -64,28 +67,14 @@ Item { } } -// for (var gridIndex = 0; gridIndex < swipeView.count; gridIndex++) { -// var grid = swipeView.itemAt(gridIndex).children[0] -// for (var i in grid.children) { -// var child = grid.children[i]; -// if (child.uuid === uuid) { -// return { page: gridIndex, index: i}; -// } -// } -// } - return -1;//{ page: -1, index: -1}; + return -1; } - function sortButtons(/*gridIndex*/) { - //var children = []; - -// var grid = swipeView.itemAt(gridIndex).children[0] - -// for (var i = 0; i < grid.children.length; i++) { -// children[i] = grid.children[i]; -// } - + function sortButtons(tabletButtons) { tabletButtons.sort(function (a, b) { + if (a === null || b === null) { + return 0; + } if (a.sortOrder === b.sortOrder) { // subsort by stableOrder, because JS sort is not stable in qml. return a.stableOrder - b.stableOrder; @@ -93,12 +82,10 @@ Item { return a.sortOrder - b.sortOrder; } }); - - //grid.children = children; } - function doAddButton(/*grid, gridIndex,*/ component, properties) { - var button = component.createObject(/*swipeView.itemAt(0).children[0]*/fakeParent); + function doAddButton(component, properties) { + var button = component.createObject(fakeParent); // copy all properites to button var keys = Object.keys(properties).forEach(function (key) { @@ -112,15 +99,8 @@ Item { button.tabletRoot = parent.parent; } button.flickable = swipeView.contentItem - tabletButtons.push(button) - - //sortButtons(/*gridIndex*/); - tablet.count++ - //redraw pages - doRecreateGrids() -// console.warn("timer restarted", tabletButtons.length) -// gridsRecreateTimer.restart() + gridsRecreateTimer.restart() return button; } @@ -144,14 +124,7 @@ Item { // called by C++ code when a button should be added to the tablet function addButtonProxy(properties) { var component = Qt.createComponent("TabletButton.qml"); -// var grid = swipeView.itemAt(swipeView.count - 1) -// if (grid === null || grid.children[0].children.length === 12) { -// grid = pageComponent.createObject(swipeView) -// swipeView.addItem(grid) -// } - console.warn("component status", component.status); - - return doAddButton(/*grid, swipeView.count - 1,*/ component, properties) + return doAddButton(component, properties) } // called by C++ code when a button should be removed from the tablet @@ -160,10 +133,6 @@ Item { if (index < 0) { console.log("Warning: Tablet.qml could not find button with uuid = " + properties.uuid); } else { -// var grid = swipeView.itemAt(index.page).children[0] -// grid.children[index.index].destroy(); - console.warn("remove button proxy"); - tabletButtons.slice(index, 1); tablet.count-- //redraw grids gridsRecreateTimer.restart(); @@ -245,19 +214,6 @@ Item { } } - Component.onCompleted: { - console.warn("Tablet created") - //pageComponent.createObject(swipeView) -// var tabletq = Tablet.getTablet("com.highfidelity.interface.tablet.system"); -// if (tabletq) { -// // Tablet/toolbar button. -// for (var i = 0; i < 1; i++) { -// tabletq.addButton({ icon: "icons/tablet-icons/avatar-record-i.svg", activeIcon: "icons/tablet-icons/avatar-record-i.svg", -// text: "App " + i, isActive: false }); -// } -// } - } - Rectangle { id: bgMain gradient: Gradient { @@ -281,8 +237,6 @@ Item { clip: false currentIndex: pageIndicator.currentIndex hoverEnabled: true - onHoveredChanged: console.warn("swipe hovered", hovered) - onCurrentIndexChanged: console.warn("swipe currentIndex", currentIndex) anchors { left: parent.left right: parent.right diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index dd26dd7be7..f0653dec62 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -900,6 +900,16 @@ QQuickItem* TabletProxy::getQmlMenu() const { return menuList; } +QList TabletProxy::getButtonsList() const { + QList buttonsList; + for (auto& buttonProxy : _tabletButtonProxies) { + if (buttonProxy->getQmlButton()) { + buttonsList.append(buttonProxy->getQmlButton()); + } + } + return buttonsList; +} + // // TabletButtonProxy // @@ -980,3 +990,7 @@ void TabletButtonProxy::editProperties(const QVariantMap& properties) { QMetaObject::invokeMethod(_toolbarButtonProxy, "editProperties", Qt::AutoConnection, Q_ARG(QVariantMap, properties)); } } + +QQuickItem *TabletButtonProxy::getQmlButton() const { + return _qmlButton; +} diff --git a/libraries/ui/src/ui/TabletScriptingInterface.h b/libraries/ui/src/ui/TabletScriptingInterface.h index ad6a7c8001..50ea45d841 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.h +++ b/libraries/ui/src/ui/TabletScriptingInterface.h @@ -204,6 +204,13 @@ public: QQuickItem* getQmlMenu() const; + /**jsdoc + * Returns a list of currently created button items. + * @function TabletProxy#getButtonsList + * @returns {QList} + */ + Q_INVOKABLE QList getButtonsList() const; + signals: /**jsdoc * Signaled when this tablet receives an event from the html/js embedded in the tablet @@ -297,6 +304,8 @@ public: */ Q_INVOKABLE void editProperties(const QVariantMap& properties); + QQuickItem *getQmlButton() const; + public slots: void clickedSlot() { emit clicked(); }