use std::{collections::HashMap, fmt::Debug};
use r3bl_rs_utils_core::*;
use crate::*;
#[derive(Clone, PartialEq, Eq, Debug, Default)]
pub struct HasFocus {
pub cursor_position_map: CursorPositionMap,
pub id: Option<String>,
}
pub type CursorPositionMap = HashMap<String, Option<Position>>;
impl HasFocus {
pub fn get_id(&self) -> Option<String> { self.id.clone() }
pub fn set_id(&mut self, id: &str) { self.id = Some(id.into()) }
pub fn does_id_have_focus(&self, id: &str) -> bool { self.id == Some(id.into()) }
pub fn does_current_box_have_focus(&self, current_box: &FlexBox) -> bool {
self.does_id_have_focus(¤t_box.id)
}
pub fn set_cursor_position_for_id(&mut self, id: &str, maybe_position: Option<Position>) {
let map = &mut self.cursor_position_map;
map.insert(id.into(), maybe_position);
}
pub fn get_cursor_position_for_id(&self, id: &str) -> Option<Position> {
let map = &self.cursor_position_map;
if let Some(value) = map.get(id) {
*value
} else {
None
}
}
}