use crate::debug::debug_trace::{DebugSection, DebugSectionBuilder, DebugTrace, Priority};
use crate::ui::viewport_manager::ViewportManager;
use std::sync::Arc;
pub struct ViewportDebugProvider {
viewport_manager: Arc<ViewportManager>,
}
impl ViewportDebugProvider {
#[must_use]
pub fn new(viewport_manager: Arc<ViewportManager>) -> Self {
Self { viewport_manager }
}
}
impl DebugTrace for ViewportDebugProvider {
fn name(&self) -> &'static str {
"ViewportManager"
}
fn debug_sections(&self) -> Vec<DebugSection> {
let mut builder = DebugSectionBuilder::new();
builder.add_section("VIEWPORT STATE", "", Priority::VIEWPORT);
let crosshair_row = self.viewport_manager.get_crosshair_row();
let crosshair_col = self.viewport_manager.get_crosshair_col();
builder.add_field(
"Crosshair Position",
format!("row={crosshair_row}, col={crosshair_col}"),
);
let viewport_range = self.viewport_manager.get_viewport_range();
builder.add_field(
"Viewport Range",
format!("{}-{}", viewport_range.start, viewport_range.end),
);
let viewport_rows = self.viewport_manager.get_viewport_rows();
builder.add_field(
"Viewport Rows",
format!("{}-{}", viewport_rows.start, viewport_rows.end),
);
builder.add_field(
"Packing Mode",
format!("{:?}", self.viewport_manager.get_packing_mode()),
);
builder.add_field("Cursor Locked", self.viewport_manager.is_cursor_locked());
builder.add_field(
"Viewport Locked",
self.viewport_manager.is_viewport_locked(),
);
builder.build()
}
fn debug_summary(&self) -> Option<String> {
let viewport_rows = self.viewport_manager.get_viewport_rows();
let viewport_cols = self.viewport_manager.get_viewport_range();
let crosshair_row = self.viewport_manager.get_crosshair_row();
let crosshair_col = self.viewport_manager.get_crosshair_col();
Some(format!(
"Viewport: {} rows x {} cols, Crosshair: ({}, {})",
viewport_rows.end - viewport_rows.start,
viewport_cols.end - viewport_cols.start,
crosshair_row,
crosshair_col
))
}
fn is_active(&self) -> bool {
true }
}