From 7c404c7e64c6315ba01c2ecafe3ac247b3e7a4f9 Mon Sep 17 00:00:00 2001 From: rhenck <richard.henck@iqb.hu-berlin.de> Date: Mon, 1 Aug 2022 15:41:29 +0200 Subject: [PATCH] [editor] Fix selection logic to only use one method ..instead of multiple methods doing almost the same stuff. --- .../canvas/overlays/canvas-element-overlay.ts | 19 ++++------ .../dynamic-canvas-overlay.component.ts | 37 +++++++++---------- .../static-canvas-overlay.component.ts | 4 +- 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/projects/editor/src/app/components/canvas/overlays/canvas-element-overlay.ts b/projects/editor/src/app/components/canvas/overlays/canvas-element-overlay.ts index 426b903ac..05252760e 100644 --- a/projects/editor/src/app/components/canvas/overlays/canvas-element-overlay.ts +++ b/projects/editor/src/app/components/canvas/overlays/canvas-element-overlay.ts @@ -62,19 +62,16 @@ export abstract class CanvasElementOverlay implements OnInit, OnDestroy { this.changeDetectorRef.detectChanges(); } - selectElement(multiSelect: boolean = false): void { - if (multiSelect) { - this.selectionService.selectElement({ elementComponent: this, multiSelect: true }); - } else { - this.selectionService.selectElement({ elementComponent: this, multiSelect: false }); - } - } - - elementClicked(event: MouseEvent): void { //TODO method name + selectElement(event?: MouseEvent): void { if (!this.isSelected) { - this.selectElement(event.shiftKey); + // this.selectElement(event.shiftKey); + if (event?.shiftKey) { + this.selectionService.selectElement({ elementComponent: this, multiSelect: true }); + } else { + this.selectionService.selectElement({ elementComponent: this, multiSelect: false }); + } } - event.stopPropagation(); + event?.stopPropagation(); this.elementSelected.emit(); } diff --git a/projects/editor/src/app/components/canvas/overlays/dynamic-canvas-overlay.component.ts b/projects/editor/src/app/components/canvas/overlays/dynamic-canvas-overlay.component.ts index 463674409..c0a9cb8d2 100644 --- a/projects/editor/src/app/components/canvas/overlays/dynamic-canvas-overlay.component.ts +++ b/projects/editor/src/app/components/canvas/overlays/dynamic-canvas-overlay.component.ts @@ -6,29 +6,29 @@ import { CanvasElementOverlay } from './canvas-element-overlay'; @Component({ selector: 'aspect-dynamic-canvas-overlay', template: ` - <!-- TabIndex is needed to make the div selectable and catch keyboard events (delete). --> - <!-- DragStart and DragEnd are part of a cursor hack to style the body. See global styling file. --> - <div #draggableElement class="draggable-element" - [class.fixed-size-content-wrapper]="element.position?.dynamicPositioning && + <!-- TabIndex is needed to make the div selectable and catch keyboard events (delete). --> + <!-- DragStart and DragEnd are part of a cursor hack to style the body. See global styling file. --> + <div #draggableElement class="draggable-element" + [class.fixed-size-content-wrapper]="element.position?.dynamicPositioning && element.position?.fixedSize" - [class.temporaryHighlight]="temporaryHighlight" - tabindex="-1" - cdkDrag [cdkDragData]="{dragType: 'move', element: element}" - (click)="elementClicked($event)" (dblclick)="openEditDialog()" - (cdkDragStarted)="moveDragStart()" - (cdkDragEnded)="moveDragEnd()" - [style.outline]="isSelected ? 'purple solid 1px' : ''" - [style.z-index]="isSelected ? 2 : 1"> - <div *cdkDragPlaceholder></div> - <div [class.fixed-size-content]="element.position?.dynamicPositioning && + [class.temporaryHighlight]="temporaryHighlight" + tabindex="-1" + cdkDrag [cdkDragData]="{dragType: 'move', element: element}" + (click)="selectElement($event)" (dblclick)="openEditDialog()" + (cdkDragStarted)="selectElement(); moveDragStart()" + (cdkDragEnded)="moveDragEnd()" + [style.outline]="isSelected ? 'purple solid 1px' : ''" + [style.z-index]="isSelected ? 2 : 1"> + <div *cdkDragPlaceholder></div> + <div [class.fixed-size-content]="element.position?.dynamicPositioning && element.position?.fixedSize" - [style.width]="element.position?.dynamicPositioning && element.position?.fixedSize ? + [style.width]="element.position?.dynamicPositioning && element.position?.fixedSize ? element.width + 'px' : '100%'" - [style.height]="element.position?.dynamicPositioning && element.position?.fixedSize ? + [style.height]="element.position?.dynamicPositioning && element.position?.fixedSize ? element.height + 'px' : '100%'"> - <ng-template #elementContainer></ng-template> - </div> + <ng-template #elementContainer></ng-template> </div> + </div> `, styles: [ '.draggable-element {width: 100%; height: 100%}', @@ -42,7 +42,6 @@ export class DynamicCanvasOverlayComponent extends CanvasElementOverlay { bodyElement: HTMLElement = document.body; moveDragStart(): void { - this.selectElement(); this.bodyElement.classList.add('inheritCursors'); this.bodyElement.style.cursor = 'move'; } diff --git a/projects/editor/src/app/components/canvas/overlays/static-canvas-overlay.component.ts b/projects/editor/src/app/components/canvas/overlays/static-canvas-overlay.component.ts index 3f1b302a7..cd2a2f70d 100644 --- a/projects/editor/src/app/components/canvas/overlays/static-canvas-overlay.component.ts +++ b/projects/editor/src/app/components/canvas/overlays/static-canvas-overlay.component.ts @@ -11,11 +11,11 @@ import { CanvasElementOverlay } from './canvas-element-overlay'; <!-- TabIndex is needed to make the div selectable and catch keyboard events (delete). --> <div class="draggable-element" [class.temporaryHighlight]="temporaryHighlight" - (click)="elementClicked($event)" + (click)="selectElement($event)" (dblclick)="openEditDialog()" (keyup.delete)="deleteSelectedElements()" tabindex="-1" cdkDrag [cdkDragData]="{dragType: 'move', element: element}" - (cdkDragStarted)="!isSelected && selectElement()" + (cdkDragStarted)="selectElement()" cdkDropList> <div *cdkDragPlaceholder></div> <!-- Needs extra div because styling can interfere with drag and drop--> -- GitLab