From 4f3056bcfe6e6c4ce09bc11ca1e363ebf56d0b0f Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Wed, 22 May 2019 13:59:27 +0200
Subject: [PATCH] bugfix: nifti layer can now be removed

---
 .../atlasViewer.urlService.service.ts         |  3 +
 src/ui/layerbrowser/layerbrowser.component.ts | 16 ++--
 .../layerbrowser/layerbrowser.template.html   | 78 ++++++++++---------
 3 files changed, 55 insertions(+), 42 deletions(-)

diff --git a/src/atlasViewer/atlasViewer.urlService.service.ts b/src/atlasViewer/atlasViewer.urlService.service.ts
index 225cf6af9..5cd06b1ba 100644
--- a/src/atlasViewer/atlasViewer.urlService.service.ts
+++ b/src/atlasViewer/atlasViewer.urlService.service.ts
@@ -51,6 +51,9 @@ export class AtlasViewerURLService{
       scan((acc,val)=>Object.assign({},acc,val),{})
     )
 
+    /**
+     * TODO change additionalNgLayer to id, querying node backend for actual urls
+     */
     this.additionalNgLayers$ = combineLatest(
       this.changeQueryObservable$.pipe(
         map(state => state.templateSelected)
diff --git a/src/ui/layerbrowser/layerbrowser.component.ts b/src/ui/layerbrowser/layerbrowser.component.ts
index 862d956f9..8a8cdbd4a 100644
--- a/src/ui/layerbrowser/layerbrowser.component.ts
+++ b/src/ui/layerbrowser/layerbrowser.component.ts
@@ -9,7 +9,10 @@ import { AtlasViewerConstantsServices } from "src/atlasViewer/atlasViewer.consta
 @Component({
   selector : 'layer-browser',
   templateUrl : './layerbrowser.template.html',
-  styleUrls : [ './layerbrowser.style.css' ]
+  styleUrls : [ 
+    './layerbrowser.style.css',
+    '../btnShadow.style.css'
+  ]
 })
 
 export class LayerBrowser implements OnDestroy{
@@ -66,11 +69,11 @@ export class LayerBrowser implements OnDestroy{
      * TODO leakage? after change of template still hanging the reference?
      */
     this.subscriptions.push(
-        this.store.pipe(
+      this.store.pipe(
         select('viewerState'),
-        filter(state => isDefined(state) && isDefined(state.templateSelected)),
+        select('templateSelected'),
         distinctUntilChanged((o,n) => o.templateSelected.name === n.templateSelected.name),
-        map(state => Object.keys(state.templateSelected.nehubaConfig.dataset.initialNgState.layers)),
+        map(templateSelected => Object.keys(templateSelected.nehubaConfig.dataset.initialNgState.layers)),
         buffer(this.store.pipe(
           select('ngViewerState'),
           select('nehubaReady'),
@@ -102,7 +105,6 @@ export class LayerBrowser implements OnDestroy{
   }
 
   ngLayersChangeHandler(){
-
     this.ngLayers = (window['viewer'].layerManager.managedLayers as any[]).map(obj => ({
       name : obj.name,
       type : obj.initialSpecification.type,
@@ -119,8 +121,8 @@ export class LayerBrowser implements OnDestroy{
 
   checkLocked(ngLayer:NgLayerInterface):boolean{
     if(!this.lockedLayers){
-      /* locked layer undefined. always return true for locked layer check */
-      return true
+      /* locked layer undefined. always return false */
+      return false
     }else
       return this.lockedLayers.findIndex(l => l === ngLayer.name) >= 0
   }
diff --git a/src/ui/layerbrowser/layerbrowser.template.html b/src/ui/layerbrowser/layerbrowser.template.html
index 03e5a4cdf..e307ecb73 100644
--- a/src/ui/layerbrowser/layerbrowser.template.html
+++ b/src/ui/layerbrowser/layerbrowser.template.html
@@ -1,51 +1,58 @@
 <ng-container *ngIf="ngLayers$ | async | filterNgLayer : ngLayers as filteredNgLayers; else noLayerPlaceHolder">
   <ng-container *ngIf="filteredNgLayers.length > 0; else noLayerPlaceHolder">
     <div
-      class="layerContainer"
-      [ngStyle] = "isMobile && {'overflow': 'hidden'}"
+      class="layerContainer overflow-hidden"
       *ngFor = "let ngLayer of filteredNgLayers">
     
-      <div
-      (click) = "checkLocked(ngLayer) ? null : toggleVisibility(ngLayer)"
-      class="btn btn-sm btn-outline-secondary rounded-circle">
-        <i 
+      <!-- toggle visibility -->
+      <div class="btnWrapper">
+        <div
           container = "body"
           placement = "bottom"
           [tooltip] = "checkLocked(ngLayer) ? 'base layer cannot be hidden' : 'toggle visibility'"
-          [ngClass] = "checkLocked(ngLayer) ? 'fas fa-lock muted' :ngLayer.visible ? 'far fa-eye' : 'far fa-eye-slash'">
-    
-        </i>
+          (click) = "checkLocked(ngLayer) ? null : toggleVisibility(ngLayer)"
+          class="btn btn-sm btn-outline-secondary rounded-circle">
+          <i [ngClass] = "checkLocked(ngLayer) ? 'fas fa-lock muted' :ngLayer.visible ? 'far fa-eye' : 'far fa-eye-slash'">
+          </i>
+        </div>
       </div>
-      <div *ngIf="advancedMode"
-      (click) = "forceSegment.hide();toggleForceShowSegment(ngLayer)"
-        class="btn btn-sm btn-outline-secondary rounded-circle">
-        <i 
-          container = "body"
-          placement = "bottom"
-          [tooltip] = "ngLayer.type === 'segmentation' ? segmentationTooltip() : 'only segmentation layer can hide/show segments'"
-          class = "fas" 
-          #forceSegment = "bs-tooltip"
-          [ngClass] = "ngLayer.type === 'segmentation' ? ('fa-th-large ' + segmentationAdditionalClass) : 'fa-lock muted' ">
-    
-        </i>
+
+      <!-- advanced mode only: toggle force show segmentation -->
+      <div class="btnWrapper">
+        <div
+          *ngIf="advancedMode"
+          container="body"
+          placement="bottom"
+          [tooltip]="ngLayer.type === 'segmentation' ? segmentationTooltip() : 'only segmentation layer can hide/show segments'"
+          #forceSegment="bs-tooltip"
+          (click)="forceSegment.hide();toggleForceShowSegment(ngLayer)"
+          class="btn btn-sm btn-outline-secondary rounded-circle">
+          <i 
+            class="fas" 
+            [ngClass]="ngLayer.type === 'segmentation' ? ('fa-th-large ' + segmentationAdditionalClass) : 'fa-lock muted' ">
+      
+          </i>
+        </div>
       </div>
-      <div
-        (click) = "removeLayer(ngLayer)"
-        class="btn btn-sm btn-outline-secondary rounded-circle">
-        <i 
-          container = "body"
-          placement = "bottom"
-          [tooltip] = "checkLocked(ngLayer) ? 'base layers cannot be removed' : 'remove layer'"
-          [ngClass] = "checkLocked(ngLayer) ? 'fas fa-lock muted' : 'far fa-times-circle'">
-    
-        </i>
+
+      <!-- remove layer -->
+      <div class="btnWrapper">
+        <div
+          container="body"
+          placement="bottom"
+          [tooltip]="checkLocked(ngLayer) ? 'base layers cannot be removed' : 'remove layer'"
+          (click)="removeLayer(ngLayer)"
+          class="btn btn-sm btn-outline-secondary rounded-circle">
+          <i [ngClass]="checkLocked(ngLayer) ? 'fas fa-lock muted' : 'far fa-times-circle'">
+          </i>
+        </div>
       </div>
-      <panel-component
-      
-        [ngClass] = "{'muted-text muted' : !classVisible(ngLayer)}">
+
+      <!-- layer description -->
+      <panel-component [ngClass]="{'muted-text muted' : !classVisible(ngLayer)}">
     
         <div heading>
-          {{ ngLayer.name | getLayerNameFromDatasets : (fetchedDataEntries$ | async) }} : {{ ngLayer.type }}
+          {{ ngLayer.name | getLayerNameFromDatasets : (fetchedDataEntries$ | async) }}
         </div>
     
         <div bodyy>
@@ -56,6 +63,7 @@
   </ng-container>
 </ng-container>
 
+<!-- fall back when no layers are showing -->
 <ng-template #noLayerPlaceHolder>
   <h5 class="noLayerPlaceHolder text-muted">
     No additional layers added.
-- 
GitLab