set size on views

pull/6/head
dvkt 5 years ago
parent 4abcf7da48
commit 0a1d617487

@ -5,10 +5,11 @@ use std::io::Write;
use ui::{Action, Key, View, MAX_COLS, SCROLL_LINES};
pub struct MenuView {
pub input: String, // user's inputted value
pub menu: Menu, // data
pub link: usize, // selected link
pub scroll: usize, // scrolling offset
pub input: String, // user's inputted value
pub menu: Menu, // data
pub link: usize, // selected link
pub scroll: usize, // scrolling offset
pub size: (usize, usize), // cols, rows
}
pub struct Menu {
@ -26,8 +27,8 @@ pub struct Line {
}
impl View for MenuView {
fn render(&self, cols: usize, rows: usize) -> String {
self.render_lines(cols, rows)
fn render(&self) -> String {
self.render_lines()
}
fn process_input(&mut self, key: Key) -> Action {
@ -37,6 +38,10 @@ impl View for MenuView {
fn url(&self) -> String {
self.menu.url.to_string()
}
fn set_size(&mut self, cols: usize, rows: usize) {
self.size = (cols, rows);
}
}
impl MenuView {
@ -46,6 +51,7 @@ impl MenuView {
input: String::new(),
link: 0,
scroll: 0,
size: (0, 0),
}
}
@ -57,8 +63,9 @@ impl MenuView {
self.menu.links()
}
fn render_lines(&self, cols: usize, rows: usize) -> String {
fn render_lines(&self) -> String {
let mut out = String::new();
let (cols, rows) = self.size;
macro_rules! push {
($c:expr, $e:expr) => {{
@ -394,4 +401,3 @@ impl Menu {
}
}
}

@ -3,9 +3,10 @@ use ui::{Action, Key, View, MAX_COLS, SCROLL_LINES};
pub struct TextView {
url: String,
raw: String,
scroll: usize, // offset
lines: usize, // # of lines
longest: usize, // longest line
scroll: usize, // offset
lines: usize, // # of lines
longest: usize, // longest line
size: (usize, usize), // cols, rows
}
impl View for TextView {
@ -13,6 +14,10 @@ impl View for TextView {
self.url.to_string()
}
fn set_size(&mut self, cols: usize, rows: usize) {
self.size = (cols, rows);
}
fn process_input(&mut self, c: Key) -> Action {
match c {
Key::Char('t') | Key::Char('g') => {
@ -73,7 +78,8 @@ impl View for TextView {
}
}
fn render(&self, cols: usize, rows: usize) -> String {
fn render(&self) -> String {
let (cols, rows) = self.size;
let mut out = String::new();
let longest = if self.longest > MAX_COLS {
MAX_COLS
@ -121,6 +127,7 @@ impl TextView {
scroll: 0,
lines,
longest,
size: (0, 0),
}
}
}

@ -34,8 +34,9 @@ pub enum Action {
pub trait View {
fn process_input(&mut self, c: Key) -> Action;
fn render(&self, width: usize, height: usize) -> String;
fn render(&self) -> String;
fn url(&self) -> String;
fn set_size(&mut self, cols: usize, rows: usize);
}
impl UI {
@ -71,11 +72,12 @@ impl UI {
}
}
pub fn render(&self) -> String {
pub fn render(&mut self) -> String {
let (cols, rows) = termion::terminal_size().expect("can't get terminal size"); // TODO
if self.pages.len() > 0 && self.page < self.pages.len() {
if let Some(page) = self.pages.get(self.page) {
return page.render(cols as usize, rows as usize);
if let Some(page) = self.pages.get_mut(self.page) {
page.set_size(cols as usize, rows as usize);
return page.render();
}
}
String::from("N/A")

Loading…
Cancel
Save