Exemplo n.º 1
0
        public void BuildPanel()
        {
            this.ClearChilden();
            for (int i = 0; i < StringList.Count; i++)
            {
                PanelItem __newItem = UWidget.Create <PanelItem>();
                __newItem.TextField.Text = StringList[i];
                __newItem.AddButton.BindTo(i, "this");
                __newItem.AddButton.OnClick += AddButton_OnClick;
                __newItem.RemoveButton.BindTo(i, "this");
                __newItem.RemoveButton.OnClick += RemoveButton_OnClick;
                this.AddChild(__newItem);
            }

            this.Raise_onContainerChange();
        }
Exemplo n.º 2
0
        public bool SetEnumGeneric <T>()
        {
            if (!typeof(T).IsEnum)
            {
                return(false);
            }

            List <string> __enumOptions;

            if (UWidget.TryGetEnumOptions <T>(out __enumOptions))
            {
                this.Options = __enumOptions;
                this._isEnum = true;
                __enumType   = typeof(T);
                return(true);
            }
            else
            {
                this._isEnum = false;
                return(false);
            }
        }
Exemplo n.º 3
0
        //public static UEditorWidgetBase FindWidgetById(List<UEditorWidgetBase> RenderableWidgets, int WidgetID)
        public static UEditorWidgetBase FindWidgetById(IWidgetContainer Container, int WidgetID)
        {
            UEditorWidgetBase __retValue = null;

            //If the container itself is the widget we are searching for
            if (Container.ObjectID == WidgetID)
            {
                if (Container.GetType().IsSubclassOf(typeof(UEditorWidgetBase)))
                {
                    return((UEditorWidgetBase)Container);
                }
                else
                {
                    throw new Exception("FindWidgetById is unable to cast to " + Container.GetType().Name);
                }
            }

            //Loop through all children in the container
            foreach (var __widget in Container.Children)
            {
                if (__widget.ObjectID == WidgetID)
                {
                    return((UEditorWidgetBase)__widget);
                }

                //TODO: Update this to loop on the IWidgetContainer interface
                if (__widget.GetType().IsSubclassOf(typeof(UEditorPanelBase)))
                {
                    UEditorWidgetBase __subSearchResult = UWidget.FindWidgetById((IWidgetContainer)__widget, WidgetID);
                    if (__subSearchResult != null)
                    {
                        return(__subSearchResult);
                    }
                }
            }
            return(__retValue);
        }
Exemplo n.º 4
0
 public static T Create <T>(string Name = "", bool bSuppressBindingWarnings = false) where T : UEditorWidgetBase
 {
     return((T)UWidget.Create(typeof(T), Name, bSuppressBindingWarnings));
 }
