diff --git a/common/helpOnePager.md b/common/helpOnePager.md index 35b4ff7191af002402aa57c576dae3e2f2c14cb6..f23b9a498e529d2cfc65b5856c0b313142f29448 100644 --- a/common/helpOnePager.md +++ b/common/helpOnePager.md @@ -10,7 +10,7 @@ | Zoom | `[hover]` on any slice views, `[click]` magnifier | | Next slice | `<ctrl>` + `[mousewheel]` | | Next 10 slice | `<ctrl>` + `<shift>` + `[mousewheel]` | -| Toggle delineation | | +| Toggle delineation | `[q]` | --- diff --git a/docs/releases/v2.3.8.md b/docs/releases/v2.3.8.md new file mode 100644 index 0000000000000000000000000000000000000000..9a10601b60180d727fc0e1b0fa9e91314df882c4 --- /dev/null +++ b/docs/releases/v2.3.8.md @@ -0,0 +1,5 @@ +# v2.3.8 + +## New Features + +- Adding control allowing delineation control \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index da2897aeac570dd355375736e1e8cf9e7e54ebe6..089276c5fcdbc8e0f4974dcc15cf73715e568fb5 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -40,6 +40,7 @@ pages: - Fetching datasets: 'advanced/datasets.md' - Display non-atlas volumes: 'advanced/otherVolumes.md' - Release notes: + - v2.3.8: 'releases/v2.3.8.md' - v2.3.7: 'releases/v2.3.7.md' - v2.3.6: 'releases/v2.3.6.md' - v2.3.5: 'releases/v2.3.5.md' diff --git a/src/ui/nehubaContainer/nehubaContainer.template.html b/src/ui/nehubaContainer/nehubaContainer.template.html index b08904a09ce57f37dfaed22204fba0da53d86d38..1ce4f539812f6d98d113b561380f8fd5a34cccc6 100644 --- a/src/ui/nehubaContainer/nehubaContainer.template.html +++ b/src/ui/nehubaContainer/nehubaContainer.template.html @@ -700,6 +700,20 @@ <!-- perspective specific control --> <ng-container *ngIf="panelIndex === 3"> + <!-- viewer ctrl --> + <mat-menu #viewerCtrlMenu> + <!-- NB must not lazy load. key listener needs to work even when component is not yet rendered --> + <viewer-ctrl-component class="d-block m-2" + [iav-key-listener]="[{ type: 'keydown', key: 'q', target: 'document', capture: true }]" + (iav-key-event)="viewerCtrlCmp.toggleParcVsbl()" + #viewerCtrlCmp="viewerCtrlCmp"> + </viewer-ctrl-component> + </mat-menu> + <button mat-icon-button color="primary" + [matMenuTriggerFor]="viewerCtrlMenu"> + <i class="fas fa-cog"></i> + </button> + <ng-container *ngTemplateOutlet="perspectiveOctantRemovalTmpl; context: { state: (nehubaViewerPerspectiveOctantRemoval$ | async), disableOctantRemoval: disableOctantRemoval$ | async diff --git a/src/ui/ui.module.ts b/src/ui/ui.module.ts index 0c116696a290cd9e622c8f18d6ec4ce740ce429c..5697352780b207f09e5d157a482735daae5b1ed6 100644 --- a/src/ui/ui.module.ts +++ b/src/ui/ui.module.ts @@ -85,6 +85,7 @@ import { RegionAccordionTooltipTextPipe } from './util' import { HelpOnePager } from "./helpOnePager/helpOnePager.component"; import { RegionalFeaturesModule } from "./regionalFeatures"; import { Landmark2DModule } from "./nehubaContainer/2dLandmarks/module"; +import { ViewerCtrlModule } from "src/viewerCtrl"; @NgModule({ imports : [ @@ -105,6 +106,7 @@ import { Landmark2DModule } from "./nehubaContainer/2dLandmarks/module"; FabSpeedDialModule, RegionalFeaturesModule, Landmark2DModule, + ViewerCtrlModule, ], declarations : [ NehubaContainer, diff --git a/src/viewerCtrl/index.ts b/src/viewerCtrl/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..32598a8ce9159499453bb4e35ae719bb7448e983 --- /dev/null +++ b/src/viewerCtrl/index.ts @@ -0,0 +1 @@ +export { ViewerCtrlModule } from './module' \ No newline at end of file diff --git a/src/viewerCtrl/module.ts b/src/viewerCtrl/module.ts new file mode 100644 index 0000000000000000000000000000000000000000..dd1a100beeba314400417dc5ac19670bf090bde4 --- /dev/null +++ b/src/viewerCtrl/module.ts @@ -0,0 +1,21 @@ +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; +import { AngularMaterialModule } from "src/ui/sharedModules/angularMaterial.module"; +import { ViewerCtrlCmp } from "./viewerCtrlCmp/viewerCtrlCmp.component"; + +// Migrate to viewer specific submodule when merged to dev + +@NgModule({ + imports: [ + CommonModule, + AngularMaterialModule, + ], + declarations: [ + ViewerCtrlCmp, + ], + exports: [ + ViewerCtrlCmp + ] +}) + +export class ViewerCtrlModule{} \ No newline at end of file diff --git a/src/viewerCtrl/viewerCtrlCmp/viewerCtrlCmp.component.ts b/src/viewerCtrl/viewerCtrlCmp/viewerCtrlCmp.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..93e6f3def9078f23195e9bea73dac0165214c17f --- /dev/null +++ b/src/viewerCtrl/viewerCtrlCmp/viewerCtrlCmp.component.ts @@ -0,0 +1,65 @@ +import { Component, HostBinding } from "@angular/core"; +import { select, Store } from "@ngrx/store"; +import { Subscription } from "rxjs"; +import { viewerStateSelectedTemplatePureSelector } from "src/services/state/viewerState/selectors"; + + +@Component({ + selector: 'viewer-ctrl-component', + templateUrl: './viewerCtrlCmp.template.html', + styleUrls: [ + './viewerCtrlCmp.style.css' + ], + exportAs: 'viewerCtrlCmp' +}) + +export class ViewerCtrlCmp{ + + @HostBinding('attr.darktheme') + darktheme = false + + private sub: Subscription[] = [] + private hiddenLayerNames: string[] = [] + + constructor( + private store$: Store<any> + ){ + + this.sub.push( + this.store$.pipe( + select(viewerStateSelectedTemplatePureSelector) + ).subscribe(tmpl => { + const { useTheme } = tmpl || {} + this.darktheme = useTheme === 'dark' + }) + ) + + } + + public toggleParcVsbl(){ + const visibleParcLayers = ((window as any).viewer.layerManager.managedLayers) + .slice(1) + .filter(({ visible }) => visible) + + const allParcHidden = visibleParcLayers.length === 0 + + if (allParcHidden) { + for (const name of this.hiddenLayerNames) { + const l = (window as any).viewer.layerManager.getLayerByName(name) + l && l.setVisible(true) + } + this.hiddenLayerNames = [] + } else { + this.hiddenLayerNames = [] + for (const { name } of visibleParcLayers) { + const l = (window as any).viewer.layerManager.getLayerByName(name) + l && l.setVisible(false) + this.hiddenLayerNames.push( name ) + } + } + + setTimeout(() => { + (window as any).viewer.display.scheduleRedraw() + }) + } +} \ No newline at end of file diff --git a/src/viewerCtrl/viewerCtrlCmp/viewerCtrlCmp.style.css b/src/viewerCtrl/viewerCtrlCmp/viewerCtrlCmp.style.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/viewerCtrl/viewerCtrlCmp/viewerCtrlCmp.template.html b/src/viewerCtrl/viewerCtrlCmp/viewerCtrlCmp.template.html new file mode 100644 index 0000000000000000000000000000000000000000..2ba8e30622edf364319af102febfd0fe26d6d30c --- /dev/null +++ b/src/viewerCtrl/viewerCtrlCmp/viewerCtrlCmp.template.html @@ -0,0 +1,14 @@ +<h3 class="iv-custom-comp text mat-title"> + Parcellations +</h3> + +<mat-divider></mat-divider> + +<button mat-flat-button color="warn" + class="mt-2" + (click)="toggleParcVsbl()"> + <i class="fas fa-eye-slash"></i> + <span> + Clear All + </span> +</button> \ No newline at end of file