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