mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2026-11-01 20:19:39 +00:00
46 lines
1.9 KiB
Rust
46 lines
1.9 KiB
Rust
use crate::{Command, FileId, SelectMode, Selection};
|
|||
|
|
|
||
|
|
/// Everything the frontend can ask the engine to do.
|
||
|
|
///
|
||
|
|
/// Only [`Action::Edit`] changes the files (and records an undo step); the others act on the
|
||
|
|
/// history, on the selection or on the file order.
|
||
|
|
#[derive(Debug)]
|
||
|
|
pub enum Action<'a> {
|
||
|
|
Edit(Command<'a>),
|
||
|
|
Undo,
|
||
|
|
Redo,
|
||
|
|
/// Selects files, tracks, segments or waypoints (or the waypoints node of one file),
|
||
|
|
/// ignoring what does not exist: a selection left with nothing is empty, which deselects
|
||
|
|
/// everything. See [`SelectMode`] for how it combines with the current selection.
|
||
|
|
Select {
|
||
|
|
selection: Selection,
|
||
|
|
mode: SelectMode,
|
||
|
|
},
|
||
|
|
/// Selects all the elements of the same kind as the selected ones, in the same place (see
|
||
|
|
/// [`Selection::all_at_level`]). Does nothing when there is nothing more to select.
|
||
|
|
SelectAll,
|
||
|
|
/// Moves the selection to the next (`down`) or previous element of the same kind, like the
|
||
|
|
/// arrow keys do in the file list (see [`Selection::neighbour`]). With `add`, the element is
|
||
|
|
/// added to the selection (shift + arrow), otherwise it replaces it.
|
||
|
|
ArrowSelect {
|
||
|
|
down: bool,
|
||
|
|
add: bool,
|
||
|
|
},
|
||
|
|
/// Puts the selected elements in the clipboard, to be pasted by [`crate::Paste`]. Does
|
||
|
|
/// nothing when nothing is selected.
|
||
|
|
Copy,
|
||
|
|
/// Like `Copy`, but the elements are moved instead of copied when they are pasted.
|
||
|
|
Cut,
|
||
|
|
/// Moves the files to `index` among the other files, in the given order. Not undoable.
|
||
|
|
Reorder {
|
||
|
|
file_ids: Vec<FileId>,
|
||
|
|
index: usize,
|
||
|
|
},
|
||
|
|
/// Names a file in all the states of the history, as if it had always been called so (see
|
||
|
|
/// [`crate::History::rename`]). Not undoable: for a file that is given a name from the outside,
|
||
|
|
/// like the name of the file it is written to.
|
||
|
|
Rename {
|
||
|
|
file_id: FileId,
|
||
|
|
name: String,
|
||
|
|
},
|
||
|
|
}
|