Пример #1
0
        private void refreshData()
        {
            if (mToolbar_Text == null || mToolbar_Text.Length == 0)
            {
                mToolbar_Text = I18Ns.Toolbar_title;
            }

            _target = (TinaX.XComponent.XComponentScriptBase) this.target;

            mBaseTypeNames     = XComponents.GetTypeNames();
            mDict_baseTypeName = new Dictionary <string, int>();
            refresh_data       = true;
        }
Пример #2
0
        protected override void OnBuild(XType <KeyValuePair <TKey, TValue> > xType, IXReadOperation reader,
                                        XElement element, ObjectBuilder <KeyValuePair <TKey, TValue> > objectBuilder, XObjectArgs args)
        {
            XName keyName = XComponents.Component <XAutoCollections>().KeyName,
                                                         valueName = XComponents.Component <XAutoCollections>().ValueName;

            XElement keyElement = element.Element(keyName);

            if (keyElement == null)
            {
                return;
            }

            bool   foundKey = false, foundValue = false;
            TKey   key   = default;
            TValue value = default;

            reader.Read <TKey>(keyElement, x =>
            {
                key = x;
                return(foundKey = true);
            },
                               XObjectArgs.DefaultIgnoreElementName);

            XElement valueElement = element.Element(valueName);

            if (valueElement != null)
            {
                reader.Read <TValue>(valueElement, x =>
                {
                    value = x;
                    return(foundValue = true);
                },
                                     XObjectArgs.DefaultIgnoreElementName);
            }
            else
            {
                foundValue = true;
            }

            reader.AddTask(this, () =>
            {
                if (foundKey && foundValue)
                {
                    objectBuilder.Object = new KeyValuePair <TKey, TValue>(key, value);
                    return(true);
                }
                return(false);
            });
        }
Пример #3
0
        private void OnEnable()
        {
            if (target != null)
            {
                serializedObject = new SerializedObject(target);
                if (mToolbar_Text == null || mToolbar_Text.Length == 0)
                {
                    mToolbar_Text = I18Ns.Toolbar_title;
                }


                mBaseTypeNames     = XComponents.GetTypeNames();
                mDict_baseTypeName = new Dictionary <string, int>();
            }
        }
Пример #4
0
        protected override bool OnWrite(XType <DictionaryEntry> xType, IXWriteOperation writer,
                                        DictionaryEntry obj, XElement element, XObjectArgs args)
        {
            XName keyName   = XComponents.Component <XAutoCollections>().KeyName,
                  valueName = XComponents.Component <XAutoCollections>().ValueName;

            if (obj.Key != null)
            {
                element.Add(writer.WriteTo(new XElement(keyName), obj.Key));

                if (obj.Value != default)
                {
                    element.Add(writer.WriteTo(new XElement(valueName), obj.Value));
                }
            }

            return(true);
        }
Пример #5
0
        protected override bool OnWrite(IXWriteOperation writer, T[,] obj, XElement element, XObjectArgs args)
        {
            // Get lower bound and length

            int lb = obj.GetLowerBound(0), n = obj.GetLength(0);

            int[] lb1 = new int[1] {
                obj.GetLowerBound(1)
            }, n1 = new int[1] {
                obj.GetLength(1)
            };

            if (lb != 0)
            {
                element.SetAttributeValue(XComponents.Component <XAutoCollections>().ArrayLowerBoundName, XmlTools.Write(lb));
            }

            // Copy each second rank into a new array and write them as 1-dimensional arrays

            for (int i = lb, I = lb + n; i < I; i++)
            {
                T[] dim1 = (T[])Array.CreateInstance(typeof(T), n1, lb1);

                for (int j = lb1[0], J = n1[0]; j < J; j++)
                {
                    dim1[j] = obj[i, j];
                }

                XElement li = writer.WriteTo(new XElement(ItemName), dim1);
                if (lb1[0] != 0)
                {
                    li.SetAttributeValue(XComponents.Component <XAutoCollections>().ArrayLowerBoundName, XmlTools.Write(lb1[0]));
                }
                element.Add(li);
            }

            return(true);
        }
