Files
rstemp/src/view/home.rs
2025-02-28 03:07:59 +08:00

77 lines
2.1 KiB
Rust

use color_eyre::Result;
use crossterm::event::Event;
use ratatui::{
layout::{Constraint, Direction, Layout},
Frame,
};
use super::{
component::{
help::HelpComponent,
input::{InputComponent, InputEvent},
list::{ListComponent, ListEvent},
Component,
},
setting::SettingView,
PopupView, View,
};
// #[derive(Default)]
pub struct Home {
input: InputComponent,
table: ListComponent,
help: HelpComponent,
setting: SettingView,
}
impl Default for Home {
fn default() -> Self {
let mut home = Home {
input: InputComponent::default().name("Name".to_string()),
table: ListComponent::default()
.selectable()
.name("Connections".to_string()),
help: HelpComponent::default(),
setting: SettingView::default(),
};
home.table.active_state().set_active(true);
// home.setting.active_state().set_active(true);
home
}
}
impl View for Home {
fn draw(&self, frame: &mut Frame) {
let layout = Layout::default()
.direction(Direction::Vertical)
.constraints(vec![
Constraint::Length(3),
Constraint::Min(5),
Constraint::Length(3),
])
.split(frame.area());
self.input.show_cursor(frame, layout[0]);
frame.render_widget(self.input.widget(), layout[0]);
frame.render_widget(self.table.widget(), layout[1]);
frame.render_widget(self.help.widget(), layout[2]);
self.setting.draw(frame);
}
fn handle_event(&mut self, event: &Event) -> Result<()> {
match self.input.event_handler(event) {
Ok(InputEvent::None) => {}
_ => {}
}
match self.table.event_handler(event) {
Ok(ListEvent::Select(i)) => {
let active_state = self.setting.active_state().is_active();
self.setting.active_state().set_active(active_state);
println!("{}", i);
}
_ => {}
}
self.setting.handle_event(event)?;
Ok(())
}
}