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 pub fn update_progress(&mut self, progress: f64, current_file: String) {
34 self.progress = progress;
35 self.current_file = current_file;
36 }
37
38 pub fn complete_analysis(&mut self, review: Review) {
39 self.is_analyzing = false;
40 self.progress = 100.0;
41 self.review = Some(review);
42 self.selected_issue = 0;
43 }
44
45 pub fn move_issue_selection(&mut self, direction: i32) {
46 if let Some(review) = &self.review {
47 if !review.issues.is_empty() {
48 let new_selection = (self.selected_issue as i32 + direction)
49 .max(0)
50 .min(review.issues.len() as i32 - 1)
51 as usize;
52 self.selected_issue = new_selection;
53 }
54 }
55 }
56}