1mod app;
2mod constants;
3mod event;
4mod event_loop;
5mod terminal;
6mod view;
7
8pub mod utils;
9
10pub use app::{AppState, InputEvent, LoadingOperation, OutputEvent, SessionInfo};
11pub use event_loop::{RulebookConfig, run_tui};
12pub use ratatui::style::Color;
13
14mod services;
15
16use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
17use crossterm::execute;
18pub use event::map_crossterm_event_to_input_event;
19use ratatui::style::Style;
20use std::io;
21pub use terminal::TerminalGuard;
22pub use view::view;
23
24use crate::services::message::{Message, invalidate_message_lines_cache};
25
26pub fn toggle_mouse_capture(state: &mut AppState) -> io::Result<()> {
27 state.mouse_capture_enabled = !state.mouse_capture_enabled;
28
29 if state.mouse_capture_enabled {
30 execute!(std::io::stdout(), EnableMouseCapture)?;
31 } else {
32 execute!(std::io::stdout(), DisableMouseCapture)?;
33 }
34
35 let status = if state.mouse_capture_enabled {
36 "enabled"
37 } else {
38 "disabled . Ctrl+L to enable"
39 };
40
41 let color = if state.mouse_capture_enabled {
42 Color::LightGreen
43 } else {
44 Color::LightRed
45 };
46 state.messages.push(Message::info("SPACING_MARKER", None));
47 state.messages.push(Message::info(
48 format!("Mouse capture {}", status),
49 Some(Style::default().fg(color)),
50 ));
51 state.messages.push(Message::info("SPACING_MARKER", None));
52
53 invalidate_message_lines_cache(state);
55
56 Ok(())
57}