Compare commits
7 Commits
096d3e27c8
...
developmen
| Author | SHA1 | Date | |
|---|---|---|---|
| b68919145b | |||
| 01dd14fa62 | |||
| 1a94332ef8 | |||
| a5d57b58e3 | |||
| 8ec710988b | |||
| 13a728abf7 | |||
| 59608ce5f2 |
28
src/lib.rs
28
src/lib.rs
@@ -1,5 +1,5 @@
|
|||||||
use crossterm::event::{self, Event};
|
use crossterm::event::{self, Event, KeyCode};
|
||||||
use std::error::Error;
|
use std::{error::Error, time::Duration};
|
||||||
|
|
||||||
pub mod cli;
|
pub mod cli;
|
||||||
pub mod pomodoro;
|
pub mod pomodoro;
|
||||||
@@ -8,13 +8,35 @@ pub mod ui;
|
|||||||
use ui::draw_ui;
|
use ui::draw_ui;
|
||||||
|
|
||||||
pub fn run() -> Result<(), Box<dyn Error>> {
|
pub fn run() -> Result<(), Box<dyn Error>> {
|
||||||
|
let mut keep_running;
|
||||||
let mut terminal = ratatui::init();
|
let mut terminal = ratatui::init();
|
||||||
loop {
|
loop {
|
||||||
draw_ui(&mut terminal)?;
|
draw_ui(&mut terminal)?;
|
||||||
if matches!(event::read().expect("failed to read event"), Event::Key(_)) {
|
|
||||||
|
keep_running = process_events()?;
|
||||||
|
|
||||||
|
if !keep_running {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ratatui::restore();
|
ratatui::restore();
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn process_events() -> Result<bool, Box<dyn Error>> {
|
||||||
|
if !event::poll(Duration::from_secs(0))? {
|
||||||
|
return Ok(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Event::Key(key) = event::read()? {
|
||||||
|
return Ok(handle_key(key.code));
|
||||||
|
}
|
||||||
|
Ok(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_key(code: KeyCode) -> bool {
|
||||||
|
if let KeyCode::Char('q') = code {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|||||||
18
src/ui.rs
18
src/ui.rs
@@ -7,7 +7,7 @@ use ratatui::{
|
|||||||
Constraint::{Length, Min, Percentage},
|
Constraint::{Length, Min, Percentage},
|
||||||
Layout,
|
Layout,
|
||||||
},
|
},
|
||||||
widgets::{Block, Borders},
|
widgets::{Block, Borders, Gauge},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn draw_ui<B: ratatui::backend::Backend>(
|
pub fn draw_ui<B: ratatui::backend::Backend>(
|
||||||
@@ -31,16 +31,24 @@ fn draw(frame: &mut Frame) {
|
|||||||
|
|
||||||
let timer_layout = Layout::vertical([Percentage(65), Percentage(35)]);
|
let timer_layout = Layout::vertical([Percentage(65), Percentage(35)]);
|
||||||
let [pomodoro_area, utilities_area] = timer_layout.areas(app_area);
|
let [pomodoro_area, utilities_area] = timer_layout.areas(app_area);
|
||||||
let pomodoro_block = Block::bordered().title("Pomodoro");
|
let timer_label = format!("{}:{} / 25:00", 17, 32);
|
||||||
|
let timer_ratio = (17 * 60 + 32) as f64 / (25 * 60) as f64;
|
||||||
|
let pomodoro_timer = Gauge::default()
|
||||||
|
.block(Block::bordered().title("Pomodoro"))
|
||||||
|
.label(timer_label)
|
||||||
|
.ratio(timer_ratio);
|
||||||
|
|
||||||
frame.render_widget(pomodoro_block, pomodoro_area);
|
frame.render_widget(pomodoro_timer, pomodoro_area);
|
||||||
|
|
||||||
let utilities_layout = Layout::horizontal([Percentage(75), Percentage(25)]);
|
let utilities_layout = Layout::horizontal([Percentage(75), Percentage(25)]);
|
||||||
let [pomodori, controls] = utilities_layout.areas(utilities_area);
|
let [pomodori, controls] = utilities_layout.areas(utilities_area);
|
||||||
|
|
||||||
let pomodori_block = Block::bordered().title("Pomodori");
|
let pomodori_completed = Gauge::default()
|
||||||
|
.block(Block::bordered().title("Pomodori"))
|
||||||
|
.label("3 / 4")
|
||||||
|
.ratio(0.75);
|
||||||
let controls_block = Block::bordered().title("Controls");
|
let controls_block = Block::bordered().title("Controls");
|
||||||
|
|
||||||
frame.render_widget(pomodori_block, pomodori);
|
frame.render_widget(pomodori_completed, pomodori);
|
||||||
frame.render_widget(controls_block, controls);
|
frame.render_widget(controls_block, controls);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user