ai_code_buddy/widget_states/
analysis.rs

1use crate::core::review::Review;
2use bevy::prelude::*;
3
4#[derive(Debug, Clone, Resource)]
5pub struct AnalysisWidgetState {
6    pub is_analyzing: bool,
7    pub progress: f64,
8    pub current_file: String,
9    pub review: Option<Review>,
10    pub selected_issue: usize,
11}
12
13impl Default for AnalysisWidgetState {
14    fn default() -> Self {
15        Self {
16            is_analyzing: false,
17            progress: 0.0,
18            current_file: String::new(),
19            review: None,
20            selected_issue: 0,
21        }
22    }
23}
24
25impl AnalysisWidgetState {
26    pub fn start_analysis(&mut self) {
27        self.is_analyzing = true;
28        self.progress = 0.0;
29        self.current_file.clear();
30        self.review = None;
31    }
32
33    #[allow(dead_code)]
34    pub fn update_progress(&mut self, progress: f64, current_file: String) {
35        self.progress = progress;
36        self.current_file = current_file;
37    }
38
39    pub fn complete_analysis(&mut self, review: Review) {
40        self.is_analyzing = false;
41        self.progress = 100.0;
42        self.review = Some(review);
43        self.selected_issue = 0;
44    }
45
46    pub fn move_issue_selection(&mut self, direction: i32) {
47        if let Some(review) = &self.review {
48            if !review.issues.is_empty() {
49                let new_selection = (self.selected_issue as i32 + direction)
50                    .max(0)
51                    .min(review.issues.len() as i32 - 1)
52                    as usize;
53                self.selected_issue = new_selection;
54            }
55        }
56    }
57}