feat: base UI data structure defined

This commit is contained in:
2026-07-29 23:41:11 +02:00
parent d6d819bf40
commit cbbf83363e
2 changed files with 30 additions and 32 deletions

View File

@@ -4,7 +4,7 @@ use std::io::{self, Error};
mod modules; mod modules;
use modules::config::{Config, read_config}; use modules::config::{Config, read_config};
use modules::source::{FileDatabase, Word, WordSource}; use modules::source::FileDatabase;
use modules::ui::app::App; use modules::ui::app::App;
const DEFAULT_CONFIG_PATH: &'static str = "./src/assets/wordsmith_default.conf"; const DEFAULT_CONFIG_PATH: &'static str = "./src/assets/wordsmith_default.conf";
@@ -36,7 +36,7 @@ fn main() -> io::Result<()> {
match word_source_result { match word_source_result {
Ok(word_source) => { Ok(word_source) => {
let mut app = App::new(); let mut app = App::new(word_source);
return ratatui::run(|terminal| app.run(terminal)); return ratatui::run(|terminal| app.run(terminal));
} }
Err(word_source_error) => { Err(word_source_error) => {

View File

@@ -1,45 +1,37 @@
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind}; use crate::modules::source::FileDatabase;
use ratatui::{ use ratatui::{
DefaultTerminal, Frame, DefaultTerminal, Frame,
buffer::Buffer, layout::{Constraint, Direction, Layout},
layout::Rect, widgets::Paragraph,
style::Stylize,
symbols::border,
text::{Line, Text},
widgets::{Block, Paragraph, Widget},
}; };
use std::io::{self};
enum UiState { pub enum UiState {
LIST, LIST,
FILTER, FILTERWORD,
FILTERLANG,
EDIT, EDIT,
ADD, ADD,
DELETE, DELETE,
} }
enum FilterVariant {
WORD,
LANG,
}
struct Filter {
variant: FilterVariant,
value: String,
}
pub struct App { pub struct App {
state: UiState, state: UiState,
scroll_percentage: u32, file_database: FileDatabase,
filters: Vector<Filter>, scroll_position: u32,
word_filter: Option<String>,
lang_filter: Option<String>,
exit: bool, exit: bool,
} }
impl App { impl App {
pub fn new() -> Self { pub fn new(db: FileDatabase) -> Self {
Self { Self {
state: UiState.LIST, state: UiState::LIST,
scroll_percentage: 0, file_database: db,
filters: vec![], scroll_position: 0,
word_filter: None,
lang_filter: None,
exit: false, exit: false,
} }
} }
@@ -47,16 +39,22 @@ impl App {
pub fn run(&mut self, terminal: &mut DefaultTerminal) -> io::Result<()> { pub fn run(&mut self, terminal: &mut DefaultTerminal) -> io::Result<()> {
while !self.exit { while !self.exit {
terminal.draw(|frame| self.draw(frame))?; terminal.draw(|frame| self.draw(frame))?;
self.handle_events()?; // self.handle_events()?;
} }
Ok(()) Ok(())
} }
fn draw(&self, frame: &mut Frame) { 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<()> { // fn handle_events(&mut self) -> io::Result<()> {
todo!() // todo!()
} // }
} }