Exemplo n.º 5
0
        private void CreatePropertyWidgets()
        {
            this.Children.Clear();

            MemberInfo[] __rawMembers = _boundWidget.GetType().GetMembers(BindingFlags.Instance | BindingFlags.Public);

            foreach (MemberInfo memberInfo in __rawMembers)
            {
                if (memberInfo.Name == "parent" || memberInfo.Name == "Name")
                {
                    continue;
                }

                if (memberInfo.IsDefined(typeof(UWidgetPropertyAttribute), true))
                {
                    //TODO: Binding returns success/fail, so we should wrap and check accordingly here.
                    if (memberInfo.MemberType == MemberTypes.Property || memberInfo.MemberType == MemberTypes.Field)
                    {
                        //Work out the property type
                        Type __castType;
                        switch (memberInfo.MemberType)
                        {
                        case MemberTypes.Event:
                            __castType = ((EventInfo)memberInfo).EventHandlerType;
                            break;

                        case MemberTypes.Field:
                            __castType = ((FieldInfo)memberInfo).FieldType;
                            break;

                        case MemberTypes.Property:
                            __castType = ((PropertyInfo)memberInfo).PropertyType;
                            break;

                        default:
                            __castType = typeof(System.Object);
                            break;
                        }

                        //Get the required UWidgetPropertyAttribute attribute
                        object[] __attributes = memberInfo.GetCustomAttributes(typeof(UWidgetPropertyAttribute), true);
                        if (__attributes.Length != 1)
                        {
                            throw new Exception("Unexpected number of UWidgetPropertyAttributes in UEditorControlPropertyPanel.CreatePropertyWidgets()");
                        }
                        UWidgetPropertyAttribute __propAttribute = (UWidgetPropertyAttribute)__attributes[0];

                        //Get the label for the control
                        string __controlLabel = memberInfo.Name;
                        if (__propAttribute.Label != "")
                        {
                            __controlLabel = __propAttribute.Label;
                        }


                        //Now we have the attribute assigned to the property we need to determin the correct control to draw
                        if (__propAttribute.HideInProperties == true)
                        {
                            continue; //Don't generate a widget
                        }

                        //If the attribute calls for a list option box with pre defined values.
                        if (__propAttribute.ListOptions != null && __propAttribute.ListOptions.Length > 0)
                        {
                            UEditorControlEnum __newControl = UWidget.Create <UEditorControlEnum>();
                            __newControl.Name                    = memberInfo.Name;
                            __newControl.PositionX               = 15;
                            __newControl.LayoutMode              = ePositioningLayout.Layout;
                            __newControl.PropertyLabel.Width     = 100;
                            __newControl.PropertyLabel.Clipping  = TextClipping.Clip;
                            __newControl.PropertyEnumPopup.Width = 180;
                            for (int i = 0; i < __propAttribute.ListOptions.Length; i++)
                            {
                                __newControl.PropertyEnumPopup.Options.Add(__propAttribute.ListOptions[i]);
                            }
                            __newControl.BindTo(_boundWidget, memberInfo.Name);
                            __newControl.PropertyLabel.Label = __controlLabel;
                            this.AddChild(__newControl);
                            this.AddChild(UWidget.Create <UEditorDecoratorSeperator>());
                            continue;
                        }

                        //If a custom editor required
                        if (__propAttribute.CustomEditor != null)
                        {
                            if (__propAttribute.CustomEditor.IsSubclassOf(typeof(UEditorWidgetBase)) == false)
                            {
                                Debug.LogError("Custom Editor of property " + memberInfo.Name + " must derive from UEditorWidgetBase");
                                continue;
                            }

                            object __newObject = ScriptableObject.CreateInstance(__propAttribute.CustomEditor);
                            if (__newObject == null)
                            {
                                Debug.Log("Break");
                            }
                            UEditorWidgetBase __newControl = (UEditorWidgetBase)__newObject;
                            __newControl.Name       = memberInfo.Name;
                            __newControl.PositionX  = 15;
                            __newControl.LayoutMode = ePositioningLayout.Layout;
                            __newControl.BindTo(_boundWidget, memberInfo.Name);
                            this.AddChild(__newControl);
                            this.AddChild(UWidget.Create <UEditorDecoratorSeperator>());

                            continue;
                        }

                        //If the property is of type bool
                        if (__castType == typeof(System.Boolean))
                        {
                            UEditorControlBool __newControl = UWidget.Create <UEditorControlBool>();
                            __newControl.Name                = memberInfo.Name;
                            __newControl.PositionX           = 15;
                            __newControl.LayoutMode          = ePositioningLayout.Layout;
                            __newControl.PropertyLabel.Width = 100;
                            __newControl.PropertyBool.Width  = 180;
                            __newControl.BindTo(_boundWidget, memberInfo.Name);
                            __newControl.PropertyLabel.Label = __controlLabel;
                            this.AddChild(__newControl);
                            this.AddChild(UWidget.Create <UEditorDecoratorSeperator>());

                            continue;
                        }

                        //If the property is a regular string or number
                        if (__castType == typeof(System.String) || __castType == typeof(System.Single) || __castType == typeof(System.Int32))
                        {
                            UEditorControlProperty __newControl = UWidget.Create <UEditorControlProperty>();
                            __newControl.Name                        = memberInfo.Name;
                            __newControl.PositionX                   = 15;
                            __newControl.LayoutMode                  = ePositioningLayout.Layout;
                            __newControl.PropertyLabel.Width         = 100;
                            __newControl.PropertyLabel.Clipping      = TextClipping.Clip;
                            __newControl.PropertyInputField.Width    = 180;
                            __newControl.PropertyInputField.Clipping = TextClipping.Clip;
                            __newControl.BindTo(_boundWidget, memberInfo.Name);
                            __newControl.PropertyLabel.Label = __controlLabel;
                            this.AddChild(__newControl);
                            this.AddChild(UWidget.Create <UEditorDecoratorSeperator>());

                            continue;
                        }

                        //If the propery is an Enum
                        if (__castType.IsEnum)
                        {
                            UEditorControlEnum __newControl = UWidget.Create <UEditorControlEnum>();
                            __newControl.Name                    = memberInfo.Name;
                            __newControl.PositionX               = 15;
                            __newControl.LayoutMode              = ePositioningLayout.Layout;
                            __newControl.PropertyLabel.Width     = 100;
                            __newControl.PropertyLabel.Clipping  = TextClipping.Clip;
                            __newControl.PropertyEnumPopup.Width = 180;
                            __newControl.BindTo(_boundWidget, memberInfo.Name);
                            __newControl.PropertyLabel.Label = __controlLabel;
                            this.AddChild(__newControl);
                            this.AddChild(UWidget.Create <UEditorDecoratorSeperator>());

                            continue;
                        }

                        //If the property is derived from UEditorWidgetBase and thus requires a sub panel
                        if (__castType.IsSubclassOf(typeof(UEditorWidgetBase)))
                        {
                            UEditorWidgetFoldout __newControl = UWidget.Create <UEditorWidgetFoldout>();
                            __newControl.Label      = __controlLabel;
                            __newControl.FontStyle  = FontStyle.Bold;
                            __newControl.LayoutMode = LayoutMode;

                            UEditorPanelVertical __subPanelContainer = UWidget.Create <UEditorPanelVertical>();
                            __subPanelContainer.Padding.left = 20;
                            __subPanelContainer.Width        = 400;
                            __subPanelContainer.LayoutMode   = ePositioningLayout.Layout;

                            UEditorControlPropertyPanel __subPanel = UWidget.Create <UEditorControlPropertyPanel>();
                            __subPanel.BindTo(_boundWidget, memberInfo.Name);

                            __subPanelContainer.AddChild(__subPanel);
                            __newControl.AddChild(__subPanelContainer);
                            this.AddChild(__newControl);
                            this.AddChild(UWidget.Create <UEditorDecoratorSeperator>());
                        }
                    }
                }
            }
        }