diff --git a/src/app/mod.rs b/src/app/mod.rs index 04ed962..92f6736 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1,17 +1,18 @@ mod event_handler; mod events; mod ui; +mod formatter; use crate::database; use crate::output; use crate::params::Params; use crate::scanner; use anyhow::{anyhow, Result}; -use std::time::Duration; use crossterm::{event, execute, terminal}; use event_handler::EventHandler; use std::io; use std::thread; +use std::time::Duration; use tui::{ backend::CrosstermBackend, widgets::{Block, Borders, Widget}, @@ -23,12 +24,13 @@ pub struct App; impl App { pub fn init(app_args: &Params) -> Result<()> { + // let mut term = Self::init_terminal()?; + let connection = database::get_connection(&app_args)?; let duplicates = scanner::duplicates(&app_args, &connection)?; - let mut term = Self::init_terminal()?; - Self::init_render_loop(&mut term)?; - Self::cleanup(&mut term)?; + // Self::init_render_loop(&mut term)?; + // Self::cleanup(&mut term)?; output::print(duplicates, &app_args); /* TODO: APP TUI INIT FUNCTION */ Ok(()) diff --git a/src/app/ui.rs b/src/app/ui.rs index 8326b6c..19413a4 100644 --- a/src/app/ui.rs +++ b/src/app/ui.rs @@ -1,20 +1,52 @@ -use tui::{ - backend::CrosstermBackend, - widgets::{Block, Borders, Widget}, - Terminal, -}; use anyhow::Result; use std::io; +use tui::{ + backend::{Backend, CrosstermBackend}, + layout::{Constraint, Direction, Layout, Rect}, + style::{Modifier, Style}, + text::{Span, Spans}, + widgets::{Block, Borders, List, ListItem, Widget}, + Frame, Terminal, +}; pub struct Ui; impl Ui { + fn generate_file_list() -> impl Widget { + let tasks: Vec = vec!["Sreedev"; 100] + .into_iter() + .map(|item| ListItem::new(vec![Spans::from(Span::raw(item))])) + .collect(); + + List::new(tasks) + .block(Block::default().borders(Borders::ALL).title("List")) + .highlight_style(Style::default().add_modifier(Modifier::BOLD)) + .highlight_symbol("> ") + } + + fn generate_info_bar() -> impl Widget { + Block::default().title("Description").borders(Borders::ALL) + } + + fn generate_file_desc() -> impl Widget { + Block::default().title("Description").borders(Borders::ALL) + } + pub fn render_frame(term: &mut Terminal>) -> Result<()> { term.draw(|f| { - let size = f.size(); - let block = Block::default().title("Block").borders(Borders::ALL); + let windows = Layout::default() + .direction(Direction::Vertical) + .constraints([Constraint::Ratio(2, 16), Constraint::Ratio(14, 16)].as_ref()) + .split(f.size()); - f.render_widget(block, size); + let subwindows = Layout::default() + .direction(Direction::Horizontal) + .constraints([Constraint::Ratio(1, 4), Constraint::Ratio(3, 4)].as_ref()) + .split(windows[1]); + + f.render_widget(Self::generate_info_bar(), windows[0]); + f.render_widget(Self::generate_file_list(), subwindows[0]); + f.render_widget(Self::generate_file_desc(), subwindows[1]); })?; Ok(()) }