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