controller with menus finally work

This commit is contained in:
Dante Ruiz 2017-01-18 01:11:40 +00:00
parent 9a61b6030b
commit baff07b0f9
7 changed files with 117 additions and 22 deletions

View file

@ -1,9 +1,8 @@
import QtQuick 2.0
import QtGraphicalEffects 1.0
FocusScope {
Item {
id: tablet
focus: true
objectName: "tablet"
property double micLevel: 0.8
property int rowIndex: 0
@ -214,6 +213,9 @@ FocusScope {
}
]
Component.onCompleted: {
console.log("On Complete tab: " + activeFocus ); }
function setCurrentItemState(state) {
var index = rowIndex + columnIndex;

View file

@ -18,7 +18,7 @@ FocusScope {
id: root
implicitHeight: background.height
implicitWidth: background.width
objectName: "root"
property alias currentItem: listView.currentItem
property alias model: listView.model
property bool isSubMenu: false
@ -45,6 +45,7 @@ FocusScope {
height: 720
contentWidth: 480
contentHeight: 720
objectName: "menuList"
topMargin: hifi.dimensions.menuPadding.y
bottomMargin: hifi.dimensions.menuPadding.y

View file

@ -81,6 +81,7 @@ Item {
if (menuStack.length) {
topMenu = menuStack[menuStack.length - 1];
topMenu.focus = true;
topMenu.forceActiveFocus();
// show current menu level on nav bar
if (topMenu.objectName === "") {
breadcrumbText.text = "Menu";
@ -98,6 +99,7 @@ Item {
menuStack.push(newMenu);
topMenu = newMenu;
topMenu.focus = true;
topMenu.forceActiveFocus();
offscreenFlags.navigationFocused = true;
}

View file

@ -1,12 +1,14 @@
import QtQuick 2.0
import Hifi 1.0
import "../../desktop"
FocusScope {
id: tabletRoot
objectName: "tabletRoot"
property var eventBridge;
property bool desktopRoot: true
signal showDesktop();
function loadSource(url) {
loader.source = url;
}
@ -24,15 +26,7 @@ FocusScope {
function playButtonClickSound() {
buttonClickSound.play(globalPosition);
}
function forceFocus() {
console.log(loader.item.objectName);
offscreenWindow.requestActivate();
loader.item.forceActiveFocus();
console.log("----------> adding focus");
console.log("------>Current foucs itrm: " + offscreenWindow.activeFocusItem);
}
Loader {
id: loader
objectName: "loader"
@ -42,7 +36,6 @@ FocusScope {
height: parent.height
onLoaded: {
// propogate eventBridge to WebEngineView
if (loader.item.hasOwnProperty("eventBridge")) {
loader.item.eventBridge = eventBridge;
@ -53,13 +46,14 @@ FocusScope {
}
});
}
//loader.item.parent = tablxetRoot;
loader.item.forceActiveFocus();
offscreenFlags.navigationFocus = true;
console.log(loader.item.count);
console.log("Current focus item " + offscreenWindow.activeFocusItem);
offscreenFlags.navigationFocused = true;
}
}
Component.onCompleted: {
offscreenWindow.requestActivate();
offscreenWindow.forceActiveFocus();
}
Component.onDestruction: { offscreenFlags.navigationFocused = false; }
width: 480

View file

@ -1033,12 +1033,14 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
if (key != Qt::Key_unknown) {
QKeyEvent event(QEvent::KeyPress, key, Qt::NoModifier);
sendEvent(window, &event);
tabletScriptingInterface->processEvent(&event);
lastKey = key;
}
} else if (key != Qt::Key_unknown && window) {
if (state) {
QKeyEvent event(QEvent::KeyPress, key, Qt::NoModifier);
sendEvent(window, &event);
tabletScriptingInterface->processEvent(&event);
} else {
QKeyEvent event(QEvent::KeyRelease, key, Qt::NoModifier);
sendEvent(window, &event);

View file

@ -59,6 +59,71 @@ QQuickWindow* TabletScriptingInterface::getTabletWindow() {
return window;
}
void TabletScriptingInterface::processMenuEvents(QObject* object, const QKeyEvent* event) {
switch (event->key()) {
case Qt::Key_Down:
QMetaObject::invokeMethod(object, "nextItem");
break;
case Qt::Key_Up:
QMetaObject::invokeMethod(object, "previousItem");
break;
case Qt::Key_Left:
QMetaObject::invokeMethod(object, "previousPage");
break;
case Qt::Key_Right:
QMetaObject::invokeMethod(object, "selectCurrentItem");
break;
case Qt::Key_Return:
QMetaObject::invokeMethod(object, "selectCurrentItem");
break;
defualt:
break;
}
}
void TabletScriptingInterface::processTabletEvents(QObject* object, const QKeyEvent* event) {
switch (event->key()) {
case Qt::Key_Down:
QMetaObject::invokeMethod(object, "downItem");
break;
case Qt::Key_Up:
QMetaObject::invokeMethod(object, "upItem");
break;
case Qt::Key_Left:
QMetaObject::invokeMethod(object, "previousItem");
break;
case Qt::Key_Right:
QMetaObject::invokeMethod(object, "nextItem");
break;
case Qt::Key_Return:
QMetaObject::invokeMethod(object, "selectItem");
break;
defualt:
break;
}
}
void TabletScriptingInterface::processEvent(const QKeyEvent* event) {
TabletProxy* tablet = qobject_cast<TabletProxy*>(getTablet("com.highfidelity.interface.tablet.system"));
QObject* qmlTablet = tablet->getQmlTablet();
QObject* qmlMenu = tablet->getQmlMenu();
if (qmlTablet) {
processTabletEvents(qmlTablet, event);
} else if (qmlMenu) {
processMenuEvents(qmlMenu, event);
}
}
QObject* TabletScriptingInterface::getFlags()
{
auto offscreenUi = DependencyManager::get<OffscreenUi>();
@ -215,8 +280,6 @@ void TabletProxy::addButtonsToHomeScreen() {
addButtonProxyToQmlTablet(tablet, buttonProxy.data());
}
auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader");
QMetaObject::invokeMethod(_qmlTabletRoot, "forceFocus");
qDebug() << "----> INVOKEMETHOD";
QObject::disconnect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen()));
}
@ -236,7 +299,6 @@ void TabletProxy::addButtonsToMenuScreen() {
QQuickItem* VrMenu = loader->findChild<QQuickItem*>("tabletMenu");
if (!VrMenu) {
qDebug() << "----------> could not find vr menu";
return;
}
@ -270,6 +332,29 @@ QQuickItem* TabletProxy::getQmlTablet() const {
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*>("menuList");
if (!menuList) {
return nullptr;
}
qDebug() << "---------->found menuList";
return menuList;
}
//
// TabletButtonProxy
//

View file

@ -47,10 +47,16 @@ public:
void setQmlTabletRoot(QString tabletId, QQuickItem* qmlTabletRoot, QObject* qmlOffscreenSurface);
void processEvent(const QKeyEvent* event);
QQuickWindow* getTabletWindow();
QObject* getFlags();
private:
void processMenuEvents(QObject* object, const QKeyEvent* event);
void processTabletEvents(QObject* object, const QKeyEvent* event);
protected:
std::mutex _mutex;
std::map<QString, QSharedPointer<TabletProxy>> _tabletProxies;
@ -119,6 +125,10 @@ public:
QObject* getTabletSurface();
QQuickItem* getQmlTablet() const;
QQuickItem* getQmlMenu() const;
signals:
/**jsdoc
* Signaled when this tablet receives an event from the html/js embedded in the tablet
@ -133,7 +143,6 @@ private slots:
void addButtonsToMenuScreen();
protected:
void removeButtonsFromHomeScreen();
QQuickItem* getQmlTablet() const;
QString _name;
std::mutex _mutex;