From 86b6b308301cba32d8d037dec4f2573f96761a3a Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Fri, 7 Jul 2023 18:28:41 +0200
Subject: [PATCH] expmt: show last selected point

---
 .../viewerCmp/viewerCmp.component.ts          | 29 ++++++++-
 .../viewerCmp/viewerCmp.template.html         | 60 +++++++++++++++++++
 2 files changed, 88 insertions(+), 1 deletion(-)

diff --git a/src/viewerModule/viewerCmp/viewerCmp.component.ts b/src/viewerModule/viewerCmp/viewerCmp.component.ts
index b0d53ca11..7d6a1a038 100644
--- a/src/viewerModule/viewerCmp/viewerCmp.component.ts
+++ b/src/viewerModule/viewerCmp/viewerCmp.component.ts
@@ -9,7 +9,7 @@ import { EnumViewerEvt, TContextArg, TSupportedViewers, TViewerEvent } from "../
 import { ContextMenuService, TContextMenuReg } from "src/contextMenuModule";
 import { DialogService } from "src/services/dialogService.service";
 import { SAPI } from "src/atlasComponents/sapi";
-import { Feature, SxplrAtlas, SxplrRegion } from "src/atlasComponents/sapi/sxplrTypes"
+import { Feature, SxplrAtlas, SxplrParcellation, SxplrRegion } from "src/atlasComponents/sapi/sxplrTypes"
 import { atlasAppearance, atlasSelection, userInteraction } from "src/state";
 import { SxplrTemplate } from "src/atlasComponents/sapi/sxplrTypes";
 import { EntryComponent } from "src/features/entry/entry.component";
@@ -191,10 +191,14 @@ export class ViewerCmp implements OnDestroy {
   @ViewChild('viewerStatusCtxMenu', { read: TemplateRef })
   private viewerStatusCtxMenu: TemplateRef<any>
 
+  @ViewChild('lastViewedPointTmpl', { read: TemplateRef })
+  private lastViewedPointTmpl: TemplateRef<unknown>
+
   @ViewChild('viewerStatusRegionCtxMenu', { read: TemplateRef })
   private viewerStatusRegionCtxMenu: TemplateRef<any>
 
   private templateSelected: SxplrTemplate
+  #parcellationSelected: SxplrParcellation
 
   constructor(
     private store$: Store<any>,
@@ -208,6 +212,7 @@ export class ViewerCmp implements OnDestroy {
       this.templateSelected$.subscribe(
         t => this.templateSelected = t
       ),
+      this.#parcellationSelected$.subscribe(parc => this.#parcellationSelected = parc),
       combineLatest([
         this.templateSelected$,
         this.parcellationSelected$,
@@ -250,6 +255,17 @@ export class ViewerCmp implements OnDestroy {
   ngAfterViewInit(): void{
     const cb: TContextMenuReg<TContextArg<'nehuba' | 'threeSurfer'>> = ({ append, context }) => {
 
+      if (this.#lastSelectedPoint && this.lastViewedPointTmpl) {
+        const { point, template, face, vertices } = this.#lastSelectedPoint
+        append({
+          tmpl: this.lastViewedPointTmpl,
+          data: {
+            point, face, vertices,
+            template
+          },
+          order: 15
+        })
+      }
       /**
        * first append general viewer info
        */
@@ -330,6 +346,8 @@ export class ViewerCmp implements OnDestroy {
   }
 
   public selectPoint(pointSpec: {point?: number[], face?: number, vertices?: number[]}, template: SxplrTemplate){
+    this.#lastSelectedPoint = { ...pointSpec, template }
+
     const { point, face, vertices } = pointSpec
     const id = `${template.id}-${point ? point.join(',') : face}`
     let pointOfInterest: TFace | TSandsPoint
@@ -356,6 +374,14 @@ export class ViewerCmp implements OnDestroy {
       }
     }
     if (pointOfInterest) {
+      this.store$.dispatch(
+        atlasSelection.actions.selectTemplate({
+          template,
+          requested: {
+            parcellation: this.#parcellationSelected
+          }
+        })
+      )
       this.store$.dispatch(
         atlasSelection.actions.selectPoint({
           point: pointOfInterest
@@ -363,6 +389,7 @@ export class ViewerCmp implements OnDestroy {
       )
     }
   }
+  #lastSelectedPoint: { point?: number[], face?: number, vertices?: number[], template: SxplrTemplate }
 
   public clearPoint(){
     this.store$.dispatch(
diff --git a/src/viewerModule/viewerCmp/viewerCmp.template.html b/src/viewerModule/viewerCmp/viewerCmp.template.html
index 4a7c18c7b..cd5c8600e 100644
--- a/src/viewerModule/viewerCmp/viewerCmp.template.html
+++ b/src/viewerModule/viewerCmp/viewerCmp.template.html
@@ -929,6 +929,66 @@
   </mat-card>
 </ng-template>
 
+<ng-template
+  sxplrExperimentalFlag
+  [experimental]="true"
+  #lastSelPtExpmt="sxplrExperimentalFlag"
+  [ngIf]="lastSelPtExpmt.show$ | async">
+<ng-template #lastViewedPointTmpl let-data>
+  <div class="text-muted sxplr-m-2">
+    Last selected spatial object
+  </div>
+  <button mat-button class="sxplr-list-like-button"
+    (click)="selectPoint(data, data.template)">
+
+    
+    <div class="sxplr-list-like-button-icon">
+      <i class="fas fa-history"></i>
+    </div>
+
+    <div class="sxplr-list-like-button-body">
+
+      <ng-template [ngIf]="data.point">
+        <span class="sxplr-list-like-button-body-line">
+          {{ data.point | nmToMm | numbers | addUnitAndJoin : '' }} (mm)
+        </span>
+        <span class="sxplr-list-like-button-body-line text-muted">
+          Point
+        </span>
+      </ng-template>
+
+      <ng-template [ngIf]="data.face && data.vertices">
+        
+        <span class="sxplr-list-like-button-body-line">
+          Face Index: {{ data.face }}, Vertices Index: {{ data.vertices | addUnitAndJoin : '' }}
+        </span>
+        <span class="sxplr-list-like-button-body-line text-muted">
+          Mesh Face
+        </span>
+      </ng-template>
+
+      <span class="sxplr-list-like-button-body-line text-muted">
+        <span>
+          {{ data.template.name }}
+        </span>
+
+        <ng-template [ngIf]="templateSelected$ | async" let-templateSelected>
+          <ng-template [ngIf]="templateSelected.id !== data.template.id">
+            <mat-icon fontSet="fas" fontIcon="fa-exclamation-triangle"
+              color="warn"
+              matTooltip="Different template spaces detected.">
+            </mat-icon>
+          </ng-template>
+        </ng-template>
+        
+      </span>
+    </div>
+
+    <!-- {{ data.point | json }} -->
+  </button>
+</ng-template>
+</ng-template>
+
 
 <!-- viewer status ctx menu -->
 <ng-template #viewerStatusCtxMenu let-data>
-- 
GitLab