Пример #6
0
        private void DrawTypeObjectBindingGUI()
        {
            v2_scroll_types = EditorGUILayout.BeginScrollView(v2_scroll_types);
            if (mReorderableList_Types == null)
            {
                mReorderableList_Types = new ReorderableList(this.serializedObject,
                                                             this.serializedObject.FindProperty("TypeBindInfos"),
                                                             true,  //draggable
                                                             false, //display header
                                                             true,
                                                             true);
                mReorderableList_Types.drawHeaderCallback = rect =>
                {
                    GUI.Label(rect, I18Ns.Types_Head);
                };
                mReorderableList_Types.drawElementCallback = (rect, index, selected, focused) =>
                {
                    rect.height = EditorGUIUtility.singleLineHeight;
                    rect.y     += 2;
                    SerializedProperty itemData      = mReorderableList_Types.serializedProperty.GetArrayElementAtIndex(index);
                    SerializedProperty item_typeName = itemData.FindPropertyRelative("TypeName");
                    string             typeName      = item_typeName.stringValue;
                    SerializedProperty item_name     = itemData.FindPropertyRelative("Name");

                    var rect_name = rect;
                    var rect_type = rect;
                    rect_name.width = (rect.width - 5) / 2 - 3;
                    rect_type.width = (rect.width - 5) / 2 + 4;
                    rect_type.x    += (rect.width - 5) / 2 + 3;

                    //rect_type.y += EditorGUIUtility.singleLineHeight + 2;

                    //Name ----------------------
                    item_name.stringValue = EditorGUI.TextField(rect_name, item_name.stringValue);

                    //Type Name ------------------
                    int type_index = -1;
                    if (string.IsNullOrEmpty(typeName))
                    {
                        //type_index = EditorGUI.Popup(rect_type, type_index, mBaseTypeNames);
                    }
                    else
                    {
                        if (!mDict_baseTypeName.TryGetValue(typeName, out type_index))
                        {
                            for (int i = 0; i < mBaseTypeNames.Length; i++)
                            {
                                if (mBaseTypeNames[i] == typeName)
                                {
                                    type_index = i;
                                    mDict_baseTypeName.Add(typeName, type_index);
                                    break;
                                }
                            }
                        }
                    }
                    type_index = EditorGUI.Popup(rect_type, type_index, mBaseTypeNames);
                    if (type_index != -1 && type_index <= mBaseTypeNames.Length - 1)
                    {
                        item_typeName.stringValue = mBaseTypeNames[type_index];
                        typeName = mBaseTypeNames[type_index];
                    }
                    else
                    {
                        typeName = string.Empty;
                    }

                    var rect_edit = rect;
                    rect_edit.y += EditorGUIUtility.singleLineHeight + 2;
                    // detail
                    if (!string.IsNullOrEmpty(typeName))
                    {
                        var info = target.TypeBindInfos[index];
                        if (XComponents.TryGetHandler(typeName, out var typeHandler))
                        {
                            if (XComponentsEditor.TryGetGUIHandler(typeName, out var guiHandler))
                            {
                                var value = typeHandler.GetValueFunc(info);
                                typeHandler.SetValueFunc(guiHandler.DrawEditorGUI(rect_edit, value), info);
                            }
                        }
                    }
                    else
                    {
                        EditorGUI.LabelField(rect_edit, "Unknow Type");
                    }
                };
                mReorderableList_Types.onAddCallback = (list) =>
                {
                    if (list.serializedProperty != null)
                    {
                        list.serializedProperty.arraySize++;
                        list.index = list.serializedProperty.arraySize - 1;

                        SerializedProperty itemData        = list.serializedProperty.GetArrayElementAtIndex(list.index);
                        SerializedProperty item_name       = itemData.FindPropertyRelative("Name");
                        SerializedProperty item_type       = itemData.FindPropertyRelative("TypeName");
                        SerializedProperty item_arr_str    = itemData.FindPropertyRelative("Value_String");
                        SerializedProperty item_arr_double = itemData.FindPropertyRelative("Value_Double");
                        SerializedProperty item_arr_long   = itemData.FindPropertyRelative("Value_long");
                        SerializedProperty item_arr_curve  = itemData.FindPropertyRelative("Value_Curve");
                        SerializedProperty item_bool       = itemData.FindPropertyRelative("Value_bool");


                        item_name.stringValue = null;
                        item_type.stringValue = null;
                        item_arr_str.ClearArray();
                        item_arr_double.ClearArray();
                        item_arr_long.ClearArray();
                        item_arr_curve.animationCurveValue = null;
                        item_bool.boolValue = false;
                    }
                    else
                    {
                        ReorderableList.defaultBehaviours.DoAddButton(list);
                    }
                };
                mReorderableList_Types.elementHeightCallback = index =>
                {
                    SerializedProperty itemData = mReorderableList_Types.serializedProperty.GetArrayElementAtIndex(index);
                    var info = target.TypeBindInfos[index];
                    if (XComponents.TryGetValue(info, out object value))
                    {
                        SerializedProperty type = itemData.FindPropertyRelative("TypeName");
                        if (XComponentsEditor.TryGetGUIHandler(type.stringValue, out var handler))
                        {
                            return(handler.EditorGUIHeight(value) + (EditorGUIUtility.singleLineHeight) + 6);
                        }
                    }

                    return(EditorGUIUtility.singleLineHeight * 2 + 6);
                };
            }
            mReorderableList_Types.DoLayoutList();

            EditorGUILayout.EndScrollView();
        }