@rcsb/rcsb-saguaro
Version:
RCSB 1D Feature Viewer
78 lines (77 loc) • 2.48 kB
JavaScript
//TODO add a callback for the 'hover' case
export class RcsbSelection {
constructor() {
this.selectedElements = new Array();
this.hoverHighlightElements = new Array();
}
setSelectionChangeCallback(f) {
this.selectionChangeCallback = f;
}
getSelected(mode) {
if (mode == null || mode === 'select')
return this.selectedElements;
else
return this.hoverHighlightElements;
}
setSelected(elements, mode) {
if (mode == null || mode === 'select') {
if (elements instanceof Array) {
this.selectedElements = elements;
}
else {
this.selectedElements = [elements];
}
}
else {
if (elements instanceof Array) {
this.hoverHighlightElements = elements;
}
else {
this.hoverHighlightElements = [elements];
}
}
this.callback(mode);
}
addSelected(elements, mode, replaceLast) {
if (mode == null || mode === 'select') {
if (elements instanceof Array) {
this.selectedElements = this.selectedElements.concat(elements);
}
else {
if (replaceLast)
this.selectedElements[this.selectedElements.length - 1].rcsbFvTrackDataElement = elements.rcsbFvTrackDataElement;
else
this.selectedElements.push(elements);
}
}
else {
if (elements instanceof Array) {
this.hoverHighlightElements = this.selectedElements.concat(elements);
}
else {
this.hoverHighlightElements.push(elements);
}
}
this.callback(mode);
}
clearSelection(mode) {
if (mode == null || mode === 'select') {
this.selectedElements = new Array();
}
else {
this.hoverHighlightElements = new Array();
}
this.callback(mode);
}
reset() {
this.selectedElements = new Array();
this.hoverHighlightElements = new Array();
}
callback(mode) {
if (mode == null || mode === 'select') {
if (typeof this.selectionChangeCallback === "function") {
this.selectionChangeCallback(this.selectedElements.map(e => e.rcsbFvTrackDataElement));
}
}
}
}