molstar
Version:
A comprehensive macromolecular library.
155 lines (154 loc) • 8.39 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.GenericEntry = exports.GenericEntryListControls = void 0;
var tslib_1 = require("tslib");
var jsx_runtime_1 = require("react/jsx-runtime");
var commands_1 = require("../../mol-plugin/commands");
var mol_state_1 = require("../../mol-state");
var base_1 = require("../base");
var common_1 = require("../controls/common");
var update_transform_1 = require("../state/update-transform");
var icons_1 = require("../controls/icons");
var GenericEntryListControls = /** @class */ (function (_super) {
tslib_1.__extends(GenericEntryListControls, _super);
function GenericEntryListControls() {
return _super !== null && _super.apply(this, arguments) || this;
}
Object.defineProperty(GenericEntryListControls.prototype, "current", {
get: function () {
return this.plugin.managers.structure.hierarchy.behaviors.selection;
},
enumerable: false,
configurable: true
});
GenericEntryListControls.prototype.componentDidMount = function () {
var _this = this;
this.subscribe(this.current, function () { return _this.forceUpdate(); });
};
Object.defineProperty(GenericEntryListControls.prototype, "unitcell", {
get: function () {
var _a;
var selection = this.plugin.managers.structure.hierarchy.selection;
if (selection.structures.length === 0)
return null;
var refs = [];
for (var _i = 0, _b = selection.structures; _i < _b.length; _i++) {
var s = _b[_i];
var model = s.model;
if ((model === null || model === void 0 ? void 0 : model.unitcell) && ((_a = model.unitcell) === null || _a === void 0 ? void 0 : _a.cell.obj))
refs.push(model.unitcell);
}
if (refs.length === 0)
return null;
return (0, jsx_runtime_1.jsx)(GenericEntry, { refs: refs, labelMultiple: 'Unit Cells' });
},
enumerable: false,
configurable: true
});
Object.defineProperty(GenericEntryListControls.prototype, "customControls", {
get: function () {
var _this = this;
var controls = [];
this.plugin.genericRepresentationControls.forEach(function (provider, key) {
var _a = provider(_this.plugin.managers.structure.hierarchy.selection), refs = _a[0], labelMultiple = _a[1];
if (refs.length > 0) {
controls.push((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(GenericEntry, { refs: refs, labelMultiple: labelMultiple }) }, key));
}
});
return controls.length > 0 ? controls : null;
},
enumerable: false,
configurable: true
});
GenericEntryListControls.prototype.render = function () {
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)("div", tslib_1.__assign({ style: { marginTop: '6px' } }, { children: [this.unitcell, this.customControls] })) });
};
return GenericEntryListControls;
}(base_1.PurePluginUIComponent));
exports.GenericEntryListControls = GenericEntryListControls;
var GenericEntry = /** @class */ (function (_super) {
tslib_1.__extends(GenericEntry, _super);
function GenericEntry() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = { showOptions: false };
_this.toggleVisibility = function (e) {
e.preventDefault();
_this.plugin.managers.structure.hierarchy.toggleVisibility(_this.props.refs);
e.currentTarget.blur();
};
_this.highlight = function (e) {
e.preventDefault();
if (!_this.pivot.cell.parent)
return;
commands_1.PluginCommands.Interactivity.Object.Highlight(_this.plugin, {
state: _this.pivot.cell.parent,
ref: _this.props.refs.map(function (c) { return c.cell.transform.ref; })
});
};
_this.clearHighlight = function (e) {
e.preventDefault();
commands_1.PluginCommands.Interactivity.ClearHighlights(_this.plugin);
};
_this.focus = function (e) {
var _a;
e.preventDefault();
var allHidden = true;
for (var _i = 0, _b = _this.props.refs; _i < _b.length; _i++) {
var uc = _b[_i];
if (!uc.cell.state.isHidden) {
allHidden = false;
break;
}
}
if (allHidden) {
_this.plugin.managers.structure.hierarchy.toggleVisibility(_this.props.refs, 'show');
}
var loci = [];
for (var _c = 0, _d = _this.props.refs; _c < _d.length; _c++) {
var uc = _d[_c];
if (uc.cell.state.isHidden) {
continue;
}
var l = (_a = uc.cell.obj) === null || _a === void 0 ? void 0 : _a.data.repr.getLoci();
if (l)
loci.push(l);
}
_this.plugin.managers.camera.focusLoci(loci);
};
_this.toggleOptions = function () { return _this.setState({ showOptions: !_this.state.showOptions }); };
return _this;
}
GenericEntry.prototype.componentDidMount = function () {
var _this = this;
this.subscribe(this.plugin.state.events.cell.stateUpdated, function (e) {
var _a;
if (mol_state_1.State.ObjectEvent.isCell(e, (_a = _this.pivot) === null || _a === void 0 ? void 0 : _a.cell))
_this.forceUpdate();
});
};
Object.defineProperty(GenericEntry.prototype, "pivot", {
get: function () { return this.props.refs[0]; },
enumerable: false,
configurable: true
});
GenericEntry.prototype.render = function () {
var _a = this.props, refs = _a.refs, labelMultiple = _a.labelMultiple;
if (refs.length === 0)
return null;
var pivot = refs[0];
var label, description;
if (refs.length === 1) {
var obj = pivot.cell.obj;
if (!obj)
return null;
label = obj === null || obj === void 0 ? void 0 : obj.label;
description = obj === null || obj === void 0 ? void 0 : obj.description;
}
else {
label = "".concat(refs.length, " ").concat(labelMultiple || 'Objects');
}
return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", tslib_1.__assign({ className: 'msp-flex-row' }, { children: [(0, jsx_runtime_1.jsxs)("button", tslib_1.__assign({ className: 'msp-form-control msp-control-button-label', title: "".concat(label, ". Click to focus."), onClick: this.focus, onMouseEnter: this.highlight, onMouseLeave: this.clearHighlight, style: { textAlign: 'left' } }, { children: [label, " ", (0, jsx_runtime_1.jsx)("small", { children: description })] })), (0, jsx_runtime_1.jsx)(common_1.IconButton, { svg: pivot.cell.state.isHidden ? icons_1.VisibilityOffOutlinedSvg : icons_1.VisibilityOutlinedSvg, toggleState: false, className: 'msp-form-control', onClick: this.toggleVisibility, title: "".concat(pivot.cell.state.isHidden ? 'Show' : 'Hide'), small: true, flex: true }), refs.length === 1 && (0, jsx_runtime_1.jsx)(common_1.IconButton, { svg: icons_1.MoreHorizSvg, className: 'msp-form-control', onClick: this.toggleOptions, title: 'Options', toggleState: this.state.showOptions, flex: true })] })), (refs.length === 1 && this.state.showOptions && pivot.cell.parent) && (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)("div", tslib_1.__assign({ className: 'msp-control-offset' }, { children: (0, jsx_runtime_1.jsx)(update_transform_1.UpdateTransformControl, { state: pivot.cell.parent, transform: pivot.cell.transform, customHeader: 'none', autoHideApply: true }) })) })] });
};
return GenericEntry;
}(base_1.PurePluginUIComponent));
exports.GenericEntry = GenericEntry;
;