ui
This commit is contained in:
57
src/ui.rs
57
src/ui.rs
@ -4,7 +4,7 @@ use ratatui::{
|
|||||||
layout::{Alignment, 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, BorderType, Borders, List, ListItem, Padding, Paragraph},
|
||||||
};
|
};
|
||||||
use ratatui_image::StatefulImage;
|
use ratatui_image::StatefulImage;
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ 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(40), Constraint::Min(0)])
|
.constraints([Constraint::Length(45), Constraint::Min(0)])
|
||||||
.split(main_chunks[0]);
|
.split(main_chunks[0]);
|
||||||
|
|
||||||
let items: Vec<ListItem> = app
|
let items: Vec<ListItem> = app
|
||||||
@ -31,27 +31,49 @@ pub fn render(f: &mut Frame, app: &mut App) {
|
|||||||
.add_modifier(Modifier::BOLD),
|
.add_modifier(Modifier::BOLD),
|
||||||
)))
|
)))
|
||||||
} else {
|
} else {
|
||||||
ListItem::new(Line::from(i.as_str()))
|
ListItem::new(Line::from(format!(" {}", i)))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let list = List::new(items)
|
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(
|
.highlight_style(
|
||||||
Style::default()
|
Style::default()
|
||||||
.bg(Color::DarkGray)
|
.bg(Color::Rgb(40, 44, 52))
|
||||||
|
.fg(Color::White)
|
||||||
.add_modifier(Modifier::BOLD),
|
.add_modifier(Modifier::BOLD),
|
||||||
)
|
)
|
||||||
.highlight_symbol(">> ");
|
.highlight_symbol(">> ");
|
||||||
|
|
||||||
f.render_stateful_widget(list, content_chunks[0], &mut app.list_state);
|
f.render_stateful_widget(list, content_chunks[0], &mut app.list_state);
|
||||||
|
|
||||||
let right_panel_block = Block::default()
|
let right_panel_block = Block::default()
|
||||||
.borders(Borders::ALL)
|
.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));
|
.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]);
|
||||||
|
|
||||||
if let Some(state) = &mut app.current_image {
|
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);
|
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]);
|
let inner_bottom_area = bottom_block.inner(main_chunks[1]);
|
||||||
f.render_widget(bottom_block, 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)),
|
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 total = app.filtered_items.len();
|
||||||
let current = if total == 0 {
|
let current = if total == 0 {
|
||||||
@ -121,7 +158,7 @@ pub fn render(f: &mut Frame, app: &mut App) {
|
|||||||
let stats_text = Line::from(vec![Span::styled(
|
let stats_text = Line::from(vec![Span::styled(
|
||||||
format!("{}/{} ", current, total),
|
format!("{}/{} ", current, total),
|
||||||
Style::default()
|
Style::default()
|
||||||
.fg(Color::Yellow)
|
.fg(Color::DarkGray)
|
||||||
.add_modifier(Modifier::BOLD),
|
.add_modifier(Modifier::BOLD),
|
||||||
)])
|
)])
|
||||||
.alignment(Alignment::Right);
|
.alignment(Alignment::Right);
|
||||||
|
|||||||
Reference in New Issue
Block a user