Skip to main content

vtcode_tui/core_tui/session/
impl_layout.rs

1use super::*;
2use crate::ui::tui::widgets::LayoutMode;
3
4impl Session {
5    pub(crate) fn resolved_layout_mode(&self, area: Rect) -> LayoutMode {
6        match self.appearance.layout_mode {
7            config::LayoutModeOverride::Auto => LayoutMode::from_area(area),
8            config::LayoutModeOverride::Compact => LayoutMode::Compact,
9            config::LayoutModeOverride::Standard => LayoutMode::Standard,
10            config::LayoutModeOverride::Wide => LayoutMode::Wide,
11        }
12    }
13
14    pub fn apply_view_rows(&mut self, rows: u16) {
15        let resolved = rows.max(2);
16        if self.view_rows != resolved {
17            self.view_rows = resolved;
18            self.invalidate_scroll_metrics();
19        }
20        self.recalculate_transcript_rows();
21        self.enforce_scroll_bounds();
22    }
23
24    pub(crate) fn apply_transcript_rows(&mut self, rows: u16) {
25        let resolved = rows.max(1);
26        if self.transcript_rows != resolved {
27            self.transcript_rows = resolved;
28            self.invalidate_scroll_metrics();
29        }
30    }
31
32    pub(crate) fn apply_transcript_width(&mut self, width: u16) {
33        if self.transcript_width != width {
34            self.transcript_width = width;
35            self.invalidate_scroll_metrics();
36        }
37    }
38
39    #[allow(dead_code)]
40    pub(crate) fn force_view_rows(&mut self, rows: u16) {
41        self.apply_view_rows(rows);
42    }
43
44    pub(crate) fn recalculate_transcript_rows(&mut self) {
45        // Calculate reserved rows: header + input + borders (2)
46        let header_rows = self.header_rows.max(ui::INLINE_HEADER_HEIGHT);
47        let reserved = (header_rows + self.input_height).saturating_add(2);
48        let available = self.view_rows.saturating_sub(reserved).max(1);
49
50        if self.transcript_rows != available {
51            self.transcript_rows = available;
52            self.invalidate_scroll_metrics();
53        }
54    }
55}