dirbuilder/src/command.rs

44 lines
1.2 KiB
Rust
Raw Normal View History

2024-10-02 14:56:07 -04:00
use tui::widgets::{Block, Borders, Paragraph};
use crate::pane::prelude::*;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct Command {
buf: String
}
impl Command {
pub const fn new() -> Self {
Self { buf: String::new() }
}
pub fn buf(&self) -> &str { &self.buf }
}
impl Pane for Command {
fn cursor_position(&self) -> Option<(u16, u16)> {
let x = u16::try_from(self.buf.len())
.expect("too big to display");
let y = 0;
Some((x, y))
}
fn lines_hint(&self) -> usize {
1
}
fn display(&self, output: OutputSink, area: Rect) {
let widget = Paragraph::new(self.buf.as_str())
.block(Block::default().title("Command").borders(Borders::all()));
output.render_widget(widget, area);
}
fn update(&mut self, key: KeyCode) -> Message {
match key {
KeyCode::Char(c) => { self.buf.push(c); Message::Nothing },
KeyCode::Backspace => { self.buf.pop(); Message::Nothing },
KeyCode::Esc => Message::CancelCommand,
KeyCode::Enter => Message::ExecuteCommand,
_ => Message::Nothing,
}
}
}