mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2026-10-27 02:27:18 +00:00
route - track conversion
This commit is contained in:
1 parent
b6c0f5190a
commit
764d0b233a
15 files changed
+268
-3
No files matched your search
@@ -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}
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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>;
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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...",
|
||||
|
||||
Reference in new issue
Block a user