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