rush_sync_server/ui/
widget.rs

1use crate::core::prelude::*;
2use crate::input::state::InputStateBackup;
3use ratatui::widgets::Paragraph;
4
5pub trait Widget {
6    fn render(&self) -> Paragraph;
7
8    fn render_with_cursor(&self) -> (Paragraph, Option<(u16, u16)>) {
9        (self.render(), None) // Default: Kein Terminal-Cursor
10    }
11
12    fn handle_input(&mut self, key: KeyEvent) -> Option<String>;
13    fn as_input_state(&mut self) -> Option<&mut dyn InputWidget> {
14        None
15    }
16
17    /// ✅ NEU: Get backup data (default: empty)
18    fn get_backup_data(&self) -> Option<InputStateBackup> {
19        None
20    }
21
22    /// ✅ NEU: Restore from backup data (default: do nothing)
23    fn restore_backup_data(&mut self, _backup: InputStateBackup) {
24        // Default implementation: do nothing
25    }
26}
27
28pub trait InputWidget {
29    fn update_cursor_blink(&mut self);
30}