tablet pages

This commit is contained in:
Dante Ruiz 2017-04-08 02:01:21 +01:00
parent b9c7d6351f
commit 86c67a3017
5 changed files with 117 additions and 3 deletions

View file

@ -66,7 +66,12 @@ TabletModalWindow {
HifiConstants { id: hifi }
onCanceled: {
loginDialogRoot.Stack.view.pop()
if (loginDialogRoot.Stack.view) {
loginDialogRoot.Stack.view.pop();
} else {
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
tablet.returnToPreviousApp();
}
}
LoginDialog {

View file

@ -14,6 +14,8 @@ Item {
property string subMenu: ""
signal showDesktop();
property bool shown: true
property int currentApp: -1;
property alias tabletApps: tabletApps
function setOption(value) {
option = value;
@ -56,13 +58,47 @@ Item {
}
function loadSource(url) {
tabletApps.clear();
loader.source = ""; // make sure we load the qml fresh each time.
loader.source = url;
//tabletApps.append({appUrl: url, isWebUrl: false, scriptUrl: ""});
}
function loadQMLOnTop(url) {
tabletApps.append({"appUrl": url, "isWebUrl": false, "scriptUrl": ""});
loader.source = "";
loader.source = tabletApps.get(currentApp).appUrl;
}
function loadWebOnTop(url, injectJavaScriptUrl) {
tabletApps.append({"appUrl": loader.source, "isWebUrl": true, "scriptUrl": injectJavaScriptUrl, "appWebUrl": url});
loader.item.url = tabletApps.get(currentApp).appWebUrl;
loader.item.scriptUrl = tabletApps.get(currentApp).scriptUrl;
}
function returnToPreviousApp() {
loader.source = "";
tabletApps.remove(currentApp);
var isWebPage = tabletApps.get(currentApp).isWebUrl;
console.log(isWebPage);
if (isWebPage) {
console.log(tabletApps.get(currentApp).appUrl);
loader.source = tabletApps.get(currentApp).appUrl;
console.log(tabletApps.get(currentApp).appWebUrl);
console.log(tabletApps.get(currentApp).scriptUrl);
loader.item.url = tabletApps.get(currentApp).appWebUrl;
loader.item.scriptUrl = tabletApps.get(currentApp).scriptUrl;
} else {
console.log(tabletApps.get(currentApp).appUrl);
loader.source = tabletApps.get(currentApp).appUrl;
}
}
function loadWebUrl(url, injectedJavaScriptUrl) {
loader.item.url = url;
loader.item.scriptURL = injectedJavaScriptUrl;
var appUrl = loader.source;
tabletApps.append({"appUrl": "Tablet.qml", "isWebUrl": true, "scriptUrl": injectedJavaScriptUrl, "appWebUrl": url});
}
// used to send a message from qml to interface script.
@ -97,6 +133,14 @@ Item {
username = newUsername;
}
ListModel {
id: tabletApps
onCountChanged: {
currentApp = count;
console.log("[DR] -> the currnet count: " + currentApp);
}
}
Loader {
id: loader
objectName: "loader"

View file

@ -349,6 +349,38 @@ void TabletProxy::gotoMenuScreen(const QString& submenu) {
}
}
void TabletProxy::loadQMLOnTop(const QVariant& path) {
QObject* root = nullptr;
if (!_toolbarMode && _qmlTabletRoot) {
root = _qmlTabletRoot;
} else if (_toolbarMode && _desktopWindow) {
root = _desktopWindow->asQuickItem();
}
if (root) {
QMetaObject::invokeMethod(root, "loadQMLOnTop", Q_ARG(const QVariant&, path));
QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true)));
} else {
qCDebug(scriptengine) << "tablet cannot load QML because _qmlTabletRoot is null";
}
}
void TabletProxy::returnToPreviousApp() {
QObject* root = nullptr;
if (!_toolbarMode && _qmlTabletRoot) {
root = _qmlTabletRoot;
} else if (_toolbarMode && _desktopWindow) {
root = _desktopWindow->asQuickItem();
}
if (root) {
QMetaObject::invokeMethod(root, "returnToPreviousApp");
QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true)));
} else {
qCDebug(scriptengine) << "tablet cannot load QML because _qmlTabletRoot is null";
}
}
void TabletProxy::loadQMLSource(const QVariant& path) {
QObject* root = nullptr;
@ -433,6 +465,26 @@ void TabletProxy::gotoWebScreen(const QString& url) {
gotoWebScreen(url, "");
}
void TabletProxy::loadWebScreenOnTop(const QVariant& url) {
loadWebScreenOnTop(url, "");
}
void TabletProxy::loadWebScreenOnTop(const QVariant& url, const QString& injectJavaScriptUrl) {
QObject* root = nullptr;
if (!_toolbarMode && _qmlTabletRoot) {
root = _qmlTabletRoot;
} else if (_toolbarMode && _desktopWindow) {
root = _desktopWindow->asQuickItem();
}
if (root) {
QMetaObject::invokeMethod(root, "loadQMLOnTop", Q_ARG(const QVariant&, QVariant(WEB_VIEW_SOURCE_URL)));
QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true)));
QMetaObject::invokeMethod(root, "loadWebOnTop", Q_ARG(const QVariant&, QVariant(url)), Q_ARG(const QVariant&, QVariant(injectJavaScriptUrl)));
}
_state = State::Web;
}
void TabletProxy::gotoWebScreen(const QString& url, const QString& injectedJavaScriptUrl) {
QObject* root = nullptr;

View file

@ -120,6 +120,13 @@ public:
Q_INVOKABLE void pushOntoStack(const QVariant& path);
Q_INVOKABLE void popFromStack();
Q_INVOKABLE void loadQMLOnTop(const QVariant& path);
Q_INVOKABLE void loadWebScreenOnTop(const QVariant& url);
Q_INVOKABLE void loadWebScreenOnTop(const QVariant& url, const QString& injectedJavaScriptUrl);
Q_INVOKABLE void returnToPreviousApp();
/** jsdoc
* Check if the tablet has a message dialog open
* @function TabletProxy#isMessageDialogOpen

View file

@ -70,7 +70,7 @@ function onMessage(message) {
|| (!HMD.active && Settings.getValue("desktopTabletBecomesToolbar"))) {
Desktop.show("hifi/dialogs/GeneralPreferencesDialog.qml", "General Preferences");
} else {
tablet.loadQMLSource("TabletGeneralPreferences.qml");
tablet.loadQMLOnTop("TabletGeneralPreferences.qml");
}
break;
case 'setOpenFeedFalse':
@ -96,12 +96,18 @@ function onMessage(message) {
} else {
print('not sharing', submessage.localPath);
}
});
if (!outstanding && shouldOpenFeedAfterShare()) {
//showFeedWindow();
}
if (needsLogin) { // after the possible feed, so that the login is on top
Account.checkAndSignalForAccessToken();
var isLoggedIn = Account.isLoggedIn();
if (!isLoggedIn) {
tablet.loadQMLOnTop("../../dialogs/TabletLoginDialog.qml");
HMD.openTablet();
}
}
}
}