WIP: segmented_button::Model custom elements

This commit is contained in:
Jeremy Soller 2024-04-22 16:04:06 -06:00
parent 68becf32c2
commit 9a0c338876
No known key found for this signature in database
GPG key ID: D02FD439211AF56F
12 changed files with 60 additions and 57 deletions

View file

@ -9,37 +9,37 @@ use std::borrow::Cow;
/// A builder for a [`Model`].
#[derive(Default)]
pub struct ModelBuilder<SelectionMode: Default>(Model<SelectionMode>);
pub struct ModelBuilder<SelectionMode: Default, Message>(Model<SelectionMode, Message>);
/// Constructs a new item for the [`ModelBuilder`].
pub struct BuilderEntity<SelectionMode: Default> {
model: ModelBuilder<SelectionMode>,
pub struct BuilderEntity<SelectionMode: Default, Message> {
model: ModelBuilder<SelectionMode, Message>,
id: Entity,
}
impl<SelectionMode: Default> ModelBuilder<SelectionMode>
impl<SelectionMode: Default, Message> ModelBuilder<SelectionMode, Message>
where
Model<SelectionMode>: Selectable,
Model<SelectionMode, Message>: Selectable,
{
/// Inserts a new item and its associated data into the model.
#[must_use]
pub fn insert(
mut self,
builder: impl Fn(BuilderEntity<SelectionMode>) -> BuilderEntity<SelectionMode>,
builder: impl Fn(BuilderEntity<SelectionMode, Message>) -> BuilderEntity<SelectionMode, Message>,
) -> Self {
let id = self.0.insert().id();
builder(BuilderEntity { model: self, id }).model
}
/// Consumes the builder and returns the model.
pub fn build(self) -> Model<SelectionMode> {
pub fn build(self) -> Model<SelectionMode, Message> {
self.0
}
}
impl<SelectionMode: Default> BuilderEntity<SelectionMode>
impl<SelectionMode: Default, Message> BuilderEntity<SelectionMode, Message>
where
Model<SelectionMode>: Selectable,
Model<SelectionMode, Message>: Selectable,
{
/// Activates the newly-inserted item.
#[allow(clippy::must_use_candidate, clippy::return_self_not_must_use)]