diff --git a/src/services/stateStore.service.ts b/src/services/stateStore.service.ts
index 909b93ef38ae9e4dd49224cb0a5a0d2380dab7cb..1f61df6072c6213d127567b6280a3104afa3151e 100644
--- a/src/services/stateStore.service.ts
+++ b/src/services/stateStore.service.ts
@@ -90,13 +90,16 @@ export const ADD_NG_LAYER = 'ADD_NG_LAYER'
export const REMOVE_NG_LAYER = 'REMOVE_NG_LAYER'
export const SHOW_NG_LAYER = 'SHOW_NG_LAYER'
export const HIDE_NG_LAYER = 'HIDE_NG_LAYER'
+export const FORCE_SHOW_SEGMENT = `FORCE_SHOW_SEGMENT`
export interface NgViewerStateInterface{
layers : NgLayerInterface[]
+ forceShowSegment : boolean | null
}
export interface NgViewerAction extends Action{
layer : NgLayerInterface
+ forceShowSegment : boolean
}
const mapLayer = (existingLayer:NgLayerInterface, incomingLayer:NgLayerInterface):NgLayerInterface => {
@@ -116,7 +119,7 @@ const mapLayer = (existingLayer:NgLayerInterface, incomingLayer:NgLayerInterface
} as NgLayerInterface)
}
-export function ngViewerState(prevState:NgViewerStateInterface = {layers:[]}, action:NgViewerAction):NgViewerStateInterface{
+export function ngViewerState(prevState:NgViewerStateInterface = {layers:[], forceShowSegment:null}, action:NgViewerAction):NgViewerStateInterface{
switch(action.type){
case ADD_NG_LAYER:
return Object.assign({}, prevState, {
@@ -142,6 +145,10 @@ export function ngViewerState(prevState:NgViewerStateInterface = {layers:[]}, ac
} as NgLayerInterface)
: l)
})
+ case FORCE_SHOW_SEGMENT:
+ return Object.assign({}, prevState, {
+ forceShowSegment : action.forceShowSegment
+ }) as NgViewerStateInterface
default:
return prevState
}
@@ -340,6 +347,7 @@ export interface File{
mimetype : string
url? : string
data? : any
+ kgID? : string
targetParcellation : string
properties : any
}
diff --git a/src/ui/layerbrowser/layerbrowser.component.ts b/src/ui/layerbrowser/layerbrowser.component.ts
index cc09552a6db59bd93560889c63a6ef80c86fae50..174275636e8f9012221e26342070da6b246fc3ee 100644
--- a/src/ui/layerbrowser/layerbrowser.component.ts
+++ b/src/ui/layerbrowser/layerbrowser.component.ts
@@ -44,10 +44,9 @@ export class LayerBrowser implements OnDestroy{
window['viewer'].registerDisposer(this.disposeHandler)
}))
- this.subscriptions.push(this.forceShowSegment$.subscribe(state => {
- console.log('assigning new val')
- this.forceShowSegmentCurrentState = state
- }))
+ this.subscriptions.push(
+ this.forceShowSegment$.subscribe(state => this.forceShowSegmentCurrentState = state)
+ )
}
ngOnDestroy(){
@@ -92,7 +91,7 @@ export class LayerBrowser implements OnDestroy{
}
toggleForceShowSegment(ngLayer:any){
- if(!ngLayer && ngLayer.type !== 'segmentation'){
+ if(!ngLayer || ngLayer.type !== 'segmentation'){
/* toggle only on segmentation layer */
return
}
@@ -119,4 +118,20 @@ export class LayerBrowser implements OnDestroy{
}
})
}
+
+ segmentationTooltip(){
+ return `toggle segments visibility:
+${this.forceShowSegmentCurrentState === true ? 'always show' : this.forceShowSegmentCurrentState === false ? 'always hide' : 'auto'}`
+ }
+
+
+ get segmentationAdditionalClass(){
+ return this.forceShowSegmentCurrentState === null
+ ? 'blue'
+ : this.forceShowSegmentCurrentState === true
+ ? 'normal'
+ : this.forceShowSegmentCurrentState === false
+ ? 'muted'
+ : 'red'
+ }
}
diff --git a/src/ui/layerbrowser/layerbrowser.style.css b/src/ui/layerbrowser/layerbrowser.style.css
index 8116c6ae618eb97dbade6b6ce35de1ee6ca927cc..47a34fbd1abaa67608b4162e860aeb9d4a697e1d 100644
--- a/src/ui/layerbrowser/layerbrowser.style.css
+++ b/src/ui/layerbrowser/layerbrowser.style.css
@@ -35,4 +35,15 @@ div[body]
display: flex;
flex-direction: row;
align-items: center;
-}
\ No newline at end of file
+}
+
+.glyphicon.blue
+{
+ color: #337ab7;
+}
+
+.glyphicon.red
+{
+ color: red;
+}
+
diff --git a/src/ui/layerbrowser/layerbrowser.template.html b/src/ui/layerbrowser/layerbrowser.template.html
index a636084eed162af7ca23c18ade223a99c4f414d1..8518e1ffa69d9a362150b030d354d4b425ff7bb5 100644
--- a/src/ui/layerbrowser/layerbrowser.template.html
+++ b/src/ui/layerbrowser/layerbrowser.template.html
@@ -18,10 +18,11 @@
<i
container = "body"
placement = "bottom"
- [tooltip] = "ngLayer.type === 'segmentation' ? 'hide show segments' : 'only segmentation layer can hide/show segments'"
- (click) = "toggleForceShowSegment(ngLayer)"
+ [tooltip] = "ngLayer.type === 'segmentation' ? segmentationTooltip() : 'only segmentation layer can hide/show segments'"
+ (click) = "forceSegment.hide();toggleForceShowSegment(ngLayer)"
class = "glyphicon"
- [ngClass] = "ngLayer.type === 'segmentation' ? 'glyphicon-th-large' : 'glyphicon-lock muted' ">
+ #forceSegment = "bs-tooltip"
+ [ngClass] = "ngLayer.type === 'segmentation' ? ('glyphicon-th-large ' + segmentationAdditionalClass) : 'glyphicon-lock muted' ">
</i>
</div>
diff --git a/src/ui/nehubaContainer/nehubaContainer.component.ts b/src/ui/nehubaContainer/nehubaContainer.component.ts
index 086053ae0000db47df6ec0a11d3363f26660b8da..36501ee38d840f222835d6b8e6f86618146369f1 100644
--- a/src/ui/nehubaContainer/nehubaContainer.component.ts
+++ b/src/ui/nehubaContainer/nehubaContainer.component.ts
@@ -30,7 +30,8 @@ export class NehubaContainer implements OnInit, OnDestroy{
private newViewer$ : Observable<any>
private selectedParcellation$ : Observable<any>
private selectedRegions$ : Observable<any[]>
- private dedicatedView$ : Observable<string[]|null>
+ private hideSegmentations$ : Observable<boolean>
+
private fetchedSpatialDatasets$ : Observable<any[]>
private userLandmarks$ : Observable<UserLandmark[]>
public onHoverSegmentName$ : Observable<string>
@@ -44,7 +45,7 @@ export class NehubaContainer implements OnInit, OnDestroy{
private selectedRegionIndexSet : Set<number> = new Set()
public fetchedSpatialData : DataEntry[] = []
- private ngLayersRegister : NgViewerStateInterface = {layers : []}
+ private ngLayersRegister : NgViewerStateInterface = {layers : [], forceShowSegment: null}
private ngLayers$ : Observable<NgViewerStateInterface>
private selectedParcellationNgId : string
private selectedParcellation : any | null
@@ -69,6 +70,7 @@ export class NehubaContainer implements OnInit, OnDestroy{
private elementRef : ElementRef
){
this.nehubaViewerFactory = this.csf.resolveComponentFactory(NehubaViewerUnit)
+
this.newViewer$ = this.store.pipe(
select('viewerState'),
filter(state=>isDefined(state) && isDefined(state.templateSelected)),
@@ -90,12 +92,6 @@ export class NehubaContainer implements OnInit, OnDestroy{
map(state=>state.regionsSelected)
)
- this.dedicatedView$ = this.store.pipe(
- select('viewerState'),
- filter(state=>typeof state !== 'undefined' && state !== null && typeof state.dedicatedView !== 'undefined'),
- map(state=>state.dedicatedView)
- )
-
this.fetchedSpatialDatasets$ = this.store.pipe(
select('dataStore'),
safeFilter('fetchedSpatialData'),
@@ -207,6 +203,12 @@ export class NehubaContainer implements OnInit, OnDestroy{
this.ngLayers$ = this.store.pipe(
select('ngViewerState')
)
+
+ this.hideSegmentations$ = this.ngLayers$.pipe(
+ map(state => isDefined(state)
+ ? state.layers.findIndex(l => l.mixability === 'nonmixable') >= 0
+ : false)
+ )
}
ngOnInit(){
@@ -284,15 +286,23 @@ export class NehubaContainer implements OnInit, OnDestroy{
)
this.subscriptions.push(
+
+ /* TODO add observable of forcedShowSegment */
combineLatest(
this.selectedRegions$,
- this.dedicatedView$
- ).pipe(
- filter(([_,dedicatedView])=>!isDefined(dedicatedView)),
- map(([regions,_])=>regions)
+ this.hideSegmentations$,
+ this.ngLayers$.pipe(
+ map(state => state.forceShowSegment)
+ )
)
- .subscribe(regions=>{
+ .subscribe(([regions,hideSegmentFlag,forceShowSegment])=>{
if(!this.nehubaViewer) return
+
+ if( forceShowSegment === false || (forceShowSegment === null && hideSegmentFlag) ){
+ this.nehubaViewer.hideAllSeg()
+ return
+ }
+
this.selectedRegionIndexSet = new Set(regions.map(r=>Number(r.labelIndex)))
this.selectedRegionIndexSet.size > 0 ?
this.nehubaViewer.showSegs([...this.selectedRegionIndexSet]) :
@@ -301,15 +311,11 @@ export class NehubaContainer implements OnInit, OnDestroy{
)
)
- this.subscriptions.push(
- this.dedicatedView$.subscribe((this.handleDedicatedView).bind(this))
- )
this.subscriptions.push(
this.ngLayers$.subscribe(ngLayersInterface => {
- if(!this.nehubaViewer)
- return
-
+ if(!this.nehubaViewer) return
+
const newLayers = ngLayersInterface.layers.filter(l => this.ngLayersRegister.layers.findIndex(ol => ol.name === l.name) < 0)
const removeLayers = this.ngLayersRegister.layers.filter(l => ngLayersInterface.layers.findIndex(nl => nl.name === l.name) < 0)
@@ -328,16 +334,6 @@ export class NehubaContainer implements OnInit, OnDestroy{
this.ngLayersRegister.layers = this.ngLayersRegister.layers.filter(rl => rl.name !== l.name)
})
}
-
- /* this is how visibility should work, but this also hides the mesh and perspective view */
- // ngLayersInterface.layers.forEach(l => typeof l.visible === 'undefined'
- // ? this.nehubaViewer.setLayerVisibility({ name : l.name}, true)
- // : this.nehubaViewer.setLayerVisibility({ name : l.name}, l.visible))
-
-
- ngLayersInterface.layers.findIndex(l => l.mixability === 'nonmixable') >= 0
- ? this.nehubaViewer.hideAllSeg()
- : this.nehubaViewer.showSegs([...this.selectedRegionIndexSet])
})
)
@@ -345,29 +341,18 @@ export class NehubaContainer implements OnInit, OnDestroy{
combineLatest(
this.navigationChanges$,
this.selectedRegions$,
- this.dedicatedView$
- ).subscribe(([navigation,regions,dedicatedView])=>{
+ ).subscribe(([navigation,regions])=>{
this.nehubaViewer.initNav =
Object.assign({},navigation,{
positionReal : true
})
this.nehubaViewer.initRegions = regions.map(re=>re.labelIndex)
- this.nehubaViewer.initDedicatedView = dedicatedView
-
- /* TODO abit hacky. test what happens when: select dedicated view, then change template... check ngLayerRegister */
- if(dedicatedView){
- this.ngLayersRegister.layers = this.ngLayersRegister.layers.concat(dedicatedView.map((layer, index) => ({
- name : `dedicatedview-${index}`,
- source : layer,
- visible : true,
- mixability : 'nonmixable',
- transform : null
- })))
- }
+
+ /* TODO what to do with init nfiti? */
})
this.subscriptions.push(
- this.navigationChanges$.subscribe(this.handleDispatchedNavigationChange.bind(this),console.warn)
+ this.navigationChanges$.subscribe(this.handleDispatchedNavigationChange.bind(this))
)
}
@@ -424,7 +409,7 @@ export class NehubaContainer implements OnInit, OnDestroy{
return
}
- /* for now */
+ /* TODO remove handle dedicated view. perhaps keep for backwards compatibility (?) */
return
if(dedicatedView.length === 0){