From 20f33f569459b022180384d6ca0c9d9d40b23ffb Mon Sep 17 00:00:00 2001 From: zeefaad Date: Sun, 8 Mar 2026 19:47:40 +0100 Subject: [PATCH] ui --- src/ui.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index cf07d50..6fe5c8d 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -4,7 +4,7 @@ use ratatui::{ layout::{Alignment, Constraint, Direction, Layout}, style::{Color, Modifier, Style}, text::{Line, Span}, - widgets::{Block, Borders, List, ListItem, Padding, Paragraph}, + widgets::{Block, BorderType, Borders, List, ListItem, Padding, Paragraph}, }; use ratatui_image::StatefulImage; @@ -16,7 +16,7 @@ pub fn render(f: &mut Frame, app: &mut App) { let content_chunks = Layout::default() .direction(Direction::Horizontal) - .constraints([Constraint::Length(40), Constraint::Min(0)]) + .constraints([Constraint::Length(45), Constraint::Min(0)]) .split(main_chunks[0]); let items: Vec = app @@ -25,33 +25,55 @@ pub fn render(f: &mut Frame, app: &mut App) { .map(|i| { if i.ends_with(".jpg") || i.ends_with(".png") { ListItem::new(Line::from(Span::styled( - format!("🖼️ {}", i), + format!("🖼️ {}", i), Style::default() .fg(Color::Magenta) .add_modifier(Modifier::BOLD), ))) } else { - ListItem::new(Line::from(i.as_str())) + ListItem::new(Line::from(format!(" {}", i))) } }) .collect(); let list = List::new(items) - .block(Block::default().borders(Borders::ALL).title(" Historique ")) + .block( + Block::default() + .borders(Borders::ALL) + .border_type(BorderType::Rounded) + .border_style(Style::default().fg(Color::DarkGray)) + .title(Span::styled( + " History ", + Style::default() + .fg(Color::White) + .add_modifier(Modifier::BOLD), + )) + .title_alignment(Alignment::Center), + ) .highlight_style( Style::default() - .bg(Color::DarkGray) + .bg(Color::Rgb(40, 44, 52)) + .fg(Color::White) .add_modifier(Modifier::BOLD), ) .highlight_symbol(">> "); + f.render_stateful_widget(list, content_chunks[0], &mut app.list_state); let right_panel_block = Block::default() .borders(Borders::ALL) - .title(" Prévisualisation ") + .border_type(BorderType::Rounded) + .border_style(Style::default().fg(Color::DarkGray)) + .title(Span::styled( + " Previsualisation ", + Style::default() + .fg(Color::White) + .add_modifier(Modifier::BOLD), + )) + .title_alignment(Alignment::Center) .padding(Padding::uniform(1)); - let inner_right_area = right_panel_block.inner(content_chunks[1]); + let inner_right_area = right_panel_block.inner(content_chunks[1]); f.render_widget(right_panel_block, content_chunks[1]); if let Some(state) = &mut app.current_image { @@ -64,7 +86,18 @@ pub fn render(f: &mut Frame, app: &mut App) { f.render_widget(preview_paragraph, inner_right_area); } - let bottom_block = Block::default().borders(Borders::ALL); + let current_color = match app.mode { + Mode::Normal => Color::Green, + Mode::ConfirmDelete => Color::Red, + Mode::Command => Color::Yellow, + Mode::Search => Color::Cyan, + }; + + let bottom_block = Block::default() + .borders(Borders::ALL) + .border_type(BorderType::Rounded) + .border_style(Style::default().fg(current_color)); + let inner_bottom_area = bottom_block.inner(main_chunks[1]); f.render_widget(bottom_block, main_chunks[1]); @@ -109,7 +142,11 @@ pub fn render(f: &mut Frame, app: &mut App) { Span::raw(format!(" /{}", app.input_buffer)), ]), }; - f.render_widget(Paragraph::new(mode_text), bottom_chunks[0]); + + f.render_widget( + Paragraph::new(mode_text).block(Block::default().padding(Padding::horizontal(1))), + bottom_chunks[0], + ); let total = app.filtered_items.len(); let current = if total == 0 { @@ -119,9 +156,9 @@ pub fn render(f: &mut Frame, app: &mut App) { }; let stats_text = Line::from(vec![Span::styled( - format!(" {}/{} ", current, total), + format!("{}/{} ", current, total), Style::default() - .fg(Color::Yellow) + .fg(Color::DarkGray) .add_modifier(Modifier::BOLD), )]) .alignment(Alignment::Right);