refactor: update TogglePanelAndFocus to use open/focused flags

Update TogglePanelAndFocus and related components to use open/focused flags.

Changed TogglePanelAndFocus from currently_open to open+focused flags.
Parser accepts optional [open] [focused] arguments.

Interactive mode toggles between open+focus and closed/unfocused.

Keymap updates: F/C/V in panel modes close panels when focused.

Model initialization: Virtual categories _Index/_Dim default to None
axis, regular categories auto-assign Row/Column/Page.

App test context updated with visible_rows/visible_cols.

Co-Authored-By: fiddlerwoaroof/git-smart-commit (unsloth/Qwen3.5-35B-A3B-GGUF:Q5_K_M)
This commit is contained in:
Edward Langley
2026-04-06 15:09:58 -07:00
parent 121b7d2dd7
commit 9e02939b66
6 changed files with 89 additions and 37 deletions

View File

@ -576,25 +576,28 @@ impl Cmd for EnterSearchMode {
#[derive(Debug)]
pub struct TogglePanelAndFocus {
pub panel: Panel,
pub currently_open: bool,
pub open: bool,
pub focused: bool,
}
impl Cmd for TogglePanelAndFocus {
fn name(&self) -> &'static str {
"toggle-panel-and-focus"
}
fn execute(&self, _ctx: &CmdContext) -> Vec<Box<dyn Effect>> {
let new_open = !self.currently_open;
let mut effects: Vec<Box<dyn Effect>> = vec![Box::new(effect::SetPanelOpen {
let mut effects: Vec<Box<dyn Effect>> = Vec::new();
effects.push(Box::new(effect::SetPanelOpen {
panel: self.panel,
open: new_open,
})];
if new_open {
open: self.open,
}));
if self.focused {
let mode = match self.panel {
Panel::Formula => AppMode::FormulaPanel,
Panel::Category => AppMode::CategoryPanel,
Panel::View => AppMode::ViewPanel,
};
effects.push(effect::change_mode(mode));
} else {
effects.push(effect::change_mode(AppMode::Normal));
}
effects
}