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;
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) => {

View File

@@ -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<Filter>,
file_database: FileDatabase,
scroll_position: u32,
word_filter: Option<String>,
lang_filter: Option<String>,
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!()
// }
}