fyrox_ui/inspector/editors/
bool.rs1use crate::inspector::editors::PropertyEditorTranslationContext;
22use crate::{
23 check_box::{CheckBoxBuilder, CheckBoxMessage},
24 inspector::{
25 editors::{
26 PropertyEditorBuildContext, PropertyEditorDefinition, PropertyEditorInstance,
27 PropertyEditorMessageContext,
28 },
29 FieldAction, InspectorError, PropertyChanged,
30 },
31 message::{MessageDirection, UiMessage},
32 widget::WidgetBuilder,
33 Thickness, VerticalAlignment,
34};
35use std::any::TypeId;
36
37#[derive(Debug)]
38pub struct BoolPropertyEditorDefinition;
39
40impl PropertyEditorDefinition for BoolPropertyEditorDefinition {
41 fn value_type_id(&self) -> TypeId {
42 TypeId::of::<bool>()
43 }
44
45 fn create_instance(
46 &self,
47 ctx: PropertyEditorBuildContext,
48 ) -> Result<PropertyEditorInstance, InspectorError> {
49 let value = ctx.property_info.cast_value::<bool>()?;
50 Ok(PropertyEditorInstance::simple(
51 CheckBoxBuilder::new(
52 WidgetBuilder::new()
53 .with_margin(Thickness::top_bottom(1.0))
54 .with_vertical_alignment(VerticalAlignment::Center),
55 )
56 .checked(Some(*value))
57 .build(ctx.build_context),
58 ))
59 }
60
61 fn create_message(
62 &self,
63 ctx: PropertyEditorMessageContext,
64 ) -> Result<Option<UiMessage>, InspectorError> {
65 let value = ctx.property_info.cast_value::<bool>()?;
66 Ok(Some(UiMessage::for_widget(
67 ctx.instance,
68 CheckBoxMessage::Check(Some(*value)),
69 )))
70 }
71
72 fn translate_message(&self, ctx: PropertyEditorTranslationContext) -> Option<PropertyChanged> {
73 if ctx.message.direction() == MessageDirection::FromWidget {
74 if let Some(CheckBoxMessage::Check(Some(value))) = ctx.message.data::<CheckBoxMessage>()
75 {
76 return Some(PropertyChanged {
77 name: ctx.name.to_string(),
78 action: FieldAction::object(*value),
79 });
80 }
81 }
82 None
83 }
84}