route - track conversion

This commit is contained in:
vcoppe committed 2026-10-26 19:06:19 +01:00
1 parent b6c0f5190a
commit 764d0b233a
15 files changed
+268 -3

No files matched your search

+14
View File
@@ -48,6 +48,7 @@
Maximize2,
Minimize2,
FolderX,
ArrowRightLeft,
} from '@lucide/svelte';
import { map } from '$lib/components/map/map';
import { editMetadata } from '$lib/components/file-list/metadata/utils.svelte';
@@ -327,6 +328,19 @@
{i18n._('menu.new_segment')}
</Menubar.Item>
{/if}
{#if $selection.type === 'route' || $selection.type === 'track' || $selection.type === 'segment'}
{#if $selection.type !== 'track'}
<Menubar.Separator />
{/if}
<Menubar.Item onclick={() => engine.convert()}>
<ArrowRightLeft size="16" />
{i18n._(
$selection.type === 'route'
? 'menu.convert_to_track'
: 'menu.convert_to_route'
)}
</Menubar.Item>
{/if}
{/if}
<Menubar.Separator />
<Menubar.Item onclick={() => engine.selectAll()} disabled={noFiles}>
@@ -19,6 +19,7 @@
FileStack,
FileX,
Route,
ArrowRightLeft,
} from '@lucide/svelte';
import { getContext, untrack } from 'svelte';
import { i18n } from '$lib/i18n/i18n.svelte';
@@ -289,6 +290,14 @@
<Plus size="16" />
{i18n._('menu.new_segment')}
</ContextMenu.Item>
{/if}
{#if isPath || node.type === 'segment'}
<ContextMenu.Item onclick={() => engine.convert()}>
<ArrowRightLeft size="16" />
{i18n._(
node.type === 'route' ? 'menu.convert_to_track' : 'menu.convert_to_route'
)}
</ContextMenu.Item>
<ContextMenu.Separator />
{/if}
{/if}
+1
View File
@@ -83,6 +83,7 @@ export async function createTauriBackend(): Promise<Backend> {
}),
metadata: (name, desc) => invoke('metadata', { name, desc }),
style: (color, opacity, width) => invoke('style', { color, opacity, width }),
convert: () => invoke('convert'),
new_route: () => invoke('new_route'),
new_track: () => invoke('new_track'),
new_track_segment: () => invoke('new_track_segment'),
+1
View File
@@ -174,6 +174,7 @@ export interface Backend {
move_elements(what: Selection, to: MoveTarget): Promise<Outcome>;
metadata(name: string, desc: string): Promise<Outcome>;
style(color?: string, opacity?: number, width?: number): Promise<Outcome>;
convert(): Promise<Outcome>;
new_route(): Promise<Outcome>;
new_track(): Promise<Outcome>;
new_track_segment(): Promise<Outcome>;
+1
View File
@@ -79,6 +79,7 @@ export async function createWasmBackend(): Promise<Backend> {
move_elements: lift(w.move_elements),
metadata: lift(w.metadata),
style: lift(w.style),
convert: lift(w.convert),
new_route: lift(w.new_route),
new_track: lift(w.new_track),
new_track_segment: lift(w.new_track_segment),
+8
View File
@@ -365,6 +365,14 @@ class Engine {
// Edits of the selection
/**
* Converts the selected routes to tracks, or the selected tracks or segments to routes (one
* per segment), which are selected. Resolves to `false` when there is nothing to convert.
*/
convert() {
return this.run((b) => b.convert());
}
/** Adds an empty route to the selected files. */
newRoute() {
return this.run((b) => b.new_route());
+2
View File
@@ -12,6 +12,8 @@
"new_file": "New file",
"new_track": "New track",
"new_route": "New route",
"convert_to_route": "Convert to route",
"convert_to_track": "Convert to track",
"new_segment": "New segment",
"open": "Open...",
"open_folder": "Open folder...",