ai-code-buddy 0.4.20

An AI-powered code review tool with elegant Bevy-based TUI
Documentation
use bevy::prelude::*;
use ratatui::layout::{Position, Rect};
use std::collections::HashMap;

#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub enum CreditsComponent {
    BackToOverview,
    ScrollUp,
    ScrollDown,
}

#[derive(Debug, Clone, Resource)]
pub struct CreditsWidgetState {
    #[allow(dead_code)]
    pub selected_component: CreditsComponent,
    #[allow(dead_code)]
    pub hovered_component: Option<CreditsComponent>,
    pub registered_components: HashMap<CreditsComponent, Rect>,
    pub scroll_offset: usize,
    pub total_lines: usize,
}

impl Default for CreditsWidgetState {
    fn default() -> Self {
        Self {
            selected_component: CreditsComponent::BackToOverview,
            hovered_component: None,
            registered_components: HashMap::new(),
            scroll_offset: 0,
            total_lines: 0,
        }
    }
}

impl CreditsWidgetState {
    pub fn is_over(&self, component: CreditsComponent, x: u16, y: u16) -> bool {
        if let Some(rect) = self.registered_components.get(&component) {
            rect.contains(Position { x, y })
        } else {
            false
        }
    }

    pub fn scroll_up(&mut self) {
        if self.scroll_offset > 0 {
            self.scroll_offset = self.scroll_offset.saturating_sub(5);
        }
    }

    pub fn scroll_down(&mut self) {
        if self.scroll_offset < self.total_lines.saturating_sub(20) {
            self.scroll_offset += 5;
        }
    }
}