use crate::render::RenderContext;
use crate::panel_api::types::{PanelRect, PanelInput, PanelTheme};
use crate::panel_api::toolbar::PanelToolbarDef;
pub use std::any::Any;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum ToolbarPosition {
#[default]
Top,
Left,
Right,
Bottom,
}
pub trait PanelApp {
fn title(&self) -> &str;
fn type_id(&self) -> &'static str;
fn min_size(&self) -> (f64, f64) { (200.0, 200.0) }
fn toolbar_def(&self) -> Option<PanelToolbarDef> { None }
fn toolbar_position(&self) -> ToolbarPosition { ToolbarPosition::Top }
fn render_toolbar(
&self,
ctx: &mut dyn RenderContext,
rect: PanelRect,
theme: &PanelTheme,
input: &PanelInput,
) -> Vec<crate::panel_api::types::HitZone> {
let _ = (ctx, rect, theme, input);
Vec::new()
}
fn render_content(
&mut self,
ctx: &mut dyn RenderContext,
rect: PanelRect,
input: &PanelInput,
) {
let _ = (ctx, rect, input);
}
fn as_any_mut(&mut self) -> &mut dyn Any {
panic!("PanelApp::as_any_mut not overridden for panel type_id: {}", PanelApp::type_id(self))
}
fn handle_toolbar_click(&mut self, item_id: &str) -> Option<String> {
let _ = item_id;
None
}
fn handle_dropdown_select(&mut self, dropdown_id: &str, item_id: &str) -> Option<String> {
let _ = (dropdown_id, item_id);
None
}
fn supports_toolbar_grouping(&self) -> bool { false }
}