UNPKG

molstar

Version:

A comprehensive macromolecular library.

166 lines 8.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SimpleSettingsControl = void 0; var tslib_1 = require("tslib"); var jsx_runtime_1 = require("react/jsx-runtime"); /** * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author David Sehnal <david.sehnal@gmail.com> */ var immer_1 = require("immer"); var canvas3d_1 = require("../../mol-canvas3d/canvas3d"); var commands_1 = require("../../mol-plugin/commands"); var mol_state_1 = require("../../mol-state"); var color_1 = require("../../mol-util/color"); var param_definition_1 = require("../../mol-util/param-definition"); var param_mapping_1 = require("../../mol-util/param-mapping"); var base_1 = require("../base"); var parameters_1 = require("../controls/parameters"); var help_1 = require("./help"); var SimpleSettingsControl = /** @class */ (function (_super) { (0, tslib_1.__extends)(SimpleSettingsControl, _super); function SimpleSettingsControl() { return _super !== null && _super.apply(this, arguments) || this; } SimpleSettingsControl.prototype.componentDidMount = function () { var _this = this; this.subscribe(this.plugin.events.canvas3d.settingsUpdated, function () { return _this.forceUpdate(); }); this.subscribe(this.plugin.canvas3d.camera.stateChanged, function (state) { if (state.radiusMax !== undefined || state.radius !== undefined) { _this.forceUpdate(); } }); }; SimpleSettingsControl.prototype.render = function () { if (!this.plugin.canvas3d) return null; return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(parameters_1.ParameterMappingControl, { mapping: SimpleSettingsMapping }, void 0), (0, jsx_runtime_1.jsx)(help_1.ViewportHelpContent, {}, void 0)] }, void 0); }; return SimpleSettingsControl; }(base_1.PluginUIComponent)); exports.SimpleSettingsControl = SimpleSettingsControl; var LayoutOptions = { 'sequence': 'Sequence', 'log': 'Log', 'left': 'Left Panel' }; var SimpleSettingsParams = { spin: param_definition_1.ParamDefinition.Group({ spin: canvas3d_1.Canvas3DParams.trackball.params.spin, speed: canvas3d_1.Canvas3DParams.trackball.params.spinSpeed }, { pivot: 'spin' }), camera: canvas3d_1.Canvas3DParams.camera, background: param_definition_1.ParamDefinition.Group({ color: param_definition_1.ParamDefinition.Color((0, color_1.Color)(0xFCFBF9), { label: 'Background', description: 'Custom background color' }), transparent: param_definition_1.ParamDefinition.Boolean(false) }, { pivot: 'color' }), lighting: param_definition_1.ParamDefinition.Group({ renderStyle: canvas3d_1.Canvas3DParams.renderer.params.style, occlusion: canvas3d_1.Canvas3DParams.postprocessing.params.occlusion, outline: canvas3d_1.Canvas3DParams.postprocessing.params.outline, fog: canvas3d_1.Canvas3DParams.cameraFog, }, { pivot: 'renderStyle' }), clipping: param_definition_1.ParamDefinition.Group((0, tslib_1.__assign)((0, tslib_1.__assign)({}, canvas3d_1.Canvas3DParams.cameraClipping.params), canvas3d_1.Canvas3DParams.renderer.params.clip.params), { pivot: 'radius' }), layout: param_definition_1.ParamDefinition.MultiSelect([], param_definition_1.ParamDefinition.objectToOptions(LayoutOptions)), }; var SimpleSettingsMapping = (0, param_mapping_1.ParamMapping)({ params: function (ctx) { var _a; var params = param_definition_1.ParamDefinition.clone(SimpleSettingsParams); var controls = (_a = ctx.spec.components) === null || _a === void 0 ? void 0 : _a.controls; if (controls) { var options = []; if (controls.top !== 'none') options.push(['sequence', LayoutOptions.sequence]); if (controls.bottom !== 'none') options.push(['log', LayoutOptions.log]); if (controls.left !== 'none') options.push(['left', LayoutOptions.left]); params.layout.options = options; } return params; }, target: function (ctx) { var _a, _b; var c = (_a = ctx.spec.components) === null || _a === void 0 ? void 0 : _a.controls; var r = ctx.layout.state.regionState; var layout = []; if (r.top !== 'hidden' && (!c || c.top !== 'none')) layout.push('sequence'); if (r.bottom !== 'hidden' && (!c || c.bottom !== 'none')) layout.push('log'); if (r.left !== 'hidden' && (!c || c.left !== 'none')) layout.push('left'); return { canvas: (_b = ctx.canvas3d) === null || _b === void 0 ? void 0 : _b.props, layout: layout }; } })({ values: function (props, ctx) { var canvas = props.canvas; var renderer = canvas.renderer; return { layout: props.layout, spin: { spin: !!canvas.trackball.spin, speed: canvas.trackball.spinSpeed }, camera: canvas.camera, background: { color: renderer.backgroundColor, transparent: canvas.transparentBackground }, lighting: { renderStyle: renderer.style, occlusion: canvas.postprocessing.occlusion, outline: canvas.postprocessing.outline, fog: canvas.cameraFog }, clipping: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, canvas.cameraClipping), canvas.renderer.clip) }; }, update: function (s, props) { var canvas = props.canvas; canvas.trackball.spin = s.spin.spin; canvas.trackball.spinSpeed = s.spin.speed; canvas.camera = s.camera; canvas.transparentBackground = s.background.transparent; canvas.renderer.backgroundColor = s.background.color; canvas.renderer.style = s.lighting.renderStyle; canvas.postprocessing.occlusion = s.lighting.occlusion; canvas.postprocessing.outline = s.lighting.outline; canvas.cameraFog = s.lighting.fog; canvas.cameraClipping = { radius: s.clipping.radius, far: s.clipping.far, }; canvas.renderer.clip = { variant: s.clipping.variant, objects: s.clipping.objects, }; props.layout = s.layout; }, apply: function (props, ctx) { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var hideLeft, state; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, commands_1.PluginCommands.Canvas3D.SetSettings(ctx, { settings: props.canvas })]; case 1: _a.sent(); hideLeft = props.layout.indexOf('left') < 0; state = (0, immer_1.produce)(ctx.layout.state, function (s) { s.regionState.top = props.layout.indexOf('sequence') >= 0 ? 'full' : 'hidden'; s.regionState.bottom = props.layout.indexOf('log') >= 0 ? 'full' : 'hidden'; s.regionState.left = hideLeft ? 'hidden' : ctx.behaviors.layout.leftPanelTabName.value === 'none' ? 'collapsed' : 'full'; }); return [4 /*yield*/, commands_1.PluginCommands.Layout.Update(ctx, { state: state })]; case 2: _a.sent(); if (hideLeft) { commands_1.PluginCommands.State.SetCurrentObject(ctx, { state: ctx.state.data, ref: mol_state_1.StateTransform.RootRef }); } return [2 /*return*/]; } }); }); } }); //# sourceMappingURL=simple-settings.js.map