UNPKG

molstar

Version:

A comprehensive macromolecular library.

111 lines 4.93 kB
/** * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> */ import { arrayFind } from '../../../mol-data/util'; import { StateObjectRef } from '../../../mol-state'; import { Task } from '../../../mol-task'; import { isProductionMode } from '../../../mol-util/debug'; import { objectForEach } from '../../../mol-util/object'; import { ParamDefinition as PD } from '../../../mol-util/param-definition'; import { PresetTrajectoryHierarchy } from './hierarchy-preset'; import { arrayRemoveInPlace } from '../../../mol-util/array'; var TrajectoryHierarchyBuilder = /** @class */ (function () { function TrajectoryHierarchyBuilder(plugin) { var _this = this; this.plugin = plugin; this._providers = []; this.providerMap = new Map(); this.defaultProvider = PresetTrajectoryHierarchy.default; objectForEach(PresetTrajectoryHierarchy, function (r) { return _this.registerPreset(r); }); } TrajectoryHierarchyBuilder.prototype.resolveProvider = function (ref) { var _a; return typeof ref === 'string' ? (_a = PresetTrajectoryHierarchy[ref]) !== null && _a !== void 0 ? _a : arrayFind(this._providers, function (p) { return p.id === ref; }) : ref; }; TrajectoryHierarchyBuilder.prototype.hasPreset = function (t) { for (var _i = 0, _a = this._providers; _i < _a.length; _i++) { var p = _a[_i]; if (!p.isApplicable || p.isApplicable(t, this.plugin)) return true; } return false; }; Object.defineProperty(TrajectoryHierarchyBuilder.prototype, "providers", { get: function () { return this._providers; }, enumerable: false, configurable: true }); TrajectoryHierarchyBuilder.prototype.getPresets = function (t) { if (!t) return this.providers; var ret = []; for (var _i = 0, _a = this._providers; _i < _a.length; _i++) { var p = _a[_i]; if (p.isApplicable && !p.isApplicable(t, this.plugin)) continue; ret.push(p); } return ret; }; TrajectoryHierarchyBuilder.prototype.getPresetSelect = function (t) { var options = []; for (var _i = 0, _a = this._providers; _i < _a.length; _i++) { var p = _a[_i]; if (t && p.isApplicable && !p.isApplicable(t, this.plugin)) continue; options.push([p.id, p.display.name]); } return PD.Select('auto', options); }; TrajectoryHierarchyBuilder.prototype.getPresetsWithOptions = function (t) { var options = []; var map = Object.create(null); for (var _i = 0, _a = this._providers; _i < _a.length; _i++) { var p = _a[_i]; if (p.isApplicable && !p.isApplicable(t, this.plugin)) continue; options.push([p.id, p.display.name]); map[p.id] = p.params ? PD.Group(p.params(t, this.plugin)) : PD.EmptyGroup(); } if (options.length === 0) return PD.MappedStatic('', { '': PD.EmptyGroup() }); return PD.MappedStatic(options[0][0], map, { options: options }); }; TrajectoryHierarchyBuilder.prototype.registerPreset = function (provider) { if (this.providerMap.has(provider.id)) { throw new Error("Hierarchy provider with id '" + provider.id + "' already registered."); } this._providers.push(provider); this.providerMap.set(provider.id, provider); }; TrajectoryHierarchyBuilder.prototype.unregisterPreset = function (provider) { this.providerMap.delete(provider.id); arrayRemoveInPlace(this._providers, provider); }; TrajectoryHierarchyBuilder.prototype.applyPreset = function (parent, providerRef, params) { var _this = this; var provider = this.resolveProvider(providerRef); if (!provider) return; var state = this.plugin.state.data; var cell = StateObjectRef.resolveAndCheck(state, parent); if (!cell) { if (!isProductionMode) console.warn("Applying hierarchy preset provider to bad cell."); return; } var prms = params || (provider.params ? PD.getDefaultValues(provider.params(cell.obj, this.plugin)) : {}); var task = Task.create("" + provider.display.name, function () { return provider.apply(cell, prms, _this.plugin); }); return this.plugin.runTask(task); }; return TrajectoryHierarchyBuilder; }()); export { TrajectoryHierarchyBuilder }; //# sourceMappingURL=hierarchy.js.map