use std::io::{Stdout, Write}; use termion::{clear, cursor, raw::RawTerminal}; use super::{Environment, Event, Page}; type Result = std::result::Result; #[derive(Debug, Clone)] pub enum Body { Echo, // Signin(SigninPage), } impl Body { fn echo(env: Environment, screen: &mut RawTerminal, 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, 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) -> 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, // event: Event, // ) -> Result<()> { // Ok(()) // } // fn init(&self, env: Environment, screen: &mut RawTerminal) -> Result<()> { // write!( // screen, // "{frame}{hide_cursor}", // frame = env.frame.frame_str(&env.theme, env.theme.primary()), // hide_cursor = cursor::Hide, // )?; // screen.flush()?; // Ok(()) // } // }