feat: base UI data structure defined
This commit is contained in:
@@ -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) => {
|
||||
|
||||
@@ -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!()
|
||||
// }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user