aboutsummaryrefslogtreecommitdiff
path: root/src/widgets
diff options
context:
space:
mode:
authorpablu <me@pablu.de>2026-06-02 19:55:57 +0200
committerpablu <me@pablu.de>2026-06-02 19:55:57 +0200
commit0f9492c0da3ac6d391b7b0d32ea2a391b94a18f4 (patch)
treea1fb59a02068ad49ea40d055e3b5e00da3db63a3 /src/widgets
parentb547e6758c635682c94794e5c13070a73c918203 (diff)
near feature parity with previous architecture
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/mod.rs1
-rw-r--r--src/widgets/package_metadata.rs6
-rw-r--r--src/widgets/tabs.rs24
-rw-r--r--src/widgets/use_flags.rs8
4 files changed, 36 insertions, 3 deletions
diff --git a/src/widgets/mod.rs b/src/widgets/mod.rs
index 66f4b70..7bf8fde 100644
--- a/src/widgets/mod.rs
+++ b/src/widgets/mod.rs
@@ -1,3 +1,4 @@
pub mod helpers;
pub mod package_metadata;
+pub mod tabs;
pub mod use_flags;
diff --git a/src/widgets/package_metadata.rs b/src/widgets/package_metadata.rs
index e4f83bb..7377cbc 100644
--- a/src/widgets/package_metadata.rs
+++ b/src/widgets/package_metadata.rs
@@ -12,7 +12,11 @@ use crate::{
widgets::helpers::{homepage_lines, human_size},
};
-pub fn render_package_metadata(frame: &mut Frame, area: Rect, pkg: &InstalledPackage) {
+pub fn render_package_metadata(frame: &mut Frame, area: Rect, pkg: Option<&InstalledPackage>) {
+ let Some(pkg) = pkg else {
+ return;
+ };
+
let bold_style = Theme::title(); //Style::default().add_modifier(Modifier::BOLD);
let maintainer = Line::from_iter([
Span::styled("Maintainer: ", bold_style),
diff --git a/src/widgets/tabs.rs b/src/widgets/tabs.rs
new file mode 100644
index 0000000..aca7685
--- /dev/null
+++ b/src/widgets/tabs.rs
@@ -0,0 +1,24 @@
+use ratatui::{
+ Frame,
+ layout::Rect,
+ symbols,
+ widgets::{Block, Borders, Tabs},
+};
+
+use crate::{app::ViewState, theme::Theme};
+
+pub fn render_tab(frame: &mut Frame, area: Rect, selected_tab: &ViewState) {
+ let selected_index = match selected_tab {
+ ViewState::Dashboard => 0,
+ ViewState::InstalledPackages => 1,
+ ViewState::AvailablePackages => 2,
+ };
+
+ let tabs = Tabs::new(vec!["Dashboard", "Installed", "Browse"])
+ .block(Block::default().borders(Borders::ALL).style(Theme::block()))
+ .highlight_style(Theme::success())
+ .select(selected_index)
+ .divider(symbols::DOT)
+ .padding(" ", " ");
+ frame.render_widget(tabs, area);
+}
diff --git a/src/widgets/use_flags.rs b/src/widgets/use_flags.rs
index 8e2ecf4..711a45a 100644
--- a/src/widgets/use_flags.rs
+++ b/src/widgets/use_flags.rs
@@ -5,9 +5,13 @@ use ratatui::{
widgets::{Block, Borders, List, ListItem, ListState},
};
-use crate::{app::App, gentoo::InstalledPackage, theme::Theme};
+use crate::{gentoo::InstalledPackage, theme::Theme};
+
+pub fn render_use_flags(frame: &mut Frame, area: Rect, package: Option<&InstalledPackage>) {
+ let Some(package) = package else {
+ return;
+ };
-pub fn render_use_flags(frame: &mut Frame, area: Rect, package: &InstalledPackage) {
let items = package.iuse.iter().map(|x| {
let text_style = if package.enabled_use_flags.contains(&x.name) {
Theme::success()