mirror of https://github.com/TaKO8Ki/gobang
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.6 KiB
Rust
95 lines
3.6 KiB
Rust
pub mod create_connection;
|
|
pub mod database_list;
|
|
pub mod record_table;
|
|
|
|
use crate::app::{App, FocusType, InputMode};
|
|
use crate::event::Key;
|
|
|
|
pub async fn handle_app(key: Key, app: &mut App) -> anyhow::Result<()> {
|
|
match app.input_mode {
|
|
InputMode::Normal => match key {
|
|
Key::Char('e') => {
|
|
app.input_mode = InputMode::Editing;
|
|
}
|
|
Key::Char('c') => {
|
|
app.focus_type = FocusType::Connections;
|
|
}
|
|
Key::Char('l') => app.focus_type = FocusType::Records(false),
|
|
Key::Char('h') => app.focus_type = FocusType::Tables(false),
|
|
Key::Char('j') => {
|
|
if let FocusType::Dabatases(_) = app.focus_type {
|
|
app.focus_type = FocusType::Tables(false)
|
|
}
|
|
}
|
|
Key::Char('k') => {
|
|
if let FocusType::Tables(_) = app.focus_type {
|
|
app.focus_type = FocusType::Dabatases(false)
|
|
}
|
|
}
|
|
Key::Right => match app.focus_type {
|
|
FocusType::Records(true) => app.record_table.next_column(),
|
|
_ => (),
|
|
},
|
|
Key::Left => match app.focus_type {
|
|
FocusType::Records(true) => app.record_table.previous_column(),
|
|
_ => (),
|
|
},
|
|
Key::Up => match app.focus_type {
|
|
FocusType::Connections => app.previous_connection(),
|
|
FocusType::Records(true) => app.record_table.previous(),
|
|
FocusType::Dabatases(true) => app.previous_database(),
|
|
FocusType::Tables(true) => match app.selected_database.selected() {
|
|
Some(index) => {
|
|
app.record_table.column_index = 0;
|
|
app.databases[index].previous();
|
|
record_table::handler(key, app).await?;
|
|
}
|
|
None => (),
|
|
},
|
|
_ => (),
|
|
},
|
|
Key::Down => match app.focus_type {
|
|
FocusType::Connections => app.next_connection(),
|
|
FocusType::Records(true) => app.record_table.next(),
|
|
FocusType::Dabatases(true) => app.next_database(),
|
|
FocusType::Tables(true) => match app.selected_database.selected() {
|
|
Some(index) => {
|
|
app.record_table.column_index = 0;
|
|
app.databases[index].next();
|
|
record_table::handler(key, app).await?
|
|
}
|
|
None => (),
|
|
},
|
|
_ => (),
|
|
},
|
|
Key::Enter => match app.focus_type {
|
|
FocusType::Connections => {
|
|
create_connection::handler(key, app).await?;
|
|
database_list::handler(key, app).await?;
|
|
}
|
|
FocusType::Records(false) => app.focus_type = FocusType::Records(true),
|
|
FocusType::Dabatases(false) => app.focus_type = FocusType::Dabatases(true),
|
|
FocusType::Tables(false) => app.focus_type = FocusType::Tables(true),
|
|
_ => (),
|
|
},
|
|
_ => {}
|
|
},
|
|
InputMode::Editing => match key {
|
|
Key::Enter => {
|
|
app.messages.push(vec![app.input.drain(..).collect()]);
|
|
}
|
|
Key::Char(c) => {
|
|
app.input.push(c);
|
|
}
|
|
Key::Backspace => {
|
|
app.input.pop();
|
|
}
|
|
Key::Esc => {
|
|
app.input_mode = InputMode::Normal;
|
|
}
|
|
_ => {}
|
|
},
|
|
}
|
|
Ok(())
|
|
}
|