use std::rc::Rc;
use teksilo_tokens::BorderRole;
use crate::build_context::BuildContext;
use crate::signal::Signal;
use crate::widget_id::WidgetId;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SortDirection {
Ascending,
Descending,
}
pub struct TableHeaderCellConfig {
pub label: WidgetId,
pub sort: Option<SortDirection>,
pub is_hovered: Signal<bool>,
pub is_resizing: Signal<bool>,
}
pub struct TableRowConfig {
pub index: usize,
pub is_selected: Signal<bool>,
pub is_hovered: Signal<bool>,
pub is_alt: bool,
pub is_focused: Option<Signal<bool>>,
pub is_window_active: Option<Signal<bool>>,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct TableGridRecipe {
pub line_thickness: f32,
pub line_role: BorderRole,
pub frozen_shadow_width: f32,
}
impl Default for TableGridRecipe {
fn default() -> Self {
Self {
line_thickness: 1.0,
line_role: BorderRole::Divider,
frozen_shadow_width: 4.0,
}
}
}
pub trait TableStyle: 'static {
fn make_header_cell(&self, cfg: &TableHeaderCellConfig, ctx: &mut BuildContext) -> WidgetId;
fn make_sort_indicator(&self, direction: SortDirection, ctx: &mut BuildContext) -> WidgetId;
fn make_row_background(&self, cfg: &TableRowConfig, ctx: &mut BuildContext) -> WidgetId;
fn grid(&self) -> TableGridRecipe;
}
pub type SharedTableStyle = Rc<dyn TableStyle>;