Checkbox

Checkbox example

The checkbox widget is used to toggle a value, which should be bound to a signal.

It can be used like this:

#![allow(unused)]
fn main() {
Checkbox::new(MaybeSignal::signal(some_signal))
}

or the full example:

use maycoon::core::app::context::AppContext;
use maycoon::core::app::Application;
use maycoon::core::config::MayConfig;
use maycoon::core::layout::{AlignItems, Dimension, FlexDirection, LayoutStyle};
use maycoon::core::reference::Ref;
use maycoon::core::signal::state::StateSignal;
use maycoon::core::signal::{MaybeSignal, Signal};
use maycoon::core::widget::{Widget, WidgetLayoutExt};
use maycoon::math::Vector2;
use maycoon::theme::theme::celeste::CelesteTheme;
use maycoon::widgets::checkbox::Checkbox;
use maycoon::widgets::container::Container;
use maycoon::widgets::text::Text;

struct MyApp;

impl Application for MyApp {
    type Theme = CelesteTheme;

    fn build(context: AppContext) -> impl Widget {
        let checked = context.use_signal(StateSignal::new(false));

        Container::new(vec![
            {
                let checked = checked.clone();

                Box::new(Checkbox::new(MaybeSignal::signal(checked)))
            },
            {
                let checked = checked.clone();

                Box::new(Text::new(checked.map(|val| Ref::Owned(val.to_string()))))
            },
        ])
        .with_layout_style(LayoutStyle {
            size: Vector2::<Dimension>::new(Dimension::percent(1.0), Dimension::percent(1.0)),
            flex_direction: FlexDirection::Column,
            align_items: Some(AlignItems::Center),
            ..Default::default()
        })
    }

    fn config(&self) -> MayConfig<Self::Theme> {
        MayConfig::default()
    }
}

fn main() {
    MyApp.run()
}