diff --git a/packages/tools/src/chooseTopTables.ts b/packages/tools/src/diagramTools.ts similarity index 93% rename from packages/tools/src/chooseTopTables.ts rename to packages/tools/src/diagramTools.ts index cedcd8e41..5f8d0606d 100644 --- a/packages/tools/src/chooseTopTables.ts +++ b/packages/tools/src/diagramTools.ts @@ -39,3 +39,5 @@ export function chooseTopTables(tables: TableInfo[], count: number) { return sorted.slice(0, count); } + +export const DIAGRAM_ZOOMS = [0.1, 0.15, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2]; diff --git a/packages/tools/src/index.ts b/packages/tools/src/index.ts index 35c01ef73..0369abc59 100644 --- a/packages/tools/src/index.ts +++ b/packages/tools/src/index.ts @@ -26,4 +26,4 @@ export * from './filterBehaviours'; export * from './schemaInfoTools'; export * from './dbKeysLoader'; export * from './rowProgressReporter'; -export * from './chooseTopTables'; +export * from './diagramTools'; diff --git a/packages/web/src/designer/Designer.svelte b/packages/web/src/designer/Designer.svelte index 3792681f5..369e12ac1 100644 --- a/packages/web/src/designer/Designer.svelte +++ b/packages/web/src/designer/Designer.svelte @@ -47,7 +47,7 @@ import { showModal } from '../modals/modalTools'; import ChooseColorModal from '../modals/ChooseColorModal.svelte'; import { currentThemeDefinition } from '../stores'; - import { chooseTopTables, extendDatabaseInfoFromApps } from 'dbgate-tools'; + import { chooseTopTables, DIAGRAM_ZOOMS, extendDatabaseInfoFromApps } from 'dbgate-tools'; import SearchInput from '../elements/SearchInput.svelte'; import CloseSearchButton from '../buttons/CloseSearchButton.svelte'; import DragColumnMemory from './DragColumnMemory.svelte'; @@ -821,56 +821,10 @@ }, { text: `Zoom - ${(value?.style?.zoomKoef || 1) * 100}%`, - submenu: [ - { - text: `10 %`, - onClick: changeStyleFunc('zoomKoef', '0.1'), - }, - { - text: `15 %`, - onClick: changeStyleFunc('zoomKoef', '0.15'), - }, - { - text: `20 %`, - onClick: changeStyleFunc('zoomKoef', '0.2'), - }, - { - text: `40 %`, - onClick: changeStyleFunc('zoomKoef', '0.4'), - }, - { - text: `60 %`, - onClick: changeStyleFunc('zoomKoef', '0.6'), - }, - { - text: `80 %`, - onClick: changeStyleFunc('zoomKoef', '0.8'), - }, - { - text: `100 %`, - onClick: changeStyleFunc('zoomKoef', '1'), - }, - { - text: `120 %`, - onClick: changeStyleFunc('zoomKoef', '1.2'), - }, - { - text: `140 %`, - onClick: changeStyleFunc('zoomKoef', '1.4'), - }, - { - text: `160 %`, - onClick: changeStyleFunc('zoomKoef', '1.6'), - }, - { - text: `180 %`, - onClick: changeStyleFunc('zoomKoef', '1.8'), - }, - { - text: `200 %`, - onClick: changeStyleFunc('zoomKoef', '2'), - }, - ], + submenu: DIAGRAM_ZOOMS.map(koef => ({ + text: `${koef * 100} %`, + onClick: changeStyleFunc('zoomKoef', koef.toString()), + })), }, ], ]; @@ -897,9 +851,43 @@ }); } } + + function handleWheel(event) { + if (event.ctrlKey) { + event.preventDefault(); + const zoomIndex = DIAGRAM_ZOOMS.findIndex(x => x == value?.style?.zoomKoef); + if (zoomIndex < 0) DIAGRAM_ZOOMS.findIndex(x => x == 1); + + let newZoomIndex = zoomIndex; + if (event.deltaY < 0) { + newZoomIndex += 1; + } + if (event.deltaY > 0) { + newZoomIndex -= 1; + } + if (newZoomIndex < 0) { + newZoomIndex = 0; + } + if (newZoomIndex >= DIAGRAM_ZOOMS.length) { + newZoomIndex = DIAGRAM_ZOOMS.length - 1; + } + const newZoomKoef = DIAGRAM_ZOOMS[newZoomIndex]; + + callChange( + current => ({ + ...current, + style: { + ...current?.style, + zoomKoef: newZoomKoef.toString(), + }, + }), + true + ); + } + } -
+
{#if !(tables?.length > 0)}
Drag & drop tables or views from left panel here
{/if} diff --git a/packages/web/src/designer/DiagramSettings.svelte b/packages/web/src/designer/DiagramSettings.svelte index 6dc9ace31..31fea663b 100644 --- a/packages/web/src/designer/DiagramSettings.svelte +++ b/packages/web/src/designer/DiagramSettings.svelte @@ -1,4 +1,5 @@