This commit is contained in:
2026-03-08 19:11:02 +01:00
parent 54ddc9851c
commit 989e0aef91

View File

@ -1,12 +1,7 @@
use std::{io::Write, os::unix::net::UnixStream}; use crate::app::{App, Mode};
use crate::{
app::{App, Mode},
ipc::IpcRequest,
};
use ratatui::{ use ratatui::{
Frame, Frame,
layout::{Constraint, Direction, Layout}, layout::{Alignment, Constraint, Direction, Layout},
style::{Color, Modifier, Style}, style::{Color, Modifier, Style},
text::{Line, Span}, text::{Line, Span},
widgets::{Block, Borders, List, ListItem, Padding, Paragraph}, widgets::{Block, Borders, List, ListItem, Padding, Paragraph},
@ -21,17 +16,28 @@ pub fn render(f: &mut Frame, app: &mut App) {
let content_chunks = Layout::default() let content_chunks = Layout::default()
.direction(Direction::Horizontal) .direction(Direction::Horizontal)
.constraints([Constraint::Length(50), Constraint::Min(0)]) .constraints([Constraint::Length(40), Constraint::Min(0)])
.split(main_chunks[0]); .split(main_chunks[0]);
let items: Vec<ListItem> = app let items: Vec<ListItem> = app
.filtered_items .filtered_items
.iter() .iter()
.map(|i| ListItem::new(i.as_str())) .map(|i| {
if i.ends_with(".jpg") || i.ends_with(".png") {
ListItem::new(Line::from(Span::styled(
format!("🖼️ {}", i),
Style::default()
.fg(Color::Magenta)
.add_modifier(Modifier::BOLD),
)))
} else {
ListItem::new(Line::from(i.as_str()))
}
})
.collect(); .collect();
let list = List::new(items) let list = List::new(items)
.block(Block::default().borders(Borders::ALL).title(" History ")) .block(Block::default().borders(Borders::ALL).title(" Historique "))
.highlight_style( .highlight_style(
Style::default() Style::default()
.bg(Color::DarkGray) .bg(Color::DarkGray)
@ -42,9 +48,8 @@ pub fn render(f: &mut Frame, app: &mut App) {
let right_panel_block = Block::default() let right_panel_block = Block::default()
.borders(Borders::ALL) .borders(Borders::ALL)
.title(" Prev ") .title(" Prévisualisation ")
.padding(Padding::uniform(1)); .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]); f.render_widget(right_panel_block, content_chunks[1]);
@ -59,25 +64,67 @@ pub fn render(f: &mut Frame, app: &mut App) {
f.render_widget(preview_paragraph, inner_right_area); f.render_widget(preview_paragraph, inner_right_area);
} }
let bottom_text = match app.mode { let bottom_block = Block::default().borders(Borders::ALL);
let inner_bottom_area = bottom_block.inner(main_chunks[1]);
f.render_widget(bottom_block, main_chunks[1]);
let bottom_chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Min(0), Constraint::Length(15)])
.split(inner_bottom_area);
let mode_text = match app.mode {
Mode::Normal => Line::from(vec![Span::styled( Mode::Normal => Line::from(vec![Span::styled(
"-- NORMAL --", " NORMAL ",
Style::default().fg(Color::Green), Style::default()
.bg(Color::Green)
.fg(Color::Black)
.add_modifier(Modifier::BOLD),
)]),
Mode::ConfirmDelete => Line::from(vec![Span::styled(
" Delete ? (y/n) ",
Style::default()
.bg(Color::Red)
.fg(Color::White)
.add_modifier(Modifier::BOLD),
)]), )]),
Mode::Command => Line::from(vec![ Mode::Command => Line::from(vec![
Span::styled(":", Style::default().fg(Color::Yellow)), Span::styled(
Span::raw(&app.input_buffer), " COMMAND ",
Style::default()
.bg(Color::Yellow)
.fg(Color::Black)
.add_modifier(Modifier::BOLD),
),
Span::raw(format!(" :{}", app.input_buffer)),
]), ]),
Mode::Search => Line::from(vec![ Mode::Search => Line::from(vec![
Span::styled("/", Style::default().fg(Color::Cyan)), Span::styled(
Span::raw(&app.input_buffer), " SEARCH ",
Style::default()
.bg(Color::Cyan)
.fg(Color::Black)
.add_modifier(Modifier::BOLD),
),
Span::raw(format!(" /{}", app.input_buffer)),
]), ]),
Mode::ConfirmDelete => Line::from(vec![Span::styled( };
"Delete ? (y/n)", f.render_widget(Paragraph::new(mode_text), bottom_chunks[0]);
Style::default().fg(Color::Red).add_modifier(Modifier::BOLD),
)]), let total = app.filtered_items.len();
let current = if total == 0 {
0
} else {
app.list_state.selected().unwrap_or(0) + 1
}; };
let bottom_bar = Paragraph::new(bottom_text).block(Block::default().borders(Borders::ALL)); let stats_text = Line::from(vec![Span::styled(
f.render_widget(bottom_bar, main_chunks[1]); format!(" {}/{} ", current, total),
Style::default()
.fg(Color::Yellow)
.add_modifier(Modifier::BOLD),
)])
.alignment(Alignment::Right);
f.render_widget(Paragraph::new(stats_text), bottom_chunks[1]);
} }