fyrox_ui/inspector/editors/
uuid.rs1use crate::{
22 core::uuid::Uuid,
23 inspector::{
24 editors::{
25 PropertyEditorBuildContext, PropertyEditorDefinition, PropertyEditorInstance,
26 PropertyEditorMessageContext, PropertyEditorTranslationContext,
27 },
28 FieldKind, InspectorError, PropertyChanged,
29 },
30 message::{MessageDirection, UiMessage},
31 uuid::{UuidEditorBuilder, UuidEditorMessage},
32 widget::WidgetBuilder,
33 Thickness, VerticalAlignment,
34};
35use std::any::TypeId;
36
37#[derive(Debug)]
38pub struct UuidPropertyEditorDefinition;
39
40impl PropertyEditorDefinition for UuidPropertyEditorDefinition {
41 fn value_type_id(&self) -> TypeId {
42 TypeId::of::<Uuid>()
43 }
44
45 fn create_instance(
46 &self,
47 ctx: PropertyEditorBuildContext,
48 ) -> Result<PropertyEditorInstance, InspectorError> {
49 let value = ctx.property_info.cast_value::<Uuid>()?;
50 Ok(PropertyEditorInstance::Simple {
51 editor: UuidEditorBuilder::new(
52 WidgetBuilder::new()
53 .with_margin(Thickness::uniform(1.0))
54 .with_vertical_alignment(VerticalAlignment::Center),
55 )
56 .with_value(*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::<Uuid>()?;
66 Ok(Some(UuidEditorMessage::value(
67 ctx.instance,
68 MessageDirection::ToWidget,
69 *value,
70 )))
71 }
72
73 fn translate_message(&self, ctx: PropertyEditorTranslationContext) -> Option<PropertyChanged> {
74 if ctx.message.direction() == MessageDirection::FromWidget {
75 if let Some(UuidEditorMessage::Value(value)) = ctx.message.data() {
76 return Some(PropertyChanged {
77 name: ctx.name.to_string(),
78 owner_type_id: ctx.owner_type_id,
79 value: FieldKind::object(*value),
80 });
81 }
82 }
83 None
84 }
85}