diff --git a/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts new file mode 100644 index 0000000000..2ce4987635 --- /dev/null +++ b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts @@ -0,0 +1,51 @@ +import { test } from '@playwright/test'; +import { + takeEditorScreenshot, + waitForPageInit, + openFileAndAddToCanvas, + selectSequenceLayoutModeTool, + zoomWithMouseWheel, + scrollDown, + selectRectangleArea, +} from '@utils'; +import { turnOnMacromoleculesEditor } from '@utils/macromolecules'; + +test.describe('Sequence Mode', () => { + test.beforeEach(async ({ page }) => { + await waitForPageInit(page); + await turnOnMacromoleculesEditor(page); + const ZOOM_OUT_VALUE = 400; + const SCROLL_DOWN_VALUE = 250; + + await openFileAndAddToCanvas('KET/monomers-chains.ket', page); + await selectSequenceLayoutModeTool(page); + await zoomWithMouseWheel(page, ZOOM_OUT_VALUE); + await scrollDown(page, SCROLL_DOWN_VALUE); + }); + + test('Select letters with rectangular selection tool', async ({ page }) => { + // Coordinates for rectangle selection + const startX = 100; + const startY = 100; + const endX = 500; + const endY = 500; + + await selectRectangleArea(page, startX, startY, endX, endY); + await takeEditorScreenshot(page); + }); + + test('Select letters with Shift+Lclick', async ({ page }) => { + await page.keyboard.down('Shift'); + await page.getByText('G').first().click(); + await page.getByText('T').first().click(); + await page.keyboard.up('Shift'); + await takeEditorScreenshot(page); + }); + + test('Select entire chain with Ctrl+Lclick', async ({ page }) => { + await page.keyboard.down('Control'); + await page.getByText('G').first().click(); + await page.keyboard.up('Control'); + await takeEditorScreenshot(page); + }); +}); diff --git a/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts-snapshots/Sequence-Mode-Select-entire-chain-with-Ctrl-Lclick-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts-snapshots/Sequence-Mode-Select-entire-chain-with-Ctrl-Lclick-1-chromium-linux.png new file mode 100644 index 0000000000..f53cc9d4f1 Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts-snapshots/Sequence-Mode-Select-entire-chain-with-Ctrl-Lclick-1-chromium-linux.png differ diff --git a/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts-snapshots/Sequence-Mode-Select-letters-with-Shift-Lclick-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts-snapshots/Sequence-Mode-Select-letters-with-Shift-Lclick-1-chromium-linux.png new file mode 100644 index 0000000000..dd5e958743 Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts-snapshots/Sequence-Mode-Select-letters-with-Shift-Lclick-1-chromium-linux.png differ diff --git a/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts-snapshots/Sequence-Mode-Select-letters-with-rectangular-selection-tool-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts-snapshots/Sequence-Mode-Select-letters-with-rectangular-selection-tool-1-chromium-linux.png new file mode 100644 index 0000000000..7268f09f35 Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-selection-for-view-mode.spec.ts-snapshots/Sequence-Mode-Select-letters-with-rectangular-selection-tool-1-chromium-linux.png differ diff --git a/packages/ketcher-core/src/application/editor/tools/SelectRectangle.ts b/packages/ketcher-core/src/application/editor/tools/SelectRectangle.ts index 745e1bb017..5fce7c802c 100644 --- a/packages/ketcher-core/src/application/editor/tools/SelectRectangle.ts +++ b/packages/ketcher-core/src/application/editor/tools/SelectRectangle.ts @@ -110,12 +110,21 @@ class SelectRectangle implements BaseTool { let modelChanges: Command; if (renderer instanceof BaseRenderer && !event.shiftKey && !event.ctrlKey) { this.moveStarted = true; - const drawingEntities = [renderer.drawingEntity].concat( - this.editor.drawingEntitiesManager.getExtraEntitiesForSequenceViewClick( - renderer.drawingEntity, - false, - ), - ); + if ( + renderer.drawingEntity.selected && + !(this.editor.mode instanceof SequenceMode) + ) { + return; + } + let drawingEntities = [renderer.drawingEntity]; + if (this.editor.mode instanceof SequenceMode) { + drawingEntities = [renderer.drawingEntity].concat( + this.editor.drawingEntitiesManager.getExtraEntitiesForSequenceViewClick( + renderer.drawingEntity, + false, + ), + ); + } modelChanges = this.editor.drawingEntitiesManager.selectDrawingEntities( drawingEntities, @@ -124,11 +133,14 @@ class SelectRectangle implements BaseTool { if (renderer.drawingEntity.selected) { return; } - const drawingEntities = [renderer.drawingEntity].concat( - this.editor.drawingEntitiesManager.getExtraEntitiesForSequenceViewClick( - renderer.drawingEntity, - ), - ); + let drawingEntities = [renderer.drawingEntity]; + if (this.editor.mode instanceof SequenceMode) { + drawingEntities = [renderer.drawingEntity].concat( + this.editor.drawingEntitiesManager.getExtraEntitiesForSequenceViewClick( + renderer.drawingEntity, + ), + ); + } modelChanges = this.editor.drawingEntitiesManager.addDrawingEntitiesToSelection( drawingEntities, diff --git a/packages/ketcher-core/src/application/render/renderers/sequence/BaseSequenceRenderer.ts b/packages/ketcher-core/src/application/render/renderers/sequence/BaseSequenceRenderer.ts index b2a490e96b..016b700c6e 100644 --- a/packages/ketcher-core/src/application/render/renderers/sequence/BaseSequenceRenderer.ts +++ b/packages/ketcher-core/src/application/render/renderers/sequence/BaseSequenceRenderer.ts @@ -1,6 +1,6 @@ import { BaseRenderer } from 'application/render/renderers/internal'; import { D3SvgElementSelection } from 'application/render/types'; -import { Vec2 } from 'domain/entities'; +import { Vec2 } from 'domain/entities/vec2'; export class BaseSequenceRenderer extends BaseRenderer { protected appendHover(