sql_cli/debug/
viewport_debug.rs1use crate::debug::debug_trace::{DebugSection, DebugSectionBuilder, DebugTrace, Priority};
2use crate::ui::viewport_manager::ViewportManager;
3use std::sync::Arc;
4
5pub 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 builder.add_section("VIEWPORT STATE", "", Priority::VIEWPORT);
27
28 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 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 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 builder.add_field(
52 "Packing Mode",
53 format!("{:?}", self.viewport_manager.get_packing_mode()),
54 );
55
56 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 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 }
91}