use super::{FrameworkClean, ItemInfo};
use crossterm::event::KeyEvent;
use dyn_clone::DynClone;
use ratatui::{layout::Rect, Frame};
use std::{any::Any, collections::HashMap, error::Error};
#[allow(unused)]
pub trait FrameworkItem: DynClone + Any {
fn selectable(&self) -> bool {
true
}
fn select(&mut self, framework: &mut FrameworkClean) -> bool {
true
}
fn deselect(&mut self, framework: &mut FrameworkClean) -> bool {
true
}
fn render(
&mut self,
frame: &mut Frame,
framework: &mut FrameworkClean,
area: Rect,
popup_render: bool,
info: ItemInfo,
) {
}
fn load_item(
&mut self,
framework: &mut FrameworkClean,
info: ItemInfo,
) -> Result<(), Box<dyn Error>> {
Ok(())
}
fn key_event(
&mut self,
framework: &mut FrameworkClean,
key: KeyEvent,
info: ItemInfo,
) -> Result<(), Box<dyn Error>> {
Ok(())
}
fn mouse_event(
&mut self,
framework: &mut FrameworkClean,
x: u16,
y: u16,
absolute_x: u16,
absolute_y: u16,
) -> bool {
false
}
fn mouse_passthrough(
&mut self,
framework: &mut FrameworkClean,
selected: bool,
x: u16,
y: u16,
absolute_x: u16,
absolute_y: u16,
) -> bool {
false
}
fn message(
&mut self,
framework: &mut FrameworkClean,
data: HashMap<String, Box<dyn Any>>,
) -> bool {
false
}
}
impl Clone for Box<dyn FrameworkItem> {
fn clone(&self) -> Self {
dyn_clone::clone_box(&**self)
}
}