[tui] Add File MenuBar options Reload and Close.

This commit is contained in:
2026-01-25 12:04:31 -05:00
parent 6c2f3f9005
commit fa36a633ee
5 changed files with 150 additions and 28 deletions

View File

@@ -1,6 +1,6 @@
use crate::tui::component::{Action, Component, ComponentState, FocusState};
use crate::tui::menu_bar::MenuBarItemOption::{
About, Exit, Reload, Save, ShowHideExplorer, ShowHideLogger,
About, CloseTab, Exit, Reload, Save, ShowHideExplorer, ShowHideLogger,
};
use log::trace;
use ratatui::buffer::Buffer;
@@ -23,6 +23,7 @@ enum MenuBarItem {
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromRepr, EnumIter)]
enum MenuBarItemOption {
Save,
CloseTab,
Reload,
Exit,
ShowHideExplorer,
@@ -39,6 +40,7 @@ impl MenuBarItemOption {
ShowHideExplorer => "Show / hide explorer",
ShowHideLogger => "Show / hide logger",
About => "About",
CloseTab => "Close tab",
}
}
}
@@ -66,7 +68,7 @@ impl MenuBarItem {
pub fn options(&self) -> &[MenuBarItemOption] {
match self {
MenuBarItem::File => &[Save, Reload, Exit],
MenuBarItem::File => &[Save, CloseTab, Reload, Exit],
MenuBarItem::View => &[ShowHideExplorer, ShowHideLogger],
MenuBarItem::Help => &[About],
}
@@ -145,14 +147,14 @@ impl MenuBar {
}
fn rect_under_option(anchor: Rect, area: Rect, width: u16, height: u16) -> Rect {
// TODO: X offset for item option? It's fine as-is, but it might look nicer.
let rect = Rect {
x: anchor.x,
y: anchor.y + anchor.height,
width: width.min(area.width),
height,
};
trace!(target:Self::id(), "Building Rect under MenuBar popup {}", rect);
// TODO: X offset for item option? It's fine as-is, but it might look nicer.
// trace!(target:Self::id(), "Building Rect under MenuBar popup {}", rect);
rect
}
}
@@ -190,14 +192,15 @@ impl Component for MenuBar {
}
KeyCode::Enter => {
if let Some(selected) = self.list_state.selected() {
let seletion = self.selected.options()[selected];
return match seletion {
let selection = self.selected.options()[selected];
return match selection {
Save => Ok(Action::Save),
Exit => Ok(Action::Quit),
Reload => Ok(Action::Noop), // TODO
ShowHideExplorer => Ok(Action::Noop), // TODO
ShowHideLogger => Ok(Action::Noop), // TODO
About => Ok(Action::Noop), // TODO
Reload => Ok(Action::ReloadFile),
ShowHideExplorer => Ok(Action::ShowHideExplorer),
ShowHideLogger => Ok(Action::ShowHideLogger),
About => Ok(Action::About),
CloseTab => Ok(Action::CloseTab),
};
}
Ok(Action::Noop)