77 lines
2.1 KiB
Rust
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(())
|
|
}
|
|
}
|