aboutsummaryrefslogtreecommitdiff
path: root/src/app.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.rs')
-rw-r--r--src/app.rs129
1 files changed, 22 insertions, 107 deletions
diff --git a/src/app.rs b/src/app.rs
index c014a49..2fb3b23 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -1,7 +1,7 @@
use color_eyre::eyre::Ok;
use ratatui::{
Frame,
- crossterm::event::{self, Event},
+ crossterm::event::{self, Event, KeyCode},
layout::{Constraint, Layout},
style::Stylize,
text::Text,
@@ -9,10 +9,13 @@ use ratatui::{
};
use crate::{
- actions::{Signal, signal},
- gentoo::{InstalledPackage, portage::Portage},
- screens::{installed_packages::InstalledPackagesScreen, screen::Screen},
+ actions::Signal,
+ gentoo::portage::Portage,
+ screens::{
+ dashboard::DashboardScreen, installed_packages::InstalledPackagesScreen, screen::Screen,
+ },
theme::Theme,
+ widgets::tabs::render_tab,
};
#[derive(Debug)]
@@ -27,11 +30,8 @@ pub struct App {
portage: Portage,
installed_package_screen: InstalledPackagesScreen,
+ dashboard_screen: DashboardScreen,
- // pub search_found: Option<bool>,
- // search_indexes: Option<Vec<usize>>,
- // pub search_indexes_len: Option<usize>,
- // pub current_search_index: Option<usize>,
pub view: ViewState,
}
@@ -40,6 +40,7 @@ impl App {
App {
portage,
+ dashboard_screen: DashboardScreen::default(),
installed_package_screen: InstalledPackagesScreen::default(),
view: ViewState::InstalledPackages,
@@ -52,13 +53,16 @@ impl App {
let layout = Layout::vertical(vec![Constraint::Length(3), Constraint::Fill(1)]);
let [tab_bar, rest] = frame.area().layout(&layout);
- // render_tab(frame, tab_bar, &app.view);
+ render_tab(frame, tab_bar, &self.view);
match self.view {
- crate::app::ViewState::InstalledPackages => {
+ ViewState::InstalledPackages => {
self.installed_package_screen
.draw(frame, rest, &self.portage)
}
+ ViewState::Dashboard => {
+ self.dashboard_screen.draw(frame, rest, &self.portage);
+ }
_ => frame.render_widget(Text::from("NOT IMPLEMENTED"), rest),
}
}
@@ -67,16 +71,21 @@ impl App {
if let Event::Key(key) = event::read()? {
let signal = match self.view {
crate::app::ViewState::InstalledPackages => {
- self.installed_package_screen.update(key)
+ self.installed_package_screen.update(key, &self.portage)
}
- _ => None,
+ // Fallback, primarly while implementing
+ _ => match key.code {
+ KeyCode::Char('q') => Some(Signal::Quit),
+ KeyCode::Tab => Some(Signal::CycleTab),
+ _ => None,
+ },
};
if let Some(signal) = signal {
match signal {
Signal::Quit => return Ok(true),
- Signal::CycleTab => todo!(),
+ Signal::CycleTab => self.cycle_current_tab(),
}
}
}
@@ -84,29 +93,6 @@ impl App {
Ok(false)
}
- pub fn world_count(&self) -> usize {
- self.portage.world_packages.len()
- }
-
- pub fn installed_packages(&self) -> &[InstalledPackage] {
- &self.portage.installed_packages
- }
-
- // pub fn current_package(&self) -> &InstalledPackage {
- // let selected_package_index = self.list_state.selected().unwrap_or_default();
- // &self.portage.installed_packages[selected_package_index]
- // }
-
- pub fn total_installed_size(&self) -> usize {
- self.portage.installed_packages.iter().map(|p| p.size).sum()
- }
-
- // pub fn toggle_search_window(&mut self) {
- // self.showing_search_window = !self.showing_search_window;
- // self.textarea.clear();
- // self.search_found = None;
- // }
-
pub fn cycle_current_tab(&mut self) {
match self.view {
ViewState::Dashboard => self.view = ViewState::InstalledPackages,
@@ -114,75 +100,4 @@ impl App {
ViewState::AvailablePackages => self.view = ViewState::Dashboard,
}
}
-
- // pub fn search(&mut self) -> bool {
- // let indexes: Vec<usize> = self
- // .portage
- // .installed_packages
- // .iter()
- // .enumerate()
- // .filter(|(_, s)| {
- // s.atom
- // .qualified_name()
- // .to_lowercase()
- // .contains(&self.textarea.lines()[0].to_lowercase())
- // })
- // .map(|(i, _)| i)
- // .collect();
- //
- // if let Some(index) = indexes.first() {
- // self.list_state.select(Some(*index));
- // self.search_indexes_len = Some(indexes.len());
- // self.search_indexes = Some(indexes);
- // self.current_search_index = Some(0);
- //
- // return true;
- // }
- //
- // self.search_indexes = None;
- //
- // false
- // }
- //
- // pub fn next_search(&mut self) {
- // let Some(mut current_index) = self.current_search_index else {
- // return;
- // };
- //
- // let Some(search_indexes) = &self.search_indexes else {
- // return;
- // };
- //
- // if current_index + 1 >= search_indexes.len() {
- // current_index = 0;
- // } else {
- // current_index += 1;
- // }
- //
- // let list_index = search_indexes[current_index];
- //
- // self.list_state.select(Some(list_index));
- // self.current_search_index = Some(current_index);
- // }
- //
- // pub fn prev_search(&mut self) {
- // let Some(mut current_index) = self.current_search_index else {
- // return;
- // };
- //
- // let Some(search_indexes) = &self.search_indexes else {
- // return;
- // };
- //
- // if current_index == 0 {
- // current_index = search_indexes.len() - 1;
- // } else {
- // current_index -= 1;
- // }
- //
- // let list_index = search_indexes[current_index];
- //
- // self.list_state.select(Some(list_index));
- // self.current_search_index = Some(current_index);
- // }
}