(function() { // BEGIN LOCAL_SCOPE var uiQml = Script.resolvePath('fogbugz-app.qml?'+Math.random()); var toolIconUrl = Script.resolvePath('svg/kiwi.svg'); var toolHeight = 50; var toolWidth = 50; var TOOLBAR_MARGIN_Y = 0; var fogbugzVisible = false; var fogbugzWebTablet; // 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 fogbugzWindow = new OverlayWindow({ title: 'FogBugz', 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 showFogBugz() { fogbugzWindow.visible = true; print("SHOWING"); fogbugzVisible = true; } function hideTablet(tablet) { if (!tablet) { return; } updateButtonState(false); tablet.unregister(); tablet.destroy(); fogbugzWebTablet = null; Settings.setValue(persistenceKey, ""); } function clearOldTablet() { // If there was a tablet from previous domain or session, kill it and let it be recreated } function hideFogBugz() { print("HIDING"); if (fogbugzWindow.visible) { fogbugzWindow.visible = false; //fogbugzWindow.setURL("about:blank"); } else if (fogbugzWebTablet) { } fogbugzVisible = false; } function toggleFogBugz() { if (fogbugzVisible) { hideFogBugz(); } else { showFogBugz(); } } var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var browseExamplesButton = tablet.addButton({ icon: toolIconUrl, activeIcon: toolIconUrl, text: "FOGBUGZ" }); function updateButtonState(visible) { } function onfogbugzWindowVisibilityChanged() { updateButtonState(fogbugzWindow.visible); fogbugzVisible = fogbugzWindow.visible; browseExamplesButton.editProperties({isActive: fogbugzVisible}); } function onClick() { toggleFogBugz(); } browseExamplesButton.clicked.connect(onClick); fogbugzWindow.visibleChanged.connect(onfogbugzWindowVisibilityChanged); 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); fogbugzWindow.visibleChanged.disconnect(onfogbugzWindowVisibilityChanged); }); }()); // END LOCAL_SCOPE