ai_code_buddy/widget_states/
analysis.rs1use 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}