Пример #1
0
        public FontPropertyEditor(IPropertyEditorParams editorParams) : base(editorParams)
        {
            selector            = editorParams.DropDownListFactory();
            selector.LayoutCell = new LayoutCell(Alignment.Center);
            EditorContainer.AddNode(selector);
            var propType = editorParams.PropertyInfo.PropertyType;
            var items    = AssetBundle.Current.EnumerateFiles(defaultFontDirectory).
                           Where(i => i.EndsWith(".fnt") || i.EndsWith(".tft") || i.EndsWith(".cft")).
                           Select(i => new DropDownList.Item(FontPool.ExtractFontNameFromPath(i, defaultFontDirectory)));

            foreach (var i in items)
            {
                selector.Items.Add(i);
            }

            var current = CoalescedPropertyValue().GetValue();

            selector.Text     = current.IsDefined ? GetFontName(current.Value) : ManyValuesText;
            selector.Changed += a => {
                SetProperty(new SerializableFont((string)a.Value));
            };
            selector.AddChangeLateWatcher(CoalescedPropertyValue(), i => {
                selector.Text = i.IsDefined ? GetFontName(i.Value): ManyValuesText;
            });
        }
Пример #2
0
        public EnumPropertyEditor(IPropertyEditorParams editorParams) : base(editorParams)
        {
            Selector            = editorParams.DropDownListFactory();
            Selector.LayoutCell = new LayoutCell(Alignment.Center);
            EditorContainer.AddNode(Selector);
            var propType      = editorParams.PropertyInfo.PropertyType;
            var fields        = propType.GetFields(BindingFlags.Public | BindingFlags.Static);
            var allowedFields = fields.Where(f => !Attribute.IsDefined((MemberInfo)f, typeof(TangerineIgnoreAttribute)));

            foreach (var field in allowedFields)
            {
                Selector.Items.Add(new CommonDropDownList.Item(field.Name, field.GetValue(null)));
            }
            Selector.Changed += a => {
                if (a.ChangedByUser)
                {
                    SetProperty((T)Selector.Items[a.Index].Value);
                }
            };
            Selector.AddChangeLateWatcher(CoalescedPropertyValue(), v => {
                if (v.IsDefined)
                {
                    Selector.Value = v.Value;
                }
                else
                {
                    Selector.Text = ManyValuesText;
                }
            });
        }
Пример #3
0
        public InstancePropertyEditor(IPropertyEditorParams editorParams, Action <Widget> OnValueChanged) : base(editorParams)
        {
            Selector            = editorParams.DropDownListFactory();
            Selector.LayoutCell = new LayoutCell(Alignment.Center);
            var propertyType = typeof(T);
            var meta         = Yuzu.Metadata.Meta.Get(editorParams.Type, InternalPersistence.Instance.YuzuCommonOptions);

            if (!propertyType.IsInterface)
            {
                Selector.Items.Add(new CommonDropDownList.Item(propertyType.Name, propertyType));
            }
            foreach (var t in DerivedTypesCache.GetDerivedTypesFor(propertyType))
            {
                Selector.Items.Add(new CommonDropDownList.Item(t.Name, t));
            }
            Selector.Changed += a => {
                if (a.ChangedByUser)
                {
                    Type type = (Type)Selector.Items[a.Index].Value;
                    SetProperty <object>((_) => type != null ? Activator.CreateInstance(type) : null);
                }
            };
            EditorContainer.AddChangeLateWatcher(CoalescedPropertyValue(
                                                     comparator: (t1, t2) => t1 == null && t2 == null || t1 != null && t2 != null && t1.GetType() == t2.GetType()),
                                                 v => {
                OnValueChanged?.Invoke(ExpandableContent);
                if (v.IsDefined)
                {
                    Selector.Value = v.Value?.GetType();
                }
                else
                {
                    Selector.Text = ManyValuesText;
                }
            }
                                                 );
            var    propertyMetaItem = meta.Items.FirstOrDefault(i => i.Name == editorParams.PropertyName);
            object defaultValue     = null;

            if (propertyMetaItem != null)
            {
                defaultValue         = propertyMetaItem.GetValue(meta.Default);
                resetToDefaultButton = new ToolbarButton(IconPool.GetTexture("Tools.Revert"))
                {
                    Clicked = () => SetProperty(defaultValue)
                };
                if (Selector.Items.Count == 1)
                {
                    var t = Selector.Items[0].Value as Type;
                    var b = new ToolbarButton("Create")
                    {
                        TabTravesable = new TabTraversable(),
                        LayoutCell    = new LayoutCell(Alignment.LeftCenter),
                        Padding       = new Thickness(left: 5.0f),
                        HitTestTarget = true,
                        MinWidth      = 0,
                        MaxWidth      = float.PositiveInfinity
                    };
                    b.Clicked = () => {
                        b.Visible = false;
                        SetProperty <object>(_ => t != null ? Activator.CreateInstance(t) : null);
                        OnValueChanged?.Invoke(ExpandableContent);
                        Expanded = true;
                    };
                    var value = CoalescedPropertyValue().GetValue();
                    b.Visible = Equals(value.Value, defaultValue);
                    resetToDefaultButton.Clicked = () => {
                        b.Visible = true;
                        SetProperty(defaultValue);
                        OnValueChanged?.Invoke(ExpandableContent);
                    };
                    EditorContainer.AddNode(b);
                    EditorContainer.AddNode(Spacer.HStretch());
                    OnValueChanged?.Invoke(ExpandableContent);
                }
                else
                {
                    EditorContainer.Nodes.Insert(0, Selector);
                }
                EditorContainer.AddNode(resetToDefaultButton);
                Selector.AddChangeLateWatcher(CoalescedPropertyValue(), v => {
                    resetToDefaultButton.Visible = !Equals(v.Value, defaultValue);
                });
            }
            else if (Selector.Items.Count == 1)
            {
                EditorContainer.Nodes.Insert(0, new ThemedSimpleText {
                    Text           = Selector.Items[0].Text,
                    VAlignment     = VAlignment.Center,
                    LayoutCell     = new LayoutCell(Alignment.LeftCenter),
                    ForceUncutText = false,
                    Padding        = new Thickness(left: 5.0f),
                    HitTestTarget  = true,
                    TabTravesable  = new TabTraversable()
                });
                OnValueChanged?.Invoke(ExpandableContent);
            }
            else
            {
                EditorContainer.Nodes.Insert(0, Selector);
            }
        }