diff --git a/README.md b/README.md
index d3cb5d21..83eda5fb 100644
--- a/README.md
+++ b/README.md
@@ -75,6 +75,7 @@ docker logs make-sense
| Zoom out | Editor | ⌥ + - | Ctrl + - |
| Move image | Editor | Up / Down / Left / Right | Up / Down / Left / Right |
| Select Label | Editor | ⌥ + 0-9 | Ctrl + 0-9 |
+| Show/Hide All Labels | Editor | h | h
| Exit popup | Popup | Escape | Escape |
**Table 1.** Supported keyboard shortcuts
diff --git a/src/logic/actions/ImageActions.ts b/src/logic/actions/ImageActions.ts
index bce4b7cd..84bc2393 100644
--- a/src/logic/actions/ImageActions.ts
+++ b/src/logic/actions/ImageActions.ts
@@ -17,6 +17,7 @@ import {
LabelRect,
} from "../../store/labels/types";
import { LabelStatus } from "../../data/enums/LabelStatus";
+import { LabelActions } from "./LabelActions";
import { remove } from "lodash";
export class ImageActions {
@@ -60,6 +61,13 @@ export class ImageActions {
store.dispatch(updateActiveLabelNameId(labelNames[1].id));
}
+ public static toggleAllLabelsVisibility(): void {
+ const imageData: ImageData = LabelsSelector.getActiveImageData();
+ const newToggleValue = imageData.allLabelsVisibilityToggle !== null ? !imageData.allLabelsVisibilityToggle : false;
+
+ LabelActions.setAllLabelsVisibility(imageData.id, newToggleValue);
+ }
+
private static mapNewImageData(
imageData: ImageData,
labelIndex: number
diff --git a/src/logic/actions/LabelActions.ts b/src/logic/actions/LabelActions.ts
index d47f2e7d..ead33a86 100644
--- a/src/logic/actions/LabelActions.ts
+++ b/src/logic/actions/LabelActions.ts
@@ -71,6 +71,28 @@ export class LabelActions {
store.dispatch(updateImageDataById(imageData.id, newImageData));
}
+ public static setAllLabelsVisibility(imageId: string, isVisible: boolean) {
+ const imageData: ImageData = LabelsSelector.getImageDataById(imageId);
+ const newImageData = {
+ ...imageData,
+ allLabelsVisibilityToggle: isVisible,
+ labelPoints: imageData.labelPoints.map((labelPoint: LabelPoint) => {
+ return LabelUtil.setAnnotationVisibility(labelPoint, isVisible)
+ }),
+ labelRects: imageData.labelRects.map((labelRect: LabelRect) => {
+ return LabelUtil.setAnnotationVisibility(labelRect, isVisible)
+ }),
+ labelPolygons: imageData.labelPolygons.map((labelPolygon: LabelPolygon) => {
+ return LabelUtil.setAnnotationVisibility(labelPolygon, isVisible)
+ }),
+ labelLines: imageData.labelLines.map((labelLine: LabelLine) => {
+ return LabelUtil.setAnnotationVisibility(labelLine, isVisible)
+ }),
+ };
+
+ store.dispatch(updateImageDataById(imageData.id, newImageData));
+ }
+
public static toggleLabelVisibilityById(imageId: string, labelId: string) {
const imageData: ImageData = LabelsSelector.getImageDataById(imageId);
const newImageData = {
diff --git a/src/logic/context/EditorContext.ts b/src/logic/context/EditorContext.ts
index 14ee56ae..f5e227da 100644
--- a/src/logic/context/EditorContext.ts
+++ b/src/logic/context/EditorContext.ts
@@ -167,6 +167,13 @@ export class EditorContext extends BaseContext {
ImageActions.setActiveLabelOnActiveImage(9);
EditorActions.fullRender();
}
- }
+ },
+ {
+ keyCombo: ["h"],
+ action: (event: KeyboardEvent) => {
+ ImageActions.toggleAllLabelsVisibility();
+ EditorActions.fullRender();
+ }
+ },
];
}
\ No newline at end of file
diff --git a/src/store/labels/types.ts b/src/store/labels/types.ts
index 38397f7e..2c597c4c 100644
--- a/src/store/labels/types.ts
+++ b/src/store/labels/types.ts
@@ -49,6 +49,8 @@ export type ImageData = {
labelPolygons: LabelPolygon[];
labelNameIds: string[];
+ allLabelsVisibilityToggle: boolean;
+
// YOLO
isVisitedByYOLOObjectDetector: boolean;
diff --git a/src/utils/LabelUtil.ts b/src/utils/LabelUtil.ts
index feec03d6..125f65ee 100644
--- a/src/utils/LabelUtil.ts
+++ b/src/utils/LabelUtil.ts
@@ -56,6 +56,13 @@ export class LabelUtil {
}
}
+ public static setAnnotationVisibility(annotation: AnnotationType, isVisible: boolean): AnnotationType {
+ return {
+ ...annotation,
+ isVisible
+ }
+ }
+
public static labelNamesIdsDiff(oldLabelNames: LabelName[], newLabelNames: LabelName[]): string[] {
return oldLabelNames.reduce((missingIds: string[], labelName: LabelName) => {
if (!find(newLabelNames, { 'id': labelName.id })) {