feat(app): add tile_cat_idx and buffers to App state
Add tile_cat_idx field to track selected tile category index. Add buffers HashMap for named text buffers used in text-entry modes. Update AppMode::TileSelect to remove nested cat_idx struct. Update cmd_context to accept key and modifiers parameters. Update cmd_context to populate new fields from App state. Co-Authored-By: fiddlerwoaroof/git-smart-commit (unsloth/Qwen3.5-35B-A3B-GGUF:Q5_K_M)
This commit is contained in:
@ -1,17 +1,18 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use crossterm::event::{KeyCode, KeyEvent};
|
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
use crate::command::cmd::{Cmd, CmdContext};
|
use crate::command::cmd::CmdContext;
|
||||||
use crate::command::keymap::{Keymap, KeymapSet};
|
use crate::command::keymap::{Keymap, KeymapSet};
|
||||||
use crate::command::{self, Command};
|
use crate::command::{self, Command};
|
||||||
use crate::import::wizard::{ImportWizard, WizardStep};
|
use crate::import::wizard::{ImportWizard, WizardStep};
|
||||||
use crate::model::cell::{CellKey, CellValue};
|
use crate::model::cell::{CellKey, CellValue};
|
||||||
use crate::model::Model;
|
use crate::model::Model;
|
||||||
use crate::persistence;
|
use crate::persistence;
|
||||||
use crate::view::{Axis, GridLayout};
|
use crate::view::GridLayout;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub enum AppMode {
|
pub enum AppMode {
|
||||||
@ -34,9 +35,7 @@ pub enum AppMode {
|
|||||||
buffer: String,
|
buffer: String,
|
||||||
},
|
},
|
||||||
ViewPanel,
|
ViewPanel,
|
||||||
TileSelect {
|
TileSelect,
|
||||||
cat_idx: usize,
|
|
||||||
},
|
|
||||||
ImportWizard,
|
ImportWizard,
|
||||||
ExportPrompt {
|
ExportPrompt {
|
||||||
buffer: String,
|
buffer: String,
|
||||||
@ -67,6 +66,10 @@ pub struct App {
|
|||||||
pub dirty: bool,
|
pub dirty: bool,
|
||||||
/// Yanked cell value for `p` paste
|
/// Yanked cell value for `p` paste
|
||||||
pub yanked: Option<CellValue>,
|
pub yanked: Option<CellValue>,
|
||||||
|
/// Tile select cursor (which category index is highlighted)
|
||||||
|
pub tile_cat_idx: usize,
|
||||||
|
/// Named text buffers for text-entry modes
|
||||||
|
pub buffers: HashMap<String, String>,
|
||||||
/// Transient keymap for Emacs-style prefix key sequences (g→gg, y→yy, etc.)
|
/// Transient keymap for Emacs-style prefix key sequences (g→gg, y→yy, etc.)
|
||||||
pub transient_keymap: Option<Arc<Keymap>>,
|
pub transient_keymap: Option<Arc<Keymap>>,
|
||||||
keymap_set: KeymapSet,
|
keymap_set: KeymapSet,
|
||||||
@ -91,12 +94,14 @@ impl App {
|
|||||||
formula_cursor: 0,
|
formula_cursor: 0,
|
||||||
dirty: false,
|
dirty: false,
|
||||||
yanked: None,
|
yanked: None,
|
||||||
|
tile_cat_idx: 0,
|
||||||
|
buffers: HashMap::new(),
|
||||||
transient_keymap: None,
|
transient_keymap: None,
|
||||||
keymap_set: KeymapSet::default_keymaps(),
|
keymap_set: KeymapSet::default_keymaps(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn cmd_context(&self) -> CmdContext {
|
fn cmd_context(&self, key: KeyCode, mods: KeyModifiers) -> CmdContext<'_> {
|
||||||
let view = self.model.active_view();
|
let view = self.model.active_view();
|
||||||
CmdContext {
|
CmdContext {
|
||||||
model: &self.model,
|
model: &self.model,
|
||||||
@ -108,9 +113,17 @@ impl App {
|
|||||||
yanked: &self.yanked,
|
yanked: &self.yanked,
|
||||||
dirty: self.dirty,
|
dirty: self.dirty,
|
||||||
file_path_set: self.file_path.is_some(),
|
file_path_set: self.file_path.is_some(),
|
||||||
|
search_mode: self.search_mode,
|
||||||
formula_panel_open: self.formula_panel_open,
|
formula_panel_open: self.formula_panel_open,
|
||||||
category_panel_open: self.category_panel_open,
|
category_panel_open: self.category_panel_open,
|
||||||
view_panel_open: self.view_panel_open,
|
view_panel_open: self.view_panel_open,
|
||||||
|
buffers: &self.buffers,
|
||||||
|
formula_cursor: self.formula_cursor,
|
||||||
|
cat_panel_cursor: self.cat_panel_cursor,
|
||||||
|
view_panel_cursor: self.view_panel_cursor,
|
||||||
|
tile_cat_idx: self.tile_cat_idx,
|
||||||
|
key_code: key,
|
||||||
|
key_modifiers: mods,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1098,7 +1111,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn run_cmd(app: &mut App, cmd: &dyn crate::command::cmd::Cmd) {
|
fn run_cmd(app: &mut App, cmd: &dyn crate::command::cmd::Cmd) {
|
||||||
let ctx = app.cmd_context();
|
let ctx = app.cmd_context(KeyCode::Null, KeyModifiers::NONE);
|
||||||
let effects = cmd.execute(&ctx);
|
let effects = cmd.execute(&ctx);
|
||||||
drop(ctx);
|
drop(ctx);
|
||||||
app.apply_effects(effects);
|
app.apply_effects(effects);
|
||||||
|
|||||||
Reference in New Issue
Block a user