106 lines
2.5 KiB
Rust
106 lines
2.5 KiB
Rust
use std::io::{Stdout, Write};
|
|
|
|
use termion::{clear, cursor, raw::RawTerminal};
|
|
|
|
use super::{Environment, Event, Page};
|
|
|
|
type Result<T> = std::result::Result<T, anyhow::Error>;
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub enum Body {
|
|
Echo,
|
|
// Signin(SigninPage),
|
|
}
|
|
|
|
impl Body {
|
|
fn echo(env: Environment, screen: &mut RawTerminal<Stdout>, event: Event) -> Result<()> {
|
|
let event = format!("{}", event);
|
|
write!(
|
|
screen,
|
|
"{clear}{frame}{content}",
|
|
clear = clear::All,
|
|
frame = env.frame.frame_str(env.theme.primary()),
|
|
content = env.frame.writeln(&format!("Event: {}", event), 0, 0),
|
|
)?;
|
|
screen.flush()?;
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl Page for Body {
|
|
fn receive_event(
|
|
&mut self,
|
|
env: Environment,
|
|
screen: &mut RawTerminal<Stdout>,
|
|
event: Event,
|
|
) -> Result<()> {
|
|
match self {
|
|
// Body::Signin(b) => b.receive_event(env, screen, event)?,
|
|
Body::Echo => Body::echo(env, screen, event)?,
|
|
};
|
|
Ok(())
|
|
}
|
|
|
|
fn init(&self, env: Environment, screen: &mut RawTerminal<Stdout>) -> Result<()> {
|
|
write!(
|
|
screen,
|
|
"{hide}{clear}{fr}{cursor}",
|
|
hide = cursor::Hide,
|
|
fr = env.frame.frame_str(env.theme.primary()),
|
|
cursor = env.frame.goto(0, 0),
|
|
clear = clear::All
|
|
)?;
|
|
screen.flush()?;
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
// #[derive(Debug, Clone, Default)]
|
|
// struct SigninPage {
|
|
// hostname: String,
|
|
// username: String,
|
|
// cursor: SigninCursorLocation,
|
|
// }
|
|
|
|
// #[derive(Debug, Clone)]
|
|
// enum SigninCursorLocation {
|
|
// Hostname,
|
|
// Username,
|
|
// Next,
|
|
// }
|
|
|
|
// impl Default for SigninCursorLocation {
|
|
// fn default() -> Self {
|
|
// Self::Hostname
|
|
// }
|
|
// }
|
|
|
|
// impl SigninPage {
|
|
// fn frame_string() -> String {
|
|
// format!("")
|
|
// }
|
|
// }
|
|
|
|
// impl Page for SigninPage {
|
|
// fn receive_event(
|
|
// &mut self,
|
|
// env: Environment,
|
|
// screen: &mut RawTerminal<Stdout>,
|
|
// event: Event,
|
|
// ) -> Result<()> {
|
|
// Ok(())
|
|
// }
|
|
|
|
// fn init(&self, env: Environment, screen: &mut RawTerminal<Stdout>) -> Result<()> {
|
|
// write!(
|
|
// screen,
|
|
// "{frame}{hide_cursor}",
|
|
// frame = env.frame.frame_str(&env.theme, env.theme.primary()),
|
|
// hide_cursor = cursor::Hide,
|
|
// )?;
|
|
// screen.flush()?;
|
|
|
|
// Ok(())
|
|
// }
|
|
// }
|