vastly improved selection system

This commit is contained in:
2026-01-28 02:29:17 +01:00
parent f4eafdf5b2
commit c6860105a6
13 changed files with 1507 additions and 437 deletions

View File

@@ -1,3 +1,5 @@
use std::ops::RangeInclusive;
use cagire_ratatui::Editor;
#[derive(Clone, Copy, PartialEq, Eq)]
@@ -50,14 +52,36 @@ pub struct EditorContext {
pub step: usize,
pub focus: Focus,
pub editor: Editor,
pub copied_step: Option<CopiedStep>,
pub selection_anchor: Option<usize>,
pub copied_steps: Option<CopiedSteps>,
}
#[derive(Clone, Copy)]
pub struct CopiedStep {
#[derive(Clone)]
pub struct CopiedSteps {
pub bank: usize,
pub pattern: usize,
pub step: usize,
pub steps: Vec<CopiedStepData>,
}
#[derive(Clone)]
pub struct CopiedStepData {
pub script: String,
pub active: bool,
pub source: Option<usize>,
pub original_index: usize,
}
impl EditorContext {
pub fn selection_range(&self) -> Option<RangeInclusive<usize>> {
let anchor = self.selection_anchor?;
let a = anchor.min(self.step);
let b = anchor.max(self.step);
Some(a..=b)
}
pub fn clear_selection(&mut self) {
self.selection_anchor = None;
}
}
impl Default for EditorContext {
@@ -68,7 +92,8 @@ impl Default for EditorContext {
step: 0,
focus: Focus::Sequencer,
editor: Editor::new(),
copied_step: None,
selection_anchor: None,
copied_steps: None,
}
}
}

View File

@@ -13,7 +13,7 @@ pub mod ui;
pub use audio::{AudioSettings, DeviceKind, EngineSection, Metrics, SettingKind};
pub use options::{OptionsFocus, OptionsState};
pub use editor::{CopiedStep, EditorContext, Focus, PatternField, PatternPropsField};
pub use editor::{CopiedStepData, CopiedSteps, EditorContext, Focus, PatternField, PatternPropsField};
pub use live_keys::LiveKeyState;
pub use modal::Modal;
pub use panel::{PanelFocus, PanelState, SidePanel};

View File

@@ -14,6 +14,12 @@ pub enum Modal {
step: usize,
selected: bool,
},
ConfirmDeleteSteps {
bank: usize,
pattern: usize,
steps: Vec<usize>,
selected: bool,
},
ConfirmResetPattern {
bank: usize,
pattern: usize,