TUI #1
@ -1,4 +1,3 @@
|
||||
use log::trace;
|
||||
use ratatui::buffer::Buffer;
|
||||
use ratatui::layout::{Constraint, Direction, Layout, Rect};
|
||||
use ratatui::style::{Modifier, Style};
|
||||
|
||||
@ -20,9 +20,6 @@ use ratatui::widgets::{Paragraph, Wrap};
|
||||
use std::path::PathBuf;
|
||||
use std::time::Duration;
|
||||
|
||||
// TODO: Need a way to dynamically run Widget::render on all widgets.
|
||||
// TODO: + Need a way to map Rect to Component::id() to position each widget?
|
||||
// TODO: Need a good way to dynamically run Component methods on all widgets.
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
pub enum AppComponent {
|
||||
AppEditor,
|
||||
@ -48,7 +45,7 @@ impl<'a> App<'a> {
|
||||
pub fn new(root_path: PathBuf) -> Result<Self> {
|
||||
trace!(target:Self::id(), "Building {}", Self::id());
|
||||
let app = Self {
|
||||
editor_tabs: EditorTab::new(&root_path.join("src/tui/app.rs")),
|
||||
editor_tabs: EditorTab::new(None),
|
||||
explorer: Explorer::new(&root_path)?,
|
||||
logger: Logger::new(),
|
||||
menu_bar: MenuBar::new(),
|
||||
@ -61,17 +58,6 @@ impl<'a> App<'a> {
|
||||
/// Logic that should be executed once on application startup.
|
||||
pub fn start(&mut self) -> Result<()> {
|
||||
trace!(target:Self::id(), "Starting App");
|
||||
let root_path = self.explorer.root_path.clone();
|
||||
let editor = self
|
||||
.editor_tabs
|
||||
.current_editor_mut()
|
||||
.context("Failed to get current editor in App::start")?;
|
||||
editor
|
||||
.set_contents(&root_path.join("src/tui/app.rs"))
|
||||
.context(format!(
|
||||
"Failed to initialize editor contents to path: {root_path:?}"
|
||||
))?;
|
||||
editor.component_state.set_focus(Focus::Active);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@ -23,15 +23,27 @@ impl EditorTab {
|
||||
"EditorTab"
|
||||
}
|
||||
|
||||
pub fn new(path: &std::path::PathBuf) -> Self {
|
||||
pub fn new(path: Option<&std::path::PathBuf>) -> Self {
|
||||
trace!(target:Self::id(), "Building EditorTab with path {path:?}");
|
||||
match path {
|
||||
None => Self {
|
||||
editors: HashMap::new(),
|
||||
tab_order: Vec::new(),
|
||||
current_editor: 0,
|
||||
},
|
||||
Some(path) => {
|
||||
let tab_order = vec![path.to_string_lossy().to_string()];
|
||||
Self {
|
||||
editors: HashMap::from([(tab_order.first().unwrap().to_owned(), Editor::new(path))]),
|
||||
editors: HashMap::from([(
|
||||
tab_order.first().unwrap().to_owned(),
|
||||
Editor::new(path),
|
||||
)]),
|
||||
tab_order,
|
||||
current_editor: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn next_editor(&mut self) {
|
||||
let next = (self.current_editor + 1) % self.tab_order.len();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user