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; }
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); }); }
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>(); } }
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); }
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); }
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(); }