mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
60 lines
1.5 KiB
Rust
60 lines
1.5 KiB
Rust
use mlua::{Table, TableExt};
|
|
use ratatui::{buffer::Buffer, layout::Rect, widgets::Widget};
|
|
use tracing::error;
|
|
use yazi_plugin::{bindings::Cast, elements::render_widgets, LUA};
|
|
|
|
use super::{completion, confirm, input, select, tasks, which};
|
|
use crate::{components, help, Ctx};
|
|
|
|
pub(super) struct Root<'a> {
|
|
cx: &'a Ctx,
|
|
}
|
|
|
|
impl<'a> Root<'a> {
|
|
pub(super) fn new(cx: &'a Ctx) -> Self { Self { cx } }
|
|
}
|
|
|
|
impl<'a> Widget for Root<'a> {
|
|
fn render(self, area: Rect, buf: &mut Buffer) {
|
|
let mut f = || {
|
|
let area = yazi_plugin::elements::Rect::cast(&LUA, area)?;
|
|
let root = LUA.globals().raw_get::<_, Table>("Root")?.call_method::<_, Table>("new", area)?;
|
|
|
|
render_widgets(root.call_method("render", ())?, buf);
|
|
Ok::<_, mlua::Error>(())
|
|
};
|
|
if let Err(e) = f() {
|
|
error!("Failed to render the `Root` component:\n{e}");
|
|
}
|
|
|
|
components::Preview::new(self.cx).render(area, buf);
|
|
|
|
if self.cx.tasks.visible {
|
|
tasks::Layout::new(self.cx).render(area, buf);
|
|
}
|
|
|
|
if self.cx.select.visible {
|
|
select::Select::new(self.cx).render(area, buf);
|
|
}
|
|
|
|
if self.cx.input.visible {
|
|
input::Input::new(self.cx).render(area, buf);
|
|
}
|
|
|
|
if self.cx.confirm.visible {
|
|
confirm::Confirm::new(self.cx).render(area, buf);
|
|
}
|
|
|
|
if self.cx.help.visible {
|
|
help::Layout::new(self.cx).render(area, buf);
|
|
}
|
|
|
|
if self.cx.completion.visible {
|
|
completion::Completion::new(self.cx).render(area, buf);
|
|
}
|
|
|
|
if self.cx.which.visible {
|
|
which::Which::new(self.cx).render(area, buf);
|
|
}
|
|
}
|
|
}
|