create new file

This commit is contained in:
vcoppe
2024-04-27 12:18:40 +02:00
parent 0eb9c7b57e
commit ccc26f79e7
7 changed files with 67 additions and 20 deletions

View File

@@ -14,7 +14,8 @@
removeSelectedFiles,
triggerFileInput,
selectFiles,
settings
settings,
createFile
} from '$lib/stores';
import { mode, resetMode, setMode } from 'mode-watcher';
@@ -51,7 +52,7 @@
<Menubar.Menu>
<Menubar.Trigger>{$_('menu.file')}</Menubar.Trigger>
<Menubar.Content class="border-none">
<Menubar.Item>
<Menubar.Item on:click={createFile}>
<Plus size="16" class="mr-1" />
{$_('menu.new')}
<Menubar.Shortcut>⌘N</Menubar.Shortcut>
@@ -183,7 +184,10 @@
<svelte:window
on:keydown={(e) => {
e.stopImmediatePropagation();
if (e.key === 'o' && (e.metaKey || e.ctrlKey)) {
if (e.key === 'n' && (e.metaKey || e.ctrlKey)) {
createFile();
e.preventDefault();
} else if (e.key === 'o' && (e.metaKey || e.ctrlKey)) {
triggerFileInput();
e.preventDefault();
} else if (e.key === 'd' && (e.metaKey || e.ctrlKey)) {

View File

@@ -339,6 +339,13 @@ export class RoutingControls {
this.createMarker(newAnchor);
segment._data.anchors.push(newAnchor);
if (!lastAnchor) {
applyToFileElement(this.file, segment, (segment) => {
segment.replace(0, 0, [newPoint]);
}, true);
return;
}
let success = await this.routeBetweenAnchors([lastAnchor, newAnchor], [lastAnchor.point.getCoordinates(), newAnchor.point.getCoordinates()]);
if (!success) { // Route failed, remove the anchor

View File

@@ -25,6 +25,14 @@ export function computeAnchorPoints(segment: TrackSegment) {
}
export function ramerDouglasPeucker(points: TrackPoint[], epsilon: number = 50, start: number = 0, end: number = points.length - 1): SimplifiedTrackPoint[] {
if (points.length == 0) {
return [];
} else if (points.length == 1) {
return [{
point: points[0]
}];
}
let simplified = [{
point: points[start]
}];

View File

@@ -2,6 +2,8 @@ import { writable, get, type Writable } from 'svelte/store';
import mapboxgl from 'mapbox-gl';
import { GPXFile, buildGPX, parseGPX, type AnyGPXTreeElement } from 'gpx';
import { tick } from 'svelte';
import { _ } from 'svelte-i18n';
export const map = writable<mapboxgl.Map | null>(null);
export const files = writable<Writable<GPXFile>[]>([]);
@@ -72,6 +74,15 @@ export function addFile(file: GPXFile): Writable<GPXFile> {
return fileStore;
}
export function createFile(): Writable<GPXFile> {
let file = new GPXFile();
file.metadata.name = get(_)("menu.new_filename");
let fileStore = addFile(file);
tick().then(() => get(selectFiles).select(file));
currentTool.set(Tool.ROUTING);
return fileStore;
}
export function triggerFileInput() {
const input = document.createElement('input');
input.type = 'file';

View File

@@ -2,6 +2,7 @@
"menu": {
"file": "File",
"new": "New",
"new_filename": "new",
"load_desktop": "Load from desktop...",
"load_drive": "Load from Google Drive...",
"duplicate": "Duplicate",