Files
orangepunk-tui/src/components/input.rs
T
2025-03-23 19:07:07 -07:00

61 lines
2.1 KiB
Rust

use tui_realm_stdlib::Input;
use tuirealm::{command::{Cmd, CmdResult, Direction, Position}, event::{Key, KeyEvent, KeyModifiers}, props::{Alignment, BorderType, Borders, Color, InputType, Style}, Component, Event, MockComponent, NoUserEvent};
use crate::Msg;
#[derive(MockComponent)]
pub struct TextInput {
component: Input
}
impl Default for TextInput {
fn default() -> Self {
Self {
component: Input::default()
.borders(
Borders::default()
.modifiers(BorderType::Rounded)
.color(Color::LightYellow),
)
.foreground(Color::LightYellow)
.input_type(InputType::Text)
.title("Roll", Alignment::Left)
.value("veeso")
.invalid_style(Style::default().fg(Color::Red)),
}
}
}
impl Component<Msg, NoUserEvent> for TextInput {
fn on(&mut self, ev: Event<NoUserEvent>) -> Option<Msg> {
let _ = match ev {
Event::Keyboard(KeyEvent {
code: Key::Left, ..
}) => self.perform(Cmd::Move(Direction::Left)),
Event::Keyboard(KeyEvent {
code: Key::Right, ..
}) => self.perform(Cmd::Move(Direction::Right)),
Event::Keyboard(KeyEvent {
code: Key::Home, ..
}) => self.perform(Cmd::GoTo(Position::Begin)),
Event::Keyboard(KeyEvent { code: Key::End, .. }) => {
self.perform(Cmd::GoTo(Position::End))
}
Event::Keyboard(KeyEvent {
code: Key::Delete, ..
}) => self.perform(Cmd::Cancel),
Event::Keyboard(KeyEvent {
code: Key::Backspace,
..
}) => self.perform(Cmd::Delete),
Event::Keyboard(KeyEvent {
code: Key::Char(ch),
modifiers: KeyModifiers::NONE,
}) => self.perform(Cmd::Type(ch)),
Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => return Some(Msg::AppClose),
_ => CmdResult::None,
};
Some(Msg::InputUpdated)
}
}