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 FieldKind, 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 editor: 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(CheckBoxMessage::checked(
67 ctx.instance,
68 MessageDirection::ToWidget,
69 Some(*value),
70 )))
71 }
72
73 fn translate_message(&self, ctx: PropertyEditorTranslationContext) -> Option<PropertyChanged> {
74 if ctx.message.direction() == MessageDirection::FromWidget {
75 if let Some(CheckBoxMessage::Check(Some(value))) = ctx.message.data::<CheckBoxMessage>()
76 {
77 return Some(PropertyChanged {
78 name: ctx.name.to_string(),
79 owner_type_id: ctx.owner_type_id,
80 value: FieldKind::object(*value),
81 });
82 }
83 }
84 None
85 }
86}