feat: Add new system for multi-selections.
This commit is contained in:
@@ -20,6 +20,7 @@ pub enum Mode {
|
||||
#[default]
|
||||
Insert,
|
||||
Normal,
|
||||
Visual,
|
||||
}
|
||||
|
||||
/// A command the menu should process. Frontends and headless
|
||||
@@ -37,6 +38,12 @@ pub enum Action {
|
||||
HalfPageUp(usize),
|
||||
HalfPageDown(usize),
|
||||
SetMode(Mode),
|
||||
ToggleSelect,
|
||||
SelectRange { start: usize, end: usize },
|
||||
ClearSelections,
|
||||
SelectAll,
|
||||
UndoSelection,
|
||||
RedoSelection,
|
||||
Confirm,
|
||||
Quicklist,
|
||||
Cancel,
|
||||
@@ -53,7 +60,7 @@ pub enum Action {
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum MenuEvent {
|
||||
StateChanged(ViewState),
|
||||
Selected(Value),
|
||||
Selected(Vec<(Value, usize)>),
|
||||
Quicklist(Vec<Value>),
|
||||
Cancelled,
|
||||
}
|
||||
@@ -72,6 +79,8 @@ pub struct ViewState {
|
||||
pub total_items: usize,
|
||||
pub total_filtered: usize,
|
||||
pub mode: Mode,
|
||||
pub selection_count: usize,
|
||||
pub multi_enabled: bool,
|
||||
/// Monotonically increasing counter. Each call to
|
||||
/// `build_view_state()` bumps this, so frontends can
|
||||
/// detect duplicate broadcasts and skip redundant redraws.
|
||||
@@ -87,6 +96,7 @@ pub struct VisibleItem {
|
||||
pub label: String,
|
||||
pub formatted_text: Option<String>,
|
||||
pub index: usize,
|
||||
pub selected: bool,
|
||||
}
|
||||
|
||||
/// Final outcome of [`crate::menu::MenuRunner::run`]. The
|
||||
@@ -94,7 +104,7 @@ pub struct VisibleItem {
|
||||
#[must_use]
|
||||
#[derive(Debug)]
|
||||
pub enum MenuResult {
|
||||
Selected { value: Value, index: usize },
|
||||
Selected { items: Vec<(Value, usize)> },
|
||||
Quicklist { items: Vec<(Value, usize)> },
|
||||
Cancelled,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user