(function() { // BEGIN LOCAL_SCOPE var uiQml = Script.resolvePath("slack_beta.qml"); var toolIconUrl = Script.resolvePath("app-win10_0000.svg"); var toolHeight = 50; var toolWidth = 50; var TOOLBAR_MARGIN_Y = 0; var slackVisible = false; var slackWebTablet; // We persist clientOnly data in the .ini file, and reconsistitute it on restart. // To keep things consistent, we pickle the tablet data in Settings, and kill any existing such on restart and domain change. var persistenceKey = "io.highfidelity.lastDomainTablet"; var slackWindow = new OverlayWindow({ title: 'Slack', source: uiQml, width: 800, height: 800, visible: false }); var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); function shouldShowWebTablet() { var rightPose = Controller.getPoseValue(Controller.Standard.RightHand); var leftPose = Controller.getPoseValue(Controller.Standard.LeftHand); var hasHydra = !!Controller.Hardware.Hydra; return HMD.active && (leftPose.valid || rightPose.valid || hasHydra); } function showSlack() { slackWindow.visible = true; print("SHOWING"); slackVisible = true; } function hideTablet(tablet) { if (!tablet) { return; } updateButtonState(false); tablet.unregister(); tablet.destroy(); slackWebTablet = null; Settings.setValue(persistenceKey, ""); } function clearOldTablet() { // If there was a tablet from previous domain or session, kill it and let it be recreated } function hideSlack() { print("HIDING"); if (slackWindow.visible) { slackWindow.visible = false; //slackWindow.setURL("about:blank"); } else if (slackWebTablet) { } slackVisible = false; } function toggleSlack() { if (slackVisible) { hideSlack(); } else { showSlack(); } } var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var browseExamplesButton = tablet.addButton({ icon: toolIconUrl, activeIcon: toolIconUrl, text: "SLACK" }); function updateButtonState(visible) { } function onslackWindowVisibilityChanged() { updateButtonState(slackWindow.visible); slackVisible = slackWindow.visible; } function onClick() { toggleSlack(); } browseExamplesButton.clicked.connect(onClick); slackWindow.visibleChanged.connect(onslackWindowVisibilityChanged); clearOldTablet(); // Run once at startup, in case there's anything laying around from a crash. // We could also optionally do something like Window.domainChanged.connect(function () {Script.setTimeout(clearOldTablet, 2000)}), // but the HUD version stays around, so lets do the same. Script.scriptEnding.connect(function () { browseExamplesButton.clicked.disconnect(onClick); tablet.removeButton(browseExamplesButton); slackWindow.visibleChanged.disconnect(onslackWindowVisibilityChanged); }); }()); // END LOCAL_SCOPE