diff --git a/src/display/body.rs b/src/display/body.rs index 35c163a..7fe2dd7 100644 --- a/src/display/body.rs +++ b/src/display/body.rs @@ -82,6 +82,7 @@ impl Page for Body { #[derive(Debug, Clone, Default)] pub struct SigninPage { hostname: String, + token: String, cursor: SigninCursorLocation, frame: Option, } @@ -89,6 +90,7 @@ pub struct SigninPage { #[derive(Debug, Clone)] enum SigninCursorLocation { Hostname, + Token, Ok, } @@ -103,8 +105,9 @@ impl SigninPage { fn next(&mut self) { self.cursor = match self.cursor { SigninCursorLocation::Hostname => { - SigninCursorLocation::Ok + SigninCursorLocation::Token } + SigninCursorLocation::Token => SigninCursorLocation::Ok, SigninCursorLocation::Ok => { SigninCursorLocation::Hostname } @@ -113,8 +116,15 @@ impl SigninPage { #[inline] fn previous(&mut self) { - // Don't tell them this neat trick - self.next() + self.cursor = match self.cursor { + SigninCursorLocation::Hostname => { + SigninCursorLocation::Ok + } + SigninCursorLocation::Token => { + SigninCursorLocation::Hostname + } + SigninCursorLocation::Ok => SigninCursorLocation::Token, + } } fn draw( @@ -124,14 +134,22 @@ impl SigninPage { ) -> Components { const HEADER_Y: u16 = 1; const HOSTNAME_Y: u16 = 3; - const OK_Y: u16 = 5; + const TOKEN_Y: u16 = 4; + const OK_Y: u16 = 6; let frame = self.frame.unwrap(); let (w, _) = frame.inner_size(); - let exp_w = w / 3; + let exp_w = w - (w / 3); - let (hostname_theme, ok_theme) = match self.cursor { - SigninCursorLocation::Hostname => (highlight, normal), - SigninCursorLocation::Ok => (normal, highlight), + let (hostname_theme, token_theme, ok_theme) = match self + .cursor + { + SigninCursorLocation::Hostname => { + (highlight, normal, normal) + } + SigninCursorLocation::Token => { + (normal, highlight, normal) + } + SigninCursorLocation::Ok => (normal, normal, highlight), }; vec![ @@ -156,6 +174,18 @@ impl SigninPage { HOSTNAME_Y, ) .0, + frame + .prefix_centered_goto( + self.field( + token_theme, + normal, + exp_w, + "token", + &self.token, + ), + TOKEN_Y, + ) + .0, vec![Component::Theme(ok_theme)], HorizontalAlignment::Center .align(Text::Normal("[ok]".into()), w, OK_Y) @@ -196,12 +226,27 @@ impl SigninPage { .into() } + fn del(&mut self) { + match self.cursor { + SigninCursorLocation::Hostname => { + self.hostname.pop(); + } + SigninCursorLocation::Token => { + self.token.pop(); + } + SigninCursorLocation::Ok => {} + } + } + #[inline] fn char(&mut self, c: char) { match self.cursor { SigninCursorLocation::Hostname => { self.hostname.push(c); } + SigninCursorLocation::Token => { + self.token.push(c); + } SigninCursorLocation::Ok => {} } } @@ -217,8 +262,8 @@ impl Page for SigninPage { match event { Event::Key(key) => match key { termion::event::Key::Char(c) => self.char(c), - termion::event::Key::Up => self.next(), - termion::event::Key::Down => self.previous(), + termion::event::Key::Up => self.previous(), + termion::event::Key::Down => self.next(), termion::event::Key::Backspace => { if let SigninCursorLocation::Hostname = self.cursor @@ -257,8 +302,8 @@ impl Page for SigninPage { ) -> Result<()> { self.frame = Some(env.frame.sub( env.theme.colors.subframe, - super::frame::FrameSize::ByPercent(50, 50), - 2, + super::frame::FrameSize::ByAbsolute(70, 15), + 1, )); write!( screen, diff --git a/src/display/frame.rs b/src/display/frame.rs index c6eaab2..35bac99 100644 --- a/src/display/frame.rs +++ b/src/display/frame.rs @@ -110,21 +110,6 @@ impl Frame { .into() } - #[inline] - pub fn to_end(&self, s: &str, x: u16, y: u16) -> Components { - // FIXME: handle the fucking newlines grrrr i hate this - let width = self.inner_size().0; - vec![ - Component::Goto(x, y), - Component::String(Text::LimitedOrPadded( - s.into(), - ' ', - width - x, - )), - ] - .into() - } - pub fn make(&self, comp: Components) -> String { comp.0.into_iter().map(|c| c.make(self)).collect() } @@ -225,10 +210,6 @@ impl Frame { // the frame within a screen pub fn compose(&self, body_theme: ColorSet) -> Components { let body_theme = Component::Internal(body_theme.to_string()); - if self.border == 0 { - // FIXME: this will fuck up subframes - return vec![body_theme, Component::Clear].into(); - } let (w_len, h_len) = self.size(); let frame_theme = Component::Internal(self.theme.to_string()); diff --git a/src/display/theme.rs b/src/display/theme.rs index b0bcd56..74cd831 100644 --- a/src/display/theme.rs +++ b/src/display/theme.rs @@ -81,24 +81,24 @@ impl Default for Theme { Self { colors: Colors { primary: ColorSet { - fg: "#ffe6ff".into(), - bg: "#3b224c".into(), + fg: "#330033".into(), + bg: "#a006d3".into(), }, frame: ColorSet { fg: "#ffe6ff".into(), - bg: "#330033".into(), + bg: "#9005c2".into(), }, - subframe: ColorSet{ + subframe: ColorSet { fg: "#ffe6ff".into(), - bg: "#110011".into() + bg: "#7003a0".into(), }, - highlight: ColorSet{ + highlight: ColorSet { fg: "#ffffff".into(), - bg: "#0000ff".into() + bg: "#0000ff".into(), }, - subwin: ColorSet{ + subwin: ColorSet { fg: "#ffffff".into(), - bg: "#000000".into(), + bg: "#500170".into(), }, }, }