Просмотр исходного кода

fixed minor 1D-3D selection bugs

bioinsilico 2 лет назад
Родитель
Сommit
5c2a77043b

+ 25 - 15
src/RcsbFvSequence/SequenceViews/RcsbView/CallbackManagerFactoryImplementation/AssemblyCallbackManager.ts

@@ -11,6 +11,7 @@ import {
     CallbackManagerInterface
 } from "../CallbackManagerFactoryInterface";
 import {RegionSelectionInterface} from "../../../../RcsbFvState/RcsbFvSelectorManager";
+import {DataContainer} from "../../../../Utils/DataContainer";
 
 export class AssemblyCallbackManagerFactory<R> implements CallbackManagerFactoryInterface<R,undefined> {
     getCallbackManager(config: CallbackConfigInterface<R>): CallbackManagerInterface<undefined> {
@@ -21,23 +22,30 @@ export class AssemblyCallbackManagerFactory<R> implements CallbackManagerFactory
 class AssemblyCallbackManager<R> extends AbstractCallbackManager<R,undefined> {
 
     public featureClickCallback(e:RcsbFvTrackDataElementInterface): void {
-        this.plugin.clearFocus();
         if(e == null){
             this.stateManager.selectionState.setLastSelection(null);
-            return;
+        }else{
+            const x = e.begin;
+            const y = e.end ?? e.begin;
+            const modelId: string = this.stateManager.assemblyModelSate.getString("modelId");
+            const labelAsymId: string = this.stateManager.assemblyModelSate.getString("labelAsymId");
+            const operatorName: string | undefined = this.stateManager.assemblyModelSate.getOperator()?.name;
+            if (e.isEmpty)
+                this.stateManager.selectionState.setLastSelection({
+                    modelId, labelAsymId, operatorName, source: "sequence", regions: [
+                        {begin: x, end: x, source: "sequence"},
+                        {begin: y, end: y, source: "sequence"}
+                    ]
+                });
+            else
+                this.stateManager.selectionState.setLastSelection({
+                    modelId,
+                    labelAsymId,
+                    operatorName,
+                    source: "sequence",
+                    regions: processGaps(modelId, labelAsymId, e, operatorName).map(r => ({...r, source: "sequence"}))
+                });
         }
-        const x = e.begin;
-        const y = e.end ?? e.begin;
-        const modelId: string = this.stateManager.assemblyModelSate.getString("modelId");
-        const labelAsymId: string = this.stateManager.assemblyModelSate.getString("labelAsymId");
-        const operatorName: string|undefined = this.stateManager.assemblyModelSate.getOperator()?.name;
-        if(e.isEmpty)
-            this.stateManager.selectionState.setLastSelection({modelId,labelAsymId,operatorName,source:"sequence",regions:[
-                {begin:x,end:x,source:"sequence"},
-                {begin:y,end:y,source:"sequence"}
-            ]});
-        else
-            this.stateManager.selectionState.setLastSelection({modelId,labelAsymId,operatorName,source:"sequence",regions:processGaps(modelId, labelAsymId, e, operatorName).map(r=>({...r, source:"sequence"}))});
         this.stateManager.next({type:"feature-click", view:"1d-view"});
     }
 
@@ -51,7 +59,9 @@ class AssemblyCallbackManager<R> extends AbstractCallbackManager<R,undefined> {
 
     public async pfvChangeCallback(): Promise<void>{
         this.stateManager.selectionState.setLastSelection(null);
-        await this.structureViewerSelectionCallback("select");
+        this.rcsbFvContainer.get()?.getFv().then(async ()=>{
+            await this.structureViewerSelectionCallback("select");
+        });
     }
 
     protected async innerStructureViewerSelectionChange(mode:'select'|'hover'): Promise<void> {

+ 1 - 1
src/RcsbFvSequence/SequenceViews/RcsbView/CallbackManagerFactoryInterface.ts

@@ -34,7 +34,7 @@ export abstract class AbstractCallbackManager<R,U> implements CallbackManagerInt
     protected readonly stateManager: RcsbFvStateManager;
     protected readonly plugin: ViewerCallbackManagerInterface & ViewerActionManagerInterface<R>;
     protected pfvFactory: PfvManagerInterface;
-    protected readonly isInnerSelection: DataContainer<boolean> = new DataContainer<boolean>();
+    private readonly isInnerSelection: DataContainer<boolean> = new DataContainer<boolean>();
 
     constructor(config: CallbackConfigInterface<R>) {
         this.rcsbFvContainer = config.rcsbFvContainer;

+ 6 - 0
src/RcsbFvStructure/StructureViewerBehaviour/AssemblyBehaviour.ts

@@ -91,6 +91,12 @@ class AssemblyBehaviour<R> implements StructureViewerBehaviourInterface {
                 });
             else
                 this.selectedComponentId = undefined;
+        }else{
+            const modelId: string = this.stateManager.assemblyModelSate.getString("modelId");
+            const labelAsymId: string = this.stateManager.assemblyModelSate.getString("labelAsymId");
+            const operatorName: string|undefined = this.stateManager.assemblyModelSate.getOperator()?.name;
+            this.structureViewer.clearSelection("select", {modelId, labelAsymId, operatorName});
+            this.resetPluginView();
         }
     }