mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-09-01 16:22:32 +00:00
rework file actions, closes #3
This commit is contained in:
@@ -10,7 +10,6 @@
|
|||||||
Undo2,
|
Undo2,
|
||||||
Redo2,
|
Redo2,
|
||||||
Trash2,
|
Trash2,
|
||||||
Upload,
|
|
||||||
Heart,
|
Heart,
|
||||||
Map,
|
Map,
|
||||||
Layers2,
|
Layers2,
|
||||||
@@ -38,7 +37,10 @@
|
|||||||
ClipboardCopy,
|
ClipboardCopy,
|
||||||
Scissors,
|
Scissors,
|
||||||
ClipboardPaste,
|
ClipboardPaste,
|
||||||
PaintBucket
|
PaintBucket,
|
||||||
|
FolderOpen,
|
||||||
|
FileStack,
|
||||||
|
FileX
|
||||||
} from 'lucide-svelte';
|
} from 'lucide-svelte';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -149,8 +151,8 @@
|
|||||||
</Menubar.Item>
|
</Menubar.Item>
|
||||||
<Menubar.Separator />
|
<Menubar.Separator />
|
||||||
<Menubar.Item on:click={triggerFileInput}>
|
<Menubar.Item on:click={triggerFileInput}>
|
||||||
<Upload size="16" class="mr-1" />
|
<FolderOpen size="16" class="mr-1" />
|
||||||
{$_('menu.load_desktop')}
|
{$_('menu.open')}
|
||||||
<Shortcut key="O" ctrl={true} />
|
<Shortcut key="O" ctrl={true} />
|
||||||
</Menubar.Item>
|
</Menubar.Item>
|
||||||
<Menubar.Separator />
|
<Menubar.Separator />
|
||||||
@@ -160,6 +162,17 @@
|
|||||||
<Shortcut key="D" ctrl={true} />
|
<Shortcut key="D" ctrl={true} />
|
||||||
</Menubar.Item>
|
</Menubar.Item>
|
||||||
<Menubar.Separator />
|
<Menubar.Separator />
|
||||||
|
<Menubar.Item on:click={dbUtils.deleteSelectedFiles} disabled={$selection.size == 0}>
|
||||||
|
<FileX size="16" class="mr-1" />
|
||||||
|
{$_('menu.close')}
|
||||||
|
<Shortcut key="⌫" ctrl={true} />
|
||||||
|
</Menubar.Item>
|
||||||
|
<Menubar.Item on:click={dbUtils.deleteAllFiles} disabled={$fileObservers.size == 0}>
|
||||||
|
<FileX size="16" class="mr-1" />
|
||||||
|
{$_('menu.close_all')}
|
||||||
|
<Shortcut key="⌫" ctrl={true} shift={true} />
|
||||||
|
</Menubar.Item>
|
||||||
|
<Menubar.Separator />
|
||||||
<Menubar.Item
|
<Menubar.Item
|
||||||
on:click={() => ($exportState = ExportState.SELECTION)}
|
on:click={() => ($exportState = ExportState.SELECTION)}
|
||||||
disabled={$selection.size == 0}
|
disabled={$selection.size == 0}
|
||||||
@@ -236,7 +249,7 @@
|
|||||||
</Menubar.Item>
|
</Menubar.Item>
|
||||||
<Menubar.Separator />
|
<Menubar.Separator />
|
||||||
<Menubar.Item on:click={selectAll}>
|
<Menubar.Item on:click={selectAll}>
|
||||||
<span class="w-4 mr-1"></span>
|
<FileStack size="16" class="mr-1" />
|
||||||
{$_('menu.select_all')}
|
{$_('menu.select_all')}
|
||||||
<Shortcut key="A" ctrl={true} />
|
<Shortcut key="A" ctrl={true} />
|
||||||
</Menubar.Item>
|
</Menubar.Item>
|
||||||
@@ -270,15 +283,6 @@
|
|||||||
{$_('menu.delete')}
|
{$_('menu.delete')}
|
||||||
<Shortcut key="⌫" ctrl={true} />
|
<Shortcut key="⌫" ctrl={true} />
|
||||||
</Menubar.Item>
|
</Menubar.Item>
|
||||||
<Menubar.Item
|
|
||||||
class="text-destructive data-[highlighted]:text-destructive"
|
|
||||||
on:click={dbUtils.deleteAllFiles}
|
|
||||||
disabled={$fileObservers.size == 0}
|
|
||||||
>
|
|
||||||
<Trash2 size="16" class="mr-1" />
|
|
||||||
{$_('menu.delete_all')}
|
|
||||||
<Shortcut key="⌫" ctrl={true} shift={true} />
|
|
||||||
</Menubar.Item>
|
|
||||||
</Menubar.Content>
|
</Menubar.Content>
|
||||||
</Menubar.Menu>
|
</Menubar.Menu>
|
||||||
<Menubar.Menu>
|
<Menubar.Menu>
|
||||||
@@ -459,7 +463,6 @@
|
|||||||
|
|
||||||
<svelte:window
|
<svelte:window
|
||||||
on:keydown={(e) => {
|
on:keydown={(e) => {
|
||||||
console.log(e);
|
|
||||||
let targetInput =
|
let targetInput =
|
||||||
e.target.tagName === 'INPUT' ||
|
e.target.tagName === 'INPUT' ||
|
||||||
e.target.tagName === 'TEXTAREA' ||
|
e.target.tagName === 'TEXTAREA' ||
|
||||||
|
@@ -15,7 +15,9 @@
|
|||||||
EyeOff,
|
EyeOff,
|
||||||
ClipboardCopy,
|
ClipboardCopy,
|
||||||
ClipboardPaste,
|
ClipboardPaste,
|
||||||
Scissors
|
Scissors,
|
||||||
|
FileStack,
|
||||||
|
FileX
|
||||||
} from 'lucide-svelte';
|
} from 'lucide-svelte';
|
||||||
import {
|
import {
|
||||||
ListFileItem,
|
ListFileItem,
|
||||||
@@ -30,6 +32,7 @@
|
|||||||
copySelection,
|
copySelection,
|
||||||
cutSelection,
|
cutSelection,
|
||||||
pasteSelection,
|
pasteSelection,
|
||||||
|
selectAll,
|
||||||
selectItem,
|
selectItem,
|
||||||
selection
|
selection
|
||||||
} from './Selection';
|
} from './Selection';
|
||||||
@@ -261,6 +264,14 @@
|
|||||||
<ContextMenu.Separator />
|
<ContextMenu.Separator />
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if item.level !== ListLevel.WAYPOINTS}
|
||||||
|
<ContextMenu.Item on:click={selectAll}>
|
||||||
|
<FileStack size="16" class="mr-1" />
|
||||||
|
{$_('menu.select_all')}
|
||||||
|
<Shortcut key="A" ctrl={true} />
|
||||||
|
</ContextMenu.Item>
|
||||||
|
<ContextMenu.Separator />
|
||||||
|
{/if}
|
||||||
{#if $verticalFileView}
|
{#if $verticalFileView}
|
||||||
<ContextMenu.Item on:click={dbUtils.duplicateSelection}>
|
<ContextMenu.Item on:click={dbUtils.duplicateSelection}>
|
||||||
<Copy size="16" class="mr-1" />
|
<Copy size="16" class="mr-1" />
|
||||||
@@ -292,8 +303,13 @@
|
|||||||
<ContextMenu.Separator />
|
<ContextMenu.Separator />
|
||||||
{/if}
|
{/if}
|
||||||
<ContextMenu.Item on:click={dbUtils.deleteSelection}>
|
<ContextMenu.Item on:click={dbUtils.deleteSelection}>
|
||||||
<Trash2 size="16" class="mr-1" />
|
{#if item instanceof ListFileItem}
|
||||||
{$_('menu.delete')}
|
<FileX size="16" class="mr-1" />
|
||||||
|
{$_('menu.close')}
|
||||||
|
{:else}
|
||||||
|
<Trash2 size="16" class="mr-1" />
|
||||||
|
{$_('menu.delete')}
|
||||||
|
{/if}
|
||||||
<Shortcut key="⌫" ctrl={true} />
|
<Shortcut key="⌫" ctrl={true} />
|
||||||
</ContextMenu.Item>
|
</ContextMenu.Item>
|
||||||
</ContextMenu.Content>
|
</ContextMenu.Content>
|
||||||
|
@@ -908,6 +908,16 @@ export const dbUtils = {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
deleteSelectedFiles: () => {
|
||||||
|
if (get(selection).size === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
applyGlobal((draft) => {
|
||||||
|
applyToOrderedSelectedItemsFromFile((fileId, level, items) => {
|
||||||
|
draft.delete(fileId);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
deleteAllFiles: () => {
|
deleteAllFiles: () => {
|
||||||
applyGlobal((draft) => {
|
applyGlobal((draft) => {
|
||||||
draft.clear();
|
draft.clear();
|
||||||
|
@@ -9,8 +9,10 @@
|
|||||||
"new_file": "New file",
|
"new_file": "New file",
|
||||||
"new_track": "New track",
|
"new_track": "New track",
|
||||||
"new_segment": "New segment",
|
"new_segment": "New segment",
|
||||||
"load_desktop": "Load...",
|
"open": "Open...",
|
||||||
"duplicate": "Duplicate",
|
"duplicate": "Duplicate",
|
||||||
|
"close": "Close",
|
||||||
|
"close_all": "Close all",
|
||||||
"copy": "Copy",
|
"copy": "Copy",
|
||||||
"paste": "Paste",
|
"paste": "Paste",
|
||||||
"cut": "Cut",
|
"cut": "Cut",
|
||||||
@@ -24,7 +26,6 @@
|
|||||||
"undo": "Undo",
|
"undo": "Undo",
|
||||||
"redo": "Redo",
|
"redo": "Redo",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"delete_all": "Delete all",
|
|
||||||
"select_all": "Select all",
|
"select_all": "Select all",
|
||||||
"view": "View",
|
"view": "View",
|
||||||
"elevation_profile": "Elevation profile",
|
"elevation_profile": "Elevation profile",
|
||||||
|
Reference in New Issue
Block a user