Compare commits
2 Commits
4d81cd51a6
...
fc4ba08600
| Author | SHA1 | Date | |
|---|---|---|---|
| fc4ba08600 | |||
| edcbea746c |
@ -1,76 +0,0 @@
|
|||||||
use crate::tui::component::{Action, Component};
|
|
||||||
use ratatui::buffer::Buffer;
|
|
||||||
use ratatui::crossterm::event::{Event, KeyCode, KeyEvent};
|
|
||||||
use ratatui::layout::Rect;
|
|
||||||
use ratatui::style::{Color, Style};
|
|
||||||
use ratatui::widgets::Widget;
|
|
||||||
use tui_logger::{TuiLoggerLevelOutput, TuiLoggerSmartWidget, TuiWidgetEvent, TuiWidgetState};
|
|
||||||
|
|
||||||
/// Any log written as info!(target:self.id(), "message") will work with this logger.
|
|
||||||
/// The logger is bound to info!, debug!, error!, trace! macros within Tui::new().
|
|
||||||
pub struct Logger {
|
|
||||||
state: TuiWidgetState,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Logger {
|
|
||||||
pub fn new() -> Self {
|
|
||||||
Self {
|
|
||||||
state: TuiWidgetState::new(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Widget for &Logger {
|
|
||||||
fn render(self, area: Rect, buf: &mut Buffer)
|
|
||||||
where
|
|
||||||
Self: Sized,
|
|
||||||
{
|
|
||||||
// TODO: Use output_file?
|
|
||||||
TuiLoggerSmartWidget::default()
|
|
||||||
.style_error(Style::default().fg(Color::Red))
|
|
||||||
.style_debug(Style::default().fg(Color::Green))
|
|
||||||
.style_warn(Style::default().fg(Color::Yellow))
|
|
||||||
.style_trace(Style::default().fg(Color::Magenta))
|
|
||||||
.style_info(Style::default().fg(Color::Cyan))
|
|
||||||
.output_separator(':')
|
|
||||||
.output_timestamp(Some("%H:%M:%S".to_string()))
|
|
||||||
.output_level(Some(TuiLoggerLevelOutput::Abbreviated))
|
|
||||||
.output_target(true)
|
|
||||||
.output_file(true)
|
|
||||||
.output_line(true)
|
|
||||||
.state(&self.state)
|
|
||||||
.render(area, buf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Component for Logger {
|
|
||||||
fn id(&self) -> &str {
|
|
||||||
"Logger"
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_event(&mut self, event: Event) -> anyhow::Result<Action> {
|
|
||||||
if let Some(key_event) = event.as_key_event() {
|
|
||||||
return self.handle_key_events(key_event);
|
|
||||||
}
|
|
||||||
Ok(Action::Noop)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_key_events(&mut self, key: KeyEvent) -> anyhow::Result<Action> {
|
|
||||||
match key.code {
|
|
||||||
KeyCode::Char(' ') => self.state.transition(TuiWidgetEvent::SpaceKey),
|
|
||||||
KeyCode::Esc => self.state.transition(TuiWidgetEvent::EscapeKey),
|
|
||||||
KeyCode::PageUp => self.state.transition(TuiWidgetEvent::PrevPageKey),
|
|
||||||
KeyCode::PageDown => self.state.transition(TuiWidgetEvent::NextPageKey),
|
|
||||||
KeyCode::Up => self.state.transition(TuiWidgetEvent::UpKey),
|
|
||||||
KeyCode::Down => self.state.transition(TuiWidgetEvent::DownKey),
|
|
||||||
KeyCode::Left => self.state.transition(TuiWidgetEvent::LeftKey),
|
|
||||||
KeyCode::Right => self.state.transition(TuiWidgetEvent::RightKey),
|
|
||||||
KeyCode::Char('+') => self.state.transition(TuiWidgetEvent::PlusKey),
|
|
||||||
KeyCode::Char('-') => self.state.transition(TuiWidgetEvent::MinusKey),
|
|
||||||
KeyCode::Char('h') => self.state.transition(TuiWidgetEvent::HideKey),
|
|
||||||
KeyCode::Char('f') => self.state.transition(TuiWidgetEvent::FocusKey),
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
Ok(Action::Pass)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user