[tui] Implement Widget for Explorer and MenuBar.
This commit is contained in:
parent
f531886255
commit
45d665f8f6
@ -199,10 +199,7 @@ impl<'a> Widget for &mut App<'a> {
|
||||
self.draw_tabs(editor_layout[0], buf);
|
||||
let id = App::id().to_string();
|
||||
self.editor.render(editor_layout[1], buf);
|
||||
self.explorer
|
||||
.render(horizontal[0], buf)
|
||||
.context("Failed to render Explorer")
|
||||
.unwrap_or_else(|e| error!(target:id.as_str(), "{}", e));
|
||||
self.explorer.render(horizontal[0], buf);
|
||||
self.logger.render(vertical[2], buf);
|
||||
|
||||
// The title bar is rendered last to overlay any popups created for drop-down menus.
|
||||
|
||||
@ -5,7 +5,7 @@ use ratatui::crossterm::event::{Event, KeyCode, KeyEvent, MouseEvent, MouseEvent
|
||||
use ratatui::layout::{Alignment, Position, Rect};
|
||||
use ratatui::prelude::Style;
|
||||
use ratatui::style::{Color, Modifier};
|
||||
use ratatui::widgets::{Block, Borders, StatefulWidget};
|
||||
use ratatui::widgets::{Block, Borders, StatefulWidget, Widget};
|
||||
use std::fs;
|
||||
use std::path::PathBuf;
|
||||
use tui_tree_widget::{Tree, TreeItem, TreeState};
|
||||
@ -82,20 +82,27 @@ impl<'a> Explorer<'a> {
|
||||
.context("Failed to build tree from path.")
|
||||
}
|
||||
|
||||
pub fn render(&mut self, area: Rect, buf: &mut Buffer) -> Result<()> {
|
||||
pub fn selected(&self) -> Result<String> {
|
||||
if let Some(path) = self.tree_state.selected().last() {
|
||||
return Ok(std::path::absolute(path)?
|
||||
.to_str()
|
||||
.context("Failed to get absolute path to selected TreeItem")?
|
||||
.to_string());
|
||||
}
|
||||
bail!("Failed to get selected TreeItem")
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Widget for &mut Explorer<'a> {
|
||||
fn render(self, area: Rect, buf: &mut Buffer) {
|
||||
if let Ok(tree) = Tree::new(&self.tree_items.children()) {
|
||||
let file_name = self.root_path.file_name().unwrap_or("Unknown".as_ref());
|
||||
StatefulWidget::render(
|
||||
Tree::new(&self.tree_items.children())
|
||||
.context("Failed to build file Explorer Tree.")?
|
||||
.style(Style::default())
|
||||
tree.style(Style::default())
|
||||
.block(
|
||||
Block::default()
|
||||
.borders(Borders::ALL)
|
||||
.title(
|
||||
self.root_path
|
||||
.file_name()
|
||||
.context("Failed to get file name from path.")?
|
||||
.to_string_lossy(),
|
||||
)
|
||||
.title(file_name.to_string_lossy())
|
||||
.title_style(Style::default().fg(Color::Green))
|
||||
.title_alignment(Alignment::Center),
|
||||
)
|
||||
@ -109,17 +116,7 @@ impl<'a> Explorer<'a> {
|
||||
buf,
|
||||
&mut self.tree_state,
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn selected(&self) -> Result<String> {
|
||||
if let Some(path) = self.tree_state.selected().last() {
|
||||
return Ok(std::path::absolute(path)?
|
||||
.to_str()
|
||||
.context("Failed to get absolute path to selected TreeItem")?
|
||||
.to_string());
|
||||
}
|
||||
bail!("Failed to get selected TreeItem")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -144,8 +144,10 @@ impl MenuBar {
|
||||
height,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn render(&mut self, area: Rect, buf: &mut Buffer)
|
||||
impl Widget for &mut MenuBar {
|
||||
fn render(self, area: Rect, buf: &mut Buffer)
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user