sql_cli/debug/
viewport_debug.rs

1use crate::debug::debug_trace::{DebugSection, DebugSectionBuilder, DebugTrace, Priority};
2use crate::ui::viewport_manager::ViewportManager;
3use std::sync::Arc;
4
5/// Debug trace implementation for ViewportManager
6pub struct ViewportDebugProvider {
7    viewport_manager: Arc<ViewportManager>,
8}
9
10impl ViewportDebugProvider {
11    pub fn new(viewport_manager: Arc<ViewportManager>) -> Self {
12        Self { viewport_manager }
13    }
14}
15
16impl DebugTrace for ViewportDebugProvider {
17    fn name(&self) -> &str {
18        "ViewportManager"
19    }
20
21    fn debug_sections(&self) -> Vec<DebugSection> {
22        let mut builder = DebugSectionBuilder::new();
23
24        // Main viewport state section
25        builder.add_section("VIEWPORT STATE", "", Priority::VIEWPORT);
26
27        // Get crosshair position
28        let crosshair_row = self.viewport_manager.get_crosshair_row();
29        let crosshair_col = self.viewport_manager.get_crosshair_col();
30        builder.add_field(
31            "Crosshair Position",
32            format!("row={}, col={}", crosshair_row, crosshair_col),
33        );
34
35        // Get viewport range
36        let viewport_range = self.viewport_manager.get_viewport_range();
37        builder.add_field(
38            "Viewport Range",
39            format!("{}-{}", viewport_range.start, viewport_range.end),
40        );
41
42        // Get viewport rows
43        let viewport_rows = self.viewport_manager.get_viewport_rows();
44        builder.add_field(
45            "Viewport Rows",
46            format!("{}-{}", viewport_rows.start, viewport_rows.end),
47        );
48
49        // Packing mode
50        builder.add_field(
51            "Packing Mode",
52            format!("{:?}", self.viewport_manager.get_packing_mode()),
53        );
54
55        // Lock states
56        builder.add_field("Cursor Locked", self.viewport_manager.is_cursor_locked());
57        builder.add_field(
58            "Viewport Locked",
59            self.viewport_manager.is_viewport_locked(),
60        );
61
62        // Note: Pinned columns info would go here if ViewportManager supported it
63        // Currently ViewportManager doesn't expose pinned column information
64
65        // Note: Column width information requires mutable access
66        // which we can't get through the Arc<ViewportManager>
67        // This information could be added if ViewportManager provided
68        // a non-mutable accessor for cached column widths
69
70        builder.build()
71    }
72
73    fn debug_summary(&self) -> Option<String> {
74        let viewport_rows = self.viewport_manager.get_viewport_rows();
75        let viewport_cols = self.viewport_manager.get_viewport_range();
76        let crosshair_row = self.viewport_manager.get_crosshair_row();
77        let crosshair_col = self.viewport_manager.get_crosshair_col();
78        Some(format!(
79            "Viewport: {} rows x {} cols, Crosshair: ({}, {})",
80            viewport_rows.end - viewport_rows.start,
81            viewport_cols.end - viewport_cols.start,
82            crosshair_row,
83            crosshair_col
84        ))
85    }
86
87    fn is_active(&self) -> bool {
88        true // ViewportManager is always active when present
89    }
90}