UNPKG

@itwin/frontend-devtools

Version:

Debug menu and supporting UI widgets

208 lines • 9.07 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module Widgets */ import { BeDuration } from "@itwin/core-bentley"; import { IModelApp, ScreenViewport, ToolSettings } from "@itwin/core-frontend"; import { createCheckBox } from "../ui/CheckBox"; import { createNestedMenu } from "../ui/NestedMenu"; import { createLabeledNumericInput, createNumericInput } from "../ui/NumericInput"; /** Allows the global settings controlling the behavior of viewing tools to be customized. * @alpha */ export class ToolSettingsTracker { static _expandToolSettings = false; constructor(parent, _vp) { const settingsDiv = document.createElement("div"); settingsDiv.style.display = "block"; settingsDiv.style.textAlign = "left"; createNestedMenu({ label: "Tool Settings", parent, expand: ToolSettingsTracker._expandToolSettings, handler: (expanded) => ToolSettingsTracker._expandToolSettings = expanded, body: settingsDiv, }); let div = IModelApp.makeHTMLElement("div", { parent: settingsDiv }); createCheckBox({ parent: div, name: "Preserve World Up When Rotating", id: "ts_preserveWorldUp", isChecked: ToolSettings.preserveWorldUp, handler: (_cb) => { ToolSettings.preserveWorldUp = !ToolSettings.preserveWorldUp; // eslint-disable-next-line @typescript-eslint/no-floating-promises IModelApp.toolAdmin.exitViewTool(); }, }); div.style.textAlign = "left"; // We use a static so the expand/collapse state persists after closing and reopening the drop-down. settingsDiv.style.display = ToolSettingsTracker._expandToolSettings ? "block" : "none"; div = IModelApp.makeHTMLElement("div", { parent: settingsDiv }); let label = IModelApp.makeHTMLElement("label", { innerText: "Animation Duration (ms): ", parent: div }); label.style.display = "inline"; label.htmlFor = "ts_animationTime"; createNumericInput({ parent: div, id: "ts_animationTime", display: "inline", min: 0, step: 1, value: ScreenViewport.animation.time.normal.milliseconds, handler: (value, _input) => { ScreenViewport.animation.time.normal = BeDuration.fromMilliseconds(value); // eslint-disable-next-line @typescript-eslint/no-floating-promises IModelApp.toolAdmin.exitViewTool(); }, }); div.style.display = "block"; div.style.textAlign = "left"; div = IModelApp.makeHTMLElement("div", { parent: settingsDiv }); label = IModelApp.makeHTMLElement("label", { innerText: "Pick Radius (inches): ", parent: div }); label.style.display = "inline"; label.htmlFor = "ts_viewToolPickRadiusInches"; label.innerText = "Pick Radius (inches): "; createNumericInput({ parent: div, id: "ts_viewToolPickRadiusInches", display: "inline", min: 0, step: 0.01, value: ToolSettings.viewToolPickRadiusInches, handler: (value, _input) => { ToolSettings.viewToolPickRadiusInches = value; // eslint-disable-next-line @typescript-eslint/no-floating-promises IModelApp.toolAdmin.exitViewTool(); }, parseAsFloat: true, }, true); div.style.display = "block"; div.style.textAlign = "left"; div = IModelApp.makeHTMLElement("div", { parent: settingsDiv }); createCheckBox({ parent: div, name: "Walk Enforce Z Up", id: "ts_walkEnforceZUp", isChecked: ToolSettings.walkEnforceZUp, handler: (_cb) => { ToolSettings.walkEnforceZUp = !ToolSettings.walkEnforceZUp; // eslint-disable-next-line @typescript-eslint/no-floating-promises IModelApp.toolAdmin.exitViewTool(); }, }); div.style.display = "block"; div.style.textAlign = "left"; div = IModelApp.makeHTMLElement("div", { parent: settingsDiv }); label = IModelApp.makeHTMLElement("label", { innerText: "Walk Camera Angle (degrees): ", parent: div }); label.style.display = "inline"; label.htmlFor = "ts_walkCameraAngle"; createNumericInput({ parent: div, id: "ts_walkCameraAngle", display: "inline", min: 0, step: 0.1, value: ToolSettings.walkCameraAngle.degrees, handler: (value, _input) => { ToolSettings.walkCameraAngle.setDegrees(value); // eslint-disable-next-line @typescript-eslint/no-floating-promises IModelApp.toolAdmin.exitViewTool(); }, parseAsFloat: true, }, true); div.style.display = "block"; div.style.textAlign = "left"; div = IModelApp.makeHTMLElement("div", { parent: settingsDiv }); label = IModelApp.makeHTMLElement("label", { innerText: "Walk Velocity (meters per second): ", parent: div }); label.style.display = "inline"; label.htmlFor = "ts_walkVelocity"; createNumericInput({ parent: div, id: "ts_walkVelocity", display: "inline", min: 0, step: 0.1, value: ToolSettings.walkVelocity, handler: (value, _input) => { ToolSettings.walkVelocity = value; // eslint-disable-next-line @typescript-eslint/no-floating-promises IModelApp.toolAdmin.exitViewTool(); }, parseAsFloat: true, }, true); div.style.display = "block"; div.style.textAlign = "left"; div = IModelApp.makeHTMLElement("div", { parent: settingsDiv }); label = IModelApp.makeHTMLElement("label", { innerText: "Wheel Zoom Bump Distance (meters): ", parent: div }); label.style.display = "inline"; label.htmlFor = "ts_wheelZoomBumpDistance"; createNumericInput({ parent: div, id: "ts_wheelZoomBumpDistance", display: "inline", min: 0, step: 0.025, value: ToolSettings.wheelZoomBumpDistance, handler: (value, _input) => { ToolSettings.wheelZoomBumpDistance = value; // eslint-disable-next-line @typescript-eslint/no-floating-promises IModelApp.toolAdmin.exitViewTool(); }, parseAsFloat: true, }, true); div.style.display = "block"; div.style.textAlign = "left"; div = IModelApp.makeHTMLElement("div", { parent: settingsDiv }); label = IModelApp.makeHTMLElement("label", { innerText: "Wheel Zoom Ratio: ", parent: div }); label.style.display = "inline"; label.htmlFor = "ts_wheelZoomRatio"; createNumericInput({ parent: div, id: "ts_wheelZoomRatio", display: "inline", min: 1.0, step: 0.025, value: ToolSettings.wheelZoomRatio, handler: async (value, _input) => { ToolSettings.wheelZoomRatio = value; return IModelApp.toolAdmin.exitViewTool(); }, parseAsFloat: true, }, true); div.style.display = "block"; div.style.textAlign = "left"; createLabeledNumericInput({ id: "num_inertiaDamping", parent: settingsDiv, value: ToolSettings.viewingInertia.damping, handler: async (value, _) => { ToolSettings.viewingInertia.damping = value; return IModelApp.toolAdmin.exitViewTool(); }, min: 0, max: 1, step: 0.05, parseAsFloat: true, name: "Inertial damping: ", }); createLabeledNumericInput({ id: "num_inertiaDuration", parent: settingsDiv, value: ToolSettings.viewingInertia.duration.milliseconds / 1000, handler: async (value, _) => { ToolSettings.viewingInertia.duration = BeDuration.fromMilliseconds(value * 1000); return IModelApp.toolAdmin.exitViewTool(); }, min: 0, max: 10, step: 0.5, parseAsFloat: true, name: "Inertial duration (seconds): ", }); } [Symbol.dispose]() { } } //# sourceMappingURL=ToolSettingsTracker.js.map