From cbbf83363e4a1e4b1a384f083c1b383bd24be517 Mon Sep 17 00:00:00 2001 From: Daniel Heras Quesada Date: Wed, 29 Jul 2026 23:41:11 +0200 Subject: [PATCH] feat: base UI data structure defined --- src/main.rs | 4 +-- src/modules/ui/app.rs | 58 +++++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/main.rs b/src/main.rs index 8d5c088..2d3b0ac 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,7 @@ use std::io::{self, Error}; mod modules; use modules::config::{Config, read_config}; -use modules::source::{FileDatabase, Word, WordSource}; +use modules::source::FileDatabase; use modules::ui::app::App; const DEFAULT_CONFIG_PATH: &'static str = "./src/assets/wordsmith_default.conf"; @@ -36,7 +36,7 @@ fn main() -> io::Result<()> { match word_source_result { Ok(word_source) => { - let mut app = App::new(); + let mut app = App::new(word_source); return ratatui::run(|terminal| app.run(terminal)); } Err(word_source_error) => { diff --git a/src/modules/ui/app.rs b/src/modules/ui/app.rs index 89881c4..e6534fb 100644 --- a/src/modules/ui/app.rs +++ b/src/modules/ui/app.rs @@ -1,45 +1,37 @@ -use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind}; +use crate::modules::source::FileDatabase; use ratatui::{ DefaultTerminal, Frame, - buffer::Buffer, - layout::Rect, - style::Stylize, - symbols::border, - text::{Line, Text}, - widgets::{Block, Paragraph, Widget}, + layout::{Constraint, Direction, Layout}, + widgets::Paragraph, }; +use std::io::{self}; -enum UiState { +pub enum UiState { LIST, - FILTER, + FILTERWORD, + FILTERLANG, EDIT, ADD, DELETE, } -enum FilterVariant { - WORD, - LANG, -} - -struct Filter { - variant: FilterVariant, - value: String, -} - pub struct App { state: UiState, - scroll_percentage: u32, - filters: Vector, + file_database: FileDatabase, + scroll_position: u32, + word_filter: Option, + lang_filter: Option, exit: bool, } impl App { - pub fn new() -> Self { + pub fn new(db: FileDatabase) -> Self { Self { - state: UiState.LIST, - scroll_percentage: 0, - filters: vec![], + state: UiState::LIST, + file_database: db, + scroll_position: 0, + word_filter: None, + lang_filter: None, exit: false, } } @@ -47,16 +39,22 @@ impl App { pub fn run(&mut self, terminal: &mut DefaultTerminal) -> io::Result<()> { while !self.exit { terminal.draw(|frame| self.draw(frame))?; - self.handle_events()?; + // self.handle_events()?; } Ok(()) } fn draw(&self, frame: &mut Frame) { - todo!() + let main_layout = Layout::default() + .direction(Direction::Horizontal) + .margin(1) + .constraints(vec![Constraint::Max(10)]) + .split(frame.area()); + + frame.render_widget(Paragraph::new("Word filter"), main_layout[0]); } - fn handle_events(&mut self) -> io::Result<()> { - todo!() - } + // fn handle_events(&mut self) -> io::Result<()> { + // todo!() + // } }