Added custom widget version of table

Currently does not have mouse interaction, in the demo the normal one is right and custom is left
This commit is contained in:
Adam Cosner 2025-01-01 18:04:12 -08:00
parent 9bd8f011b7
commit 6958a4cc36
3 changed files with 25 additions and 12 deletions

View file

@ -8,12 +8,12 @@ pub trait ItemCategory:
Default + std::fmt::Display + Clone + Copy + PartialEq + Eq + std::hash::Hash
{
/// Function that gets the width of the data
fn width(&self) -> iced::Length;
fn width(&self) -> u16;
}
pub trait ItemInterface<Category: ItemCategory>: Default {
fn get_icon(&self, category: Category) -> Option<Icon>;
fn get_text(&self, category: Category) -> Cow<'static, str>;
fn get_text(&self, category: Category) -> Option<String>;
fn compare(&self, other: &Self, category: Category) -> std::cmp::Ordering;
}

View file

@ -1,8 +1,21 @@
use std::collections::HashMap;
use iced::Size;
use slotmap::SecondaryMap;
use crate::widget::table::Entity;
use crate::widget::table::{Entity, ItemCategory};
pub struct State {
pub struct State<Category>
where
Category: ItemCategory + 'static,
{
pub(super) num_items: usize,
pub(super) selected: SecondaryMap<Entity, bool>,
pub(super) paragraphs: SecondaryMap<Entity, HashMap<Category, crate::Plain>>,
pub(super) text_hashes: SecondaryMap<Entity, u64>,
pub(super) item_layout: Vec<Size>,
pub(super) sort_hash: HashMap<Category, u64>,
pub(super) header_paragraphs: HashMap<Category, crate::Plain>,
pub(super) category_layout: Vec<Size>,
}