overte/scripts/simplifiedUI/ui/simplifiedUI.js
Armored Dragon c541b64f66
I know the date...
Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
2024-05-16 16:35:55 -05:00

817 lines
26 KiB
JavaScript

"use strict";
/* jslint vars: true, plusplus: true */
//
// simplifiedUI.js
//
// Authors: Wayne Chen & Zach Fox
// Created: 2019-05-01
// Copyright 2019 High Fidelity, Inc.
// Copyright 2024 Overte e.V.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
// START CONFIG OPTIONS
var TOOLBAR_NAME = "com.highfidelity.interface.toolbar.system";
var DEFAULT_SCRIPTS_PATH_PREFIX = ScriptDiscoveryService.defaultScriptsPath + "/";
// END CONFIG OPTIONS
var MENU_NAMES = ["File", "Edit", "Display", "View", "Navigate", "Settings", "Developer", "Help"];
var keepMenusSetting = Settings.getValue("simplifiedUI/keepMenus", true);
function maybeRemoveDesktopMenu() {
if (!keepMenusSetting) {
MENU_NAMES.forEach(function(menu) {
Menu.removeMenu(menu);
});
}
}
function handleUpdateAvatarThumbnailURL(avatarThumbnailURL) {
if (topBarWindow) {
topBarWindow.sendToQml({
"source": "simplifiedUI.js",
"method": "updateAvatarThumbnailURL",
"data": {
"avatarThumbnailURL": avatarThumbnailURL
}
});
}
}
var AVATAR_APP_MESSAGE_SOURCE = "AvatarApp.qml";
function onMessageFromAvatarApp(message) {
if (message.source !== AVATAR_APP_MESSAGE_SOURCE) {
return;
}
switch (message.method) {
case "updateAvatarThumbnailURL":
handleUpdateAvatarThumbnailURL(message.data.avatarThumbnailURL);
break;
default:
console.log("Unrecognized message from " + AVATAR_APP_MESSAGE_SOURCE + ": " + JSON.stringify(message));
break;
}
}
function onAvatarAppClosed() {
if (avatarAppWindow) {
avatarAppWindow.fromQml.disconnect(onMessageFromAvatarApp);
avatarAppWindow.closed.disconnect(onAvatarAppClosed);
}
avatarAppWindow = false;
}
var AVATAR_APP_QML_PATH = Script.resourcesPath() + "qml/hifi/simplifiedUI/avatarApp/AvatarApp.qml";
var AVATAR_APP_WINDOW_TITLE = "Your Profile";
var AVATAR_APP_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE;
var AVATAR_APP_WIDTH_PX = 480;
var AVATAR_APP_HEIGHT_PX = 615;
var avatarAppWindow = false;
var POPOUT_SAFE_MARGIN_X = 30;
var POPOUT_SAFE_MARGIN_Y = 30;
var AVATAR_APP_WINDOW_FLAGS = 0x00000001 | // Qt::Window
0x00001000 | // Qt::WindowTitleHint
0x00002000 | // Qt::WindowSystemMenuHint
0x08000000 | // Qt::WindowCloseButtonHint
0x00008000 | // Qt::WindowMaximizeButtonHint
0x00004000; // Qt::WindowMinimizeButtonHint
function toggleAvatarApp() {
if (avatarAppWindow) {
avatarAppWindow.close();
// This really shouldn't be necessary.
// This signal really should automatically be called by the signal handler set up below.
// But fixing that requires an engine change, so this workaround will do.
onAvatarAppClosed();
return;
}
avatarAppWindow = Desktop.createWindow(AVATAR_APP_QML_PATH, {
title: AVATAR_APP_WINDOW_TITLE,
presentationMode: AVATAR_APP_PRESENTATION_MODE,
size: {
x: AVATAR_APP_WIDTH_PX,
y: AVATAR_APP_HEIGHT_PX
},
position: {
x: Math.max(Window.x + POPOUT_SAFE_MARGIN_X, Window.x + Window.innerWidth / 2 - AVATAR_APP_WIDTH_PX / 2),
y: Math.max(Window.y + POPOUT_SAFE_MARGIN_Y, Window.y + Window.innerHeight / 2 - AVATAR_APP_HEIGHT_PX / 2)
},
overrideFlags: AVATAR_APP_WINDOW_FLAGS
});
avatarAppWindow.fromQml.connect(onMessageFromAvatarApp);
avatarAppWindow.closed.connect(onAvatarAppClosed);
}
function handleAvatarNametagMode(newAvatarNametagMode) {
nametag.handleAvatarNametagMode(newAvatarNametagMode);
}
var SETTINGS_APP_MESSAGE_SOURCE = "SettingsApp.qml";
function onMessageFromSettingsApp(message) {
if (message.source !== SETTINGS_APP_MESSAGE_SOURCE) {
return;
}
switch (message.method) {
/*
This calls an update methon on the module apis because I can't get a signal from Settings.QML to the emoji.js without it being a module like
nametag.
*/
case "handleAvatarNametagMode":
handleAvatarNametagMode(message.avatarNametagMode);
break;
default:
console.log("Unrecognized message from " + SETTINGS_APP_MESSAGE_SOURCE + ": " + JSON.stringify(message));
break;
}
}
function onSettingsAppClosed() {
if (settingsAppWindow) {
settingsAppWindow.fromQml.disconnect(onMessageFromSettingsApp);
settingsAppWindow.closed.disconnect(onSettingsAppClosed);
}
settingsAppWindow = false;
}
var SETTINGS_APP_QML_PATH = Script.resourcesPath() + "qml/hifi/simplifiedUI/settingsApp/SettingsApp.qml";
var SETTINGS_APP_WINDOW_TITLE = "Settings";
var SETTINGS_APP_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE;
var SETTINGS_APP_WIDTH_PX = 480;
var SETTINGS_APP_HEIGHT_PX = 615;
var SETTINGS_APP_WINDOW_FLAGS = 0x00000001 | // Qt::Window
0x00001000 | // Qt::WindowTitleHint
0x00002000 | // Qt::WindowSystemMenuHint
0x08000000 | // Qt::WindowCloseButtonHint
0x00008000 | // Qt::WindowMaximizeButtonHint
0x00004000; // Qt::WindowMinimizeButtonHint
var SETTINGS_APP_RIGHT_MARGIN = 48;
var settingsAppWindow = false;
function toggleSettingsApp() {
if (settingsAppWindow) {
settingsAppWindow.close();
// This really shouldn't be necessary.
// This signal really should automatically be called by the signal handler set up below.
// But fixing that requires an engine change, so this workaround will do.
onSettingsAppClosed();
return;
}
settingsAppWindow = Desktop.createWindow(SETTINGS_APP_QML_PATH, {
title: SETTINGS_APP_WINDOW_TITLE,
presentationMode: SETTINGS_APP_PRESENTATION_MODE,
size: {
x: SETTINGS_APP_WIDTH_PX,
y: SETTINGS_APP_HEIGHT_PX
},
position: {
x: Window.x + Window.innerWidth - SETTINGS_APP_WIDTH_PX - SETTINGS_APP_RIGHT_MARGIN,
y: Math.max(Window.y + POPOUT_SAFE_MARGIN_Y, Window.y + Window.innerHeight / 2 - SETTINGS_APP_HEIGHT_PX / 2)
},
overrideFlags: SETTINGS_APP_WINDOW_FLAGS
});
settingsAppWindow.fromQml.connect(onMessageFromSettingsApp);
settingsAppWindow.closed.connect(onSettingsAppClosed);
}
function handleGoToAudioSettings() {
if (!settingsAppWindow) {
toggleSettingsApp();
}
settingsAppWindow.sendToQml({
"source": "simplifiedUI.js",
"method": "goToSettingsTab",
"data": {
"settingsTab": "audio"
}
});
}
var HELP_APP_MESSAGE_SOURCE = "HelpApp.qml";
function onMessageFromHelpApp(message) {
if (message.source !== HELP_APP_MESSAGE_SOURCE) {
return;
}
switch (message.method) {
case "goToAudioSettings":
handleGoToAudioSettings();
break;
default:
console.log("Unrecognized message from " + HELP_APP_MESSAGE_SOURCE + ": " + JSON.stringify(message));
break;
}
}
function onHelpAppClosed() {
if (helpAppWindow) {
helpAppWindow.fromQml.disconnect(onMessageFromHelpApp);
helpAppWindow.closed.disconnect(onHelpAppClosed);
}
helpAppWindow = false;
}
var HELP_APP_QML_PATH = Script.resourcesPath() + "qml/hifi/simplifiedUI/helpApp/HelpApp.qml";
var HELP_APP_WINDOW_TITLE = "Help";
var HELP_APP_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE;
var HELP_APP_WIDTH_PX = 480;
var HELP_APP_HEIGHT_PX = 615;
var HELP_APP_WINDOW_FLAGS = 0x00000001 | // Qt::Window
0x00001000 | // Qt::WindowTitleHint
0x00002000 | // Qt::WindowSystemMenuHint
0x08000000 | // Qt::WindowCloseButtonHint
0x00008000 | // Qt::WindowMaximizeButtonHint
0x00004000; // Qt::WindowMinimizeButtonHint
var helpAppWindow = false;
function toggleHelpApp() {
if (helpAppWindow) {
helpAppWindow.close();
// This really shouldn't be necessary.
// This signal really should automatically be called by the signal handler set up below.
// But fixing that requires an engine change, so this workaround will do.
onHelpAppClosed();
return;
}
helpAppWindow = Desktop.createWindow(HELP_APP_QML_PATH, {
title: HELP_APP_WINDOW_TITLE,
presentationMode: HELP_APP_PRESENTATION_MODE,
size: {
x: HELP_APP_WIDTH_PX,
y: HELP_APP_HEIGHT_PX
},
position: {
x: Math.max(Window.x + POPOUT_SAFE_MARGIN_X, Window.x + Window.innerWidth / 2 - HELP_APP_WIDTH_PX / 2),
y: Math.max(Window.y + POPOUT_SAFE_MARGIN_Y, Window.y + Window.innerHeight / 2 - HELP_APP_HEIGHT_PX / 2)
},
overrideFlags: HELP_APP_WINDOW_FLAGS
});
helpAppWindow.fromQml.connect(onMessageFromHelpApp);
helpAppWindow.closed.connect(onHelpAppClosed);
}
function maybeDeleteOutputDeviceMutedOverlay() {
if (outputDeviceMutedOverlay) {
Overlays.deleteOverlay(outputDeviceMutedOverlay);
outputDeviceMutedOverlay = false;
}
}
var outputDeviceMutedOverlay = false;
var OUTPUT_DEVICE_MUTED_OVERLAY_DEFAULT_DIMS_PX = 300;
var OUTPUT_DEVICE_MUTED_OVERLAY_DEFAULT_MARGINS_PX = 20;
var OUTPUT_DEVICE_MUTED_DIMS_RATIO_TO_WINDOW_SIZE = 0.8;
function updateOutputDeviceMutedOverlay(isMuted) {
if (isMuted) {
var props = {
imageURL: Script.resolvePath("images/outputDeviceMuted.svg"),
alpha: 0.5
};
var overlayDims = OUTPUT_DEVICE_MUTED_OVERLAY_DEFAULT_DIMS_PX;
var overlayWithMarginsDims = overlayDims + 2 * OUTPUT_DEVICE_MUTED_OVERLAY_DEFAULT_MARGINS_PX;
if (overlayWithMarginsDims > Window.innerHeight || overlayWithMarginsDims > Window.innerWidth) {
var minWindowDims = Math.min(Window.innerHeight, Window.innerWidth);
overlayDims = Math.round(minWindowDims * OUTPUT_DEVICE_MUTED_DIMS_RATIO_TO_WINDOW_SIZE);
}
props.width = overlayDims;
props.height = overlayDims;
props.x = Window.innerWidth / 2 - overlayDims / 2;
props.y = Window.innerHeight / 2 - overlayDims / 2;
if (outputDeviceMutedOverlay) {
Overlays.editOverlay(outputDeviceMutedOverlay, props);
} else {
outputDeviceMutedOverlay = Overlays.addOverlay("image", props);
}
} else {
maybeDeleteOutputDeviceMutedOverlay();
}
}
var savedAvatarGain = Audio.avatarGain;
var savedServerInjectorGain = Audio.serverInjectorGain;
var savedLocalInjectorGain = Audio.localInjectorGain;
var savedSystemInjectorGain = Audio.systemInjectorGain;
var MUTED_VALUE_DB = -60; // This should always match `SimplifiedConstants.qml` -> numericConstants -> mutedValue!
function setOutputMuted(outputMuted) {
if (outputMuted) {
savedAvatarGain = Audio.avatarGain;
savedServerInjectorGain = Audio.serverInjectorGain;
savedLocalInjectorGain = Audio.localInjectorGain;
savedSystemInjectorGain = Audio.systemInjectorGain;
Audio.avatarGain = MUTED_VALUE_DB;
Audio.serverInjectorGain = MUTED_VALUE_DB;
Audio.localInjectorGain = MUTED_VALUE_DB;
Audio.systemInjectorGain = MUTED_VALUE_DB;
} else {
if (savedAvatarGain === MUTED_VALUE_DB) {
savedAvatarGain = 0;
}
Audio.avatarGain = savedAvatarGain;
if (savedServerInjectorGain === MUTED_VALUE_DB) {
savedServerInjectorGain = 0;
}
Audio.serverInjectorGain = savedServerInjectorGain;
if (savedLocalInjectorGain === MUTED_VALUE_DB) {
savedLocalInjectorGain = 0;
}
Audio.localInjectorGain = savedLocalInjectorGain;
if (savedSystemInjectorGain === MUTED_VALUE_DB) {
savedSystemInjectorGain = 0;
}
Audio.systemInjectorGain = savedSystemInjectorGain;
}
}
var TOP_BAR_HEIGHT_PX = 48;
var INITIAL_LAUNCH_QML_PATH = Script.resolvePath("./simplifiedFTUE/InitialLaunchWindow.qml");
var INITIAL_LAUNCH_WINDOW_TITLE = "Initial Launch";
var INITIAL_LAUNCH_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE;
var INITIAL_WINDOW_FLAGS = 0x00000001 | // Qt::Window
0x00000008 | // Qt::Popup
0x00000002 | // Qt::Tool
0x00000800 | // Qt::FramelessWindowHint
0x40000000; // Qt::NoDropShadowWindowHint
var initialLaunchWindow = false;
function displayInitialLaunchWindow() {
if (initialLaunchWindow) {
return;
}
simplifiedEmote.handleFTUEScreensVisibilityChanged(true);
initialLaunchWindow = Desktop.createWindow(INITIAL_LAUNCH_QML_PATH, {
title: INITIAL_LAUNCH_WINDOW_TITLE,
presentationMode: INITIAL_LAUNCH_PRESENTATION_MODE,
isFullScreenWindow: true,
overrideFlags: INITIAL_WINDOW_FLAGS
});
initialLaunchWindow.fromQml.connect(onMessageFromInitialLaunchWindow);
Window.location = "file:///~/serverless/empty.json";
}
var SECOND_LAUNCH_QML_PATH = Script.resolvePath("simplifiedFTUE/SecondLaunchWindow.qml");
var SECOND_LAUNCH_WINDOW_TITLE = "Second Launch";
var SECOND_LAUNCH_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE;
var SECOND_WINDOW_FLAGS = 0x00000001 | // Qt::Window
0x00000008 | // Qt::Popup
0x00000002 | // Qt::Tool
0x00000800 | // Qt::FramelessWindowHint
0x40000000; // Qt::NoDropShadowWindowHint
var secondLaunchWindow = false;
function displaySecondLaunchWindow() {
if (secondLaunchWindow) {
return;
}
simplifiedEmote.handleFTUEScreensVisibilityChanged(true);
secondLaunchWindow = Desktop.createWindow(SECOND_LAUNCH_QML_PATH, {
title: SECOND_LAUNCH_WINDOW_TITLE,
presentationMode: SECOND_LAUNCH_PRESENTATION_MODE,
isFullScreenWindow: true,
overrideFlags: SECOND_WINDOW_FLAGS
});
secondLaunchWindow.fromQml.connect(onMessageFromSecondLaunchWindow);
Window.location = "file:///~/serverless/empty.json";
}
function closeInitialLaunchWindow() {
if (initialLaunchWindow) {
initialLaunchWindow.fromQml.disconnect(onMessageFromInitialLaunchWindow);
initialLaunchWindow.close();
initialLaunchWindow = null;
}
simplifiedEmote.handleFTUEScreensVisibilityChanged(false);
}
function closeSecondLaunchWindow() {
if (secondLaunchWindow) {
secondLaunchWindow.fromQml.disconnect(onMessageFromSecondLaunchWindow);
secondLaunchWindow.close();
secondLaunchWindow = null;
}
simplifiedEmote.handleFTUEScreensVisibilityChanged(false);
}
var INITIAL_LAUNCH_WINDOW_MESSAGE_SOURCE = "InitialLaunchWindow.qml";
function onMessageFromInitialLaunchWindow(message) {
if (message.source !== INITIAL_LAUNCH_WINDOW_MESSAGE_SOURCE) {
return;
}
switch (message.method) {
case "closeInitialLaunchWindow":
closeInitialLaunchWindow();
var homeLocation = LocationBookmarks.getAddress("hqhome");
if (homeLocation) {
Window.location = homeLocation;
}
break;
default:
console.log("Unrecognized message from " + INITIAL_LAUNCH_WINDOW_MESSAGE_SOURCE + ": " + JSON.stringify(message));
break;
}
}
var SECOND_LAUNCH_WINDOW_MESSAGE_SOURCE = "SecondLaunchWindow.qml";
function onMessageFromSecondLaunchWindow(message) {
if (message.source !== SECOND_LAUNCH_WINDOW_MESSAGE_SOURCE) {
return;
}
switch (message.method) {
case "closeSecondLaunchWindow":
closeSecondLaunchWindow();
var homeLocation = LocationBookmarks.getAddress("hqhome");
if (homeLocation) {
Window.location = homeLocation;
}
break;
default:
console.log("Unrecognized message from " + SECOND_LAUNCH_WINDOW_MESSAGE_SOURCE + ": " + JSON.stringify(message));
break;
}
}
var WAIT_FOR_TOP_BAR_MS = 1000;
function sendLocalStatusToQml() {
var currentStatus = si.getLocalStatus();
if (topBarWindow && currentStatus) {
topBarWindow.sendToQml({
"source": "simplifiedUI.js",
"method": "updateStatusButton",
"data": {
"currentStatus": currentStatus
}
});
} else {
Script.setTimeout(sendLocalStatusToQml, WAIT_FOR_TOP_BAR_MS);
}
}
var TOP_BAR_MESSAGE_SOURCE = "SimplifiedTopBar.qml";
function onMessageFromTopBar(message) {
if (message.source !== TOP_BAR_MESSAGE_SOURCE) {
return;
}
switch (message.method) {
case "toggleAvatarApp":
toggleAvatarApp();
break;
case "toggleSettingsApp":
toggleSettingsApp();
break;
case "toggleHelpApp":
toggleHelpApp();
break;
case "setOutputMuted":
setOutputMuted(message.data.outputMuted);
break;
case "toggleStatus":
si.toggleStatus();
break;
case "displayInitialLaunchWindow":
displayInitialLaunchWindow();
break;
case "displaySecondLaunchWindow":
displaySecondLaunchWindow();
break;
default:
console.log("Unrecognized message from " + TOP_BAR_MESSAGE_SOURCE + ": " + JSON.stringify(message));
break;
}
}
function onTopBarClosed() {
if (topBarWindow) {
topBarWindow.fromQml.disconnect(onMessageFromTopBar);
topBarWindow.closed.disconnect(onTopBarClosed);
}
topBarWindow = false;
}
function isOutputMuted() {
return Audio.avatarGain === MUTED_VALUE_DB &&
Audio.serverInjectorGain === MUTED_VALUE_DB &&
Audio.localInjectorGain === MUTED_VALUE_DB &&
Audio.systemInjectorGain === MUTED_VALUE_DB;
}
var TOP_BAR_QML_PATH = Script.resourcesPath() + "qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml";
var TOP_BAR_WINDOW_TITLE = "Simplified Top Bar";
var TOP_BAR_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE;
var TOP_BAR_WIDTH_PX = Window.innerWidth;
var topBarWindow = false;
function loadSimplifiedTopBar() {
var windowProps = {
title: TOP_BAR_WINDOW_TITLE,
presentationMode: TOP_BAR_PRESENTATION_MODE,
size: {
x: TOP_BAR_WIDTH_PX,
y: TOP_BAR_HEIGHT_PX
}
};
windowProps.presentationWindowInfo = {
dockArea: Desktop.DockArea.TOP
};
topBarWindow = Desktop.createWindow(TOP_BAR_QML_PATH, windowProps);
topBarWindow.fromQml.connect(onMessageFromTopBar);
topBarWindow.closed.connect(onTopBarClosed);
// The eventbridge takes a nonzero time to initialize, so we have to wait a bit
// for the QML to load and for that to happen before updating the UI.
Script.setTimeout(function() {
sendLocalStatusToQml();
}, WAIT_FOR_TOP_BAR_MS);
}
function maybeDeleteInputDeviceMutedOverlay() {
if (inputDeviceMutedOverlay) {
Overlays.deleteOverlay(inputDeviceMutedOverlay);
inputDeviceMutedOverlay = false;
}
}
var inputDeviceMutedOverlay = false;
var INPUT_DEVICE_MUTED_OVERLAY_DEFAULT_X_PX = 237;
var INPUT_DEVICE_MUTED_OVERLAY_DEFAULT_Y_PX = 64;
var INPUT_DEVICE_MUTED_MARGIN_LEFT_PX = 20;
var INPUT_DEVICE_MUTED_MARGIN_TOP_PX = 20;
function updateInputDeviceMutedOverlay(isMuted) {
if (isMuted) {
var props = {
imageURL: Script.resolvePath("images/inputDeviceMuted.svg"),
alpha: 0.5
};
props.width = INPUT_DEVICE_MUTED_OVERLAY_DEFAULT_X_PX;
props.height = INPUT_DEVICE_MUTED_OVERLAY_DEFAULT_Y_PX;
props.x = INPUT_DEVICE_MUTED_MARGIN_LEFT_PX;
props.y = INPUT_DEVICE_MUTED_MARGIN_TOP_PX;
if (inputDeviceMutedOverlay) {
Overlays.editOverlay(inputDeviceMutedOverlay, props);
} else {
inputDeviceMutedOverlay = Overlays.addOverlay("image", props);
}
} else {
maybeDeleteInputDeviceMutedOverlay();
}
}
function onDesktopInputDeviceMutedChanged(isMuted) {
if (!HMD.active) {
updateInputDeviceMutedOverlay(isMuted);
}
}
function onHMDInputDeviceMutedChanged(isMuted) {
if (HMD.active) {
updateInputDeviceMutedOverlay(isMuted);
}
}
function onGeometryChanged(rect) {
updateInputDeviceMutedOverlay(Audio.muted);
updateOutputDeviceMutedOverlay(isOutputMuted());
}
var initialLaunchWindowIsMinimized = false;
var secondLaunchWindowIsMinimized = false;
function onWindowMinimizedChanged(isMinimized) {
if (isMinimized) {
handleInitialLaunchWindowVisibleChanged(false);
handleSecondLaunchWindowVisibleChanged(false);
} else if (!HMD.active) {
handleInitialLaunchWindowVisibleChanged(true);
handleSecondLaunchWindowVisibleChanged(true);
}
}
function handleInitialLaunchWindowVisibleChanged(shouldBeVisible) {
if (shouldBeVisible && !initialLaunchWindow && initialLaunchWindowIsMinimized) {
displayInitialLaunchWindow();
initialLaunchWindowIsMinimized = false;
} else if (!shouldBeVisible && initialLaunchWindow) {
closeInitialLaunchWindow();
initialLaunchWindowIsMinimized = true;
}
}
function handleSecondLaunchWindowVisibleChanged(shouldBeVisible) {
if (shouldBeVisible && !secondLaunchWindow && secondLaunchWindowIsMinimized) {
displaySecondLaunchWindow();
secondLaunchWindowIsMinimized = false;
} else if (!shouldBeVisible && secondLaunchWindow) {
closeSecondLaunchWindow();
secondLaunchWindowIsMinimized = true;
}
}
function onDisplayModeChanged(isHMDMode) {
if (isHMDMode) {
Camera.setModeString("first person look at");
}
if (isHMDMode) {
onHMDInputDeviceMutedChanged(Audio.mutedHMD);
handleInitialLaunchWindowVisibleChanged(false);
handleSecondLaunchWindowVisibleChanged(false);
} else {
onDesktopInputDeviceMutedChanged(Audio.mutedDesktop);
handleInitialLaunchWindowVisibleChanged(true);
handleSecondLaunchWindowVisibleChanged(true);
}
}
function onToolbarVisibleChanged(isVisible, toolbarName) {
if (isVisible && toolbarName == TOOLBAR_NAME && !Settings.getValue("simplifiedUI/keepExistingUIAndScripts", false)) {
var toolbar = Toolbars.getToolbar(toolbarName);
if (toolbar) {
toolbar.writeProperty("visible", false);
}
}
}
function onStatusChanged() {
sendLocalStatusToQml();
}
function maybeUpdateOutputDeviceMutedOverlay() {
updateOutputDeviceMutedOverlay(isOutputMuted());
}
var oldAutomaticLODAdjust;
var oldLODAngleDeg;
var SIMPLIFIED_UI_AUTO_LOD_ADJUST = false;
var SIMPLIFIED_UI_LOD_ANGLE_DEG = 0.248;
function modifyLODSettings() {
oldAutomaticLODAdjust = LODManager.automaticLODAdjust;
oldLODAngleDeg = LODManager.lodAngleDeg;
LODManager.automaticLODAdjust = SIMPLIFIED_UI_AUTO_LOD_ADJUST;
LODManager.lodAngleDeg = SIMPLIFIED_UI_LOD_ANGLE_DEG;
}
function restoreLODSettings() {
LODManager.automaticLODAdjust = oldAutomaticLODAdjust;
LODManager.lodAngleDeg = oldLODAngleDeg;
}
var nametag = Script.require("./simplifiedNametag/simplifiedNametag.js");
var si = Script.require("./simplifiedStatusIndicator/simplifiedStatusIndicator.js");
var simplifiedEmote = Script.require("../simplifiedEmote/simplifiedEmote.js");
var oldShowAudioTools;
var oldShowBubbleTools;
var keepExistingUIAndScriptsSetting = Settings.getValue("simplifiedUI/keepExistingUIAndScripts", false);
function startup() {
maybeRemoveDesktopMenu();
modifyLODSettings();
if (!keepExistingUIAndScriptsSetting) {
if (!HMD.active) {
var toolbar = Toolbars.getToolbar(TOOLBAR_NAME);
if (toolbar) {
toolbar.writeProperty("visible", false);
}
}
}
loadSimplifiedTopBar();
si.updateProperties({ statusChanged: onStatusChanged });
updateInputDeviceMutedOverlay(Audio.muted);
updateOutputDeviceMutedOverlay(isOutputMuted());
Audio.mutedDesktopChanged.connect(onDesktopInputDeviceMutedChanged);
Audio.mutedHMDChanged.connect(onHMDInputDeviceMutedChanged);
Window.geometryChanged.connect(onGeometryChanged);
Window.minimizedChanged.connect(onWindowMinimizedChanged);
HMD.displayModeChanged.connect(onDisplayModeChanged);
Audio.avatarGainChanged.connect(maybeUpdateOutputDeviceMutedOverlay);
Audio.localInjectorGainChanged.connect(maybeUpdateOutputDeviceMutedOverlay);
Audio.serverInjectorGainChanged.connect(maybeUpdateOutputDeviceMutedOverlay);
Audio.systemInjectorGainChanged.connect(maybeUpdateOutputDeviceMutedOverlay);
Toolbars.toolbarVisibleChanged.connect(onToolbarVisibleChanged);
oldShowAudioTools = AvatarInputs.showAudioTools;
AvatarInputs.showAudioTools = false;
oldShowBubbleTools = AvatarInputs.showBubbleTools;
AvatarInputs.showBubbleTools = false;
}
function shutdown() {
restoreLODSettings();
if (!keepExistingUIAndScriptsSetting) {
if (!HMD.active) {
var toolbar = Toolbars.getToolbar(TOOLBAR_NAME);
if (toolbar) {
toolbar.writeProperty("visible", true);
}
}
}
if (topBarWindow) {
topBarWindow.close();
}
if (avatarAppWindow) {
avatarAppWindow.close();
}
if (settingsAppWindow) {
settingsAppWindow.close();
}
if (initialLaunchWindow) {
closeInitialLaunchWindow();
}
if (secondLaunchWindow) {
closeSecondLaunchWindow();
}
maybeDeleteInputDeviceMutedOverlay();
maybeDeleteOutputDeviceMutedOverlay();
Audio.mutedDesktopChanged.disconnect(onDesktopInputDeviceMutedChanged);
Audio.mutedHMDChanged.disconnect(onHMDInputDeviceMutedChanged);
Window.geometryChanged.disconnect(onGeometryChanged);
Window.minimizedChanged.disconnect(onWindowMinimizedChanged);
HMD.displayModeChanged.disconnect(onDisplayModeChanged);
Audio.avatarGainChanged.disconnect(maybeUpdateOutputDeviceMutedOverlay);
Audio.localInjectorGainChanged.disconnect(maybeUpdateOutputDeviceMutedOverlay);
Audio.serverInjectorGainChanged.disconnect(maybeUpdateOutputDeviceMutedOverlay);
Audio.systemInjectorGainChanged.disconnect(maybeUpdateOutputDeviceMutedOverlay);
Toolbars.toolbarVisibleChanged.disconnect(onToolbarVisibleChanged);
AvatarInputs.showAudioTools = oldShowAudioTools;
AvatarInputs.showBubbleTools = oldShowBubbleTools;
}
Script.scriptEnding.connect(shutdown);
startup();