private void DisplayFields(GraphApi graph, List <GraphApi.Query> queryList, string type) { if (queryList != null) { if (queryList.Count > 0) { EditorGUILayout.LabelField(type); } for (int i = 0; i < queryList.Count; i++) { EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); GraphApi.Query query = queryList[i]; query.name = EditorGUILayout.TextField($"{type} Name", query.name); string[] options = query.queryOptions.ToArray(); if (String.IsNullOrEmpty(query.returnType)) { index = EditorGUILayout.Popup(type, index, options); query.queryString = options[index]; EditorGUILayout.LabelField(options[index]); if (GUILayout.Button($"Confirm {type}")) { graph.GetQueryReturnType(query, options[index]); } if (GUILayout.Button("Delete")) { graph.DeleteQuery(queryList, i); } continue; } if (query.isComplete) { GUILayout.Label(query.query); if (query.fields.Count > 0) { if (GUILayout.Button($"Edit {type}")) { graph.EditQuery(query); } } if (GUILayout.Button("Delete")) { graph.DeleteQuery(queryList, i); } continue; } EditorGUILayout.LabelField(query.queryString, $"Return Type: {query.returnType}"); if (graph.CheckSubFields(query.returnType)) { if (GUILayout.Button("Create Field")) { graph.GetQueryReturnType(query, options[index]); graph.AddField(query, query.returnType); } } foreach (GraphApi.Field field in query.fields) { GUI.color = new Color(0.8f, 0.8f, 0.8f); string[] fieldOptions = field.possibleFields.Select((aField => aField.name)).ToArray(); EditorGUILayout.BeginHorizontal(); GUIStyle fieldStyle = EditorStyles.popup; fieldStyle.contentOffset = new Vector2(field.parentIndexes.Count * 20, 0); field.Index = EditorGUILayout.Popup(field.Index, fieldOptions, fieldStyle); GUI.color = Color.white; field.CheckSubFields(graph.schemaClass); if (field.hasSubField) { if (GUILayout.Button("Create Sub Field")) { graph.AddField(query, field.possibleFields[field.Index].type, field); break; } } if (GUILayout.Button("x", GUILayout.MaxWidth(20))) { int parentIndex = query.fields.FindIndex(aField => aField == field); query.fields.RemoveAll(afield => afield.parentIndexes.Contains(parentIndex)); query.fields.Remove(field); field.hasChanged = false; break; } EditorGUILayout.EndHorizontal(); if (field.hasChanged) { int parentIndex = query.fields.FindIndex(aField => aField == field); query.fields.RemoveAll(afield => afield.parentIndexes.Contains(parentIndex)); field.hasChanged = false; break; } } EditorGUILayout.Space(); EditorGUILayout.Space(); if (query.fields.Count > 0) { if (GUILayout.Button($"Preview {type}")) { query.CompleteQuery(); } } if (GUILayout.Button("Delete")) { graph.DeleteQuery(queryList, i); } } EditorGUILayout.Space(); } }