From bb7178262d721d61062b151df17bc2ba9f327366 Mon Sep 17 00:00:00 2001 From: pablu Date: Wed, 3 Jun 2026 00:59:42 +0200 Subject: increment version in cargo.toml to v0.2.0, add filtering of worldset to installed_packages view, make use flags actually readable for packages with alot of useflags --- src/widgets/use_flags.rs | 84 +++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 33 deletions(-) (limited to 'src/widgets/use_flags.rs') diff --git a/src/widgets/use_flags.rs b/src/widgets/use_flags.rs index 711a45a..59e5781 100644 --- a/src/widgets/use_flags.rs +++ b/src/widgets/use_flags.rs @@ -2,7 +2,8 @@ use ratatui::{ Frame, layout::Rect, style::{Color, Modifier}, - widgets::{Block, Borders, List, ListItem, ListState}, + text::{Line, Span}, + widgets::{Block, Borders, List, ListItem, ListState, Paragraph}, }; use crate::{gentoo::InstalledPackage, theme::Theme}; @@ -12,36 +13,53 @@ pub fn render_use_flags(frame: &mut Frame, area: Rect, package: Option<&Installe return; }; - let items = package.iuse.iter().map(|x| { - let text_style = if package.enabled_use_flags.contains(&x.name) { - Theme::success() - } else if x.default { - Theme::info() - } else { - Theme::error() - }; - - let text_style = if x.default { - text_style.add_modifier(Modifier::ITALIC) - } else { - text_style - }; - - ListItem::new(x.name.clone()).style(text_style) - }); - let list = List::new(items) - .style(Color::White) - .scroll_padding(1) - .direction(ratatui::widgets::ListDirection::TopToBottom) - .block( - Block::default() - .borders(Borders::ALL) - .title("USE Flags") - .border_style(Theme::block()), - ); - - let mut list_state = ListState::default(); - list_state.select_first(); - - frame.render_stateful_widget(list, area, &mut list_state); + let flags: Vec<_> = package.iuse.iter().collect(); + + let max_len = flags.iter().map(|f| f.name.len()).max().unwrap_or(1); + + // width per column (+ padding between columns) + let col_width = max_len as u16 + 3; + + let columns = (area.width / col_width).max(1) as usize; + let rows = flags.len().div_ceil(columns); + + let mut lines = Vec::new(); + + for row in 0..rows { + let mut spans = Vec::new(); + + for col in 0..columns { + let idx = row * columns + col; + + if let Some(flag) = flags.get(idx) { + let mut style = if package.enabled_use_flags.contains(&flag.name) { + Theme::success() + } else if flag.default { + Theme::info() + } else { + Theme::error() + }; + + if flag.default { + style = style.add_modifier(Modifier::ITALIC); + } + + spans.push(Span::styled( + format!("{: