protected void DrawSectionMissionEntry(Rect rect, int index, bool isActive, bool isFocused) { var missionIDProperty = List.serializedProperty.GetArrayElementAtIndex(index); KMMission mission = KMMissionTableOfContentsEditor.GetMission(missionIDProperty.stringValue); string sectionLabel = String.Format("{0}.{1}", sectionNum, index + 1); EditorGUI.PrefixLabel(new Rect(rect.x, rect.y, 30, EditorGUIUtility.singleLineHeight), new GUIContent(sectionLabel)); EditorGUI.LabelField( new Rect(rect.x + 30, rect.y, 200, EditorGUIUtility.singleLineHeight), missionIDProperty.stringValue); if (!IsValidMission(missionIDProperty.stringValue)) { EditorGUI.HelpBox(new Rect(rect.x + 30 + 200, rect.y, 200, EditorGUIUtility.singleLineHeight), "Mission not found!", MessageType.Error); } else if (!IsMissionUnique(missionIDProperty.stringValue)) { EditorGUI.HelpBox(new Rect(rect.x + 30 + 200, rect.y, 100, EditorGUIUtility.singleLineHeight), "Duplicate!", MessageType.Warning); } else if (mission != null) { float x = 30 + 200; //Display Name EditorGUI.LabelField(new Rect(rect.x + x, rect.y, 300, EditorGUIUtility.singleLineHeight), mission.DisplayName); x += 300; } }
public TableOfContentsSectionList( KMMissionTableOfContentsEditor editor, SerializedObject serializedTableOfContents, SerializedProperty serializedSection, int sectionNum) { this.editor = editor; this.serializedTableOfContents = serializedTableOfContents; this.serializedSection = serializedSection; this.sectionNum = sectionNum; List = new ReorderableList( serializedTableOfContents, serializedSection.FindPropertyRelative("MissionIDs"), true, false, true, true); List.headerHeight = 1; List.drawElementCallback = DrawSectionMissionEntry; List.onAddDropdownCallback = ShowAddMissionContextMenu; List.onSelectCallback = OnSelect; }
protected void ShowAddMissionContextMenu(Rect buttonRect, ReorderableList l) { var menu = new GenericMenu(); List <String> missionIDs = KMMissionTableOfContentsEditor.GetAllMissions().Where(x => x != null).Select(x => x.ID).ToList(); for (var i = 0; i < missionIDs.Count; i++) { menu.AddItem(new GUIContent(missionIDs[i]), false, OnAddMissionContextMenuClick, missionIDs[i]); } menu.ShowAsContext(); }
protected void DrawSectionMissionEntry(Rect rect, int index, bool isActive, bool isFocused) { //var missionIDProperty = List.serializedProperty.GetArrayElementAtIndex(index); //KMMission mission = KMMissionTableOfContentsEditor.GetMission(missionIDProperty.stringValue); //string sectionLabel = String.Format("{0}.{1}", sectionNum, index + 1); //EditorGUI.PrefixLabel(new Rect(rect.x, rect.y, 30, EditorGUIUtility.singleLineHeight), new GUIContent(sectionNum + "." + (index + 1))); string missionID = ((KMMissionTableOfContents)List.serializedProperty.serializedObject.targetObject).Sections[sectionNum - 1].MissionIDs[index]; EditorGUI.LabelField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), sectionNum + "." + (index + 1) + " " + missionID); if (Event.current.type == EventType.ContextClick && rect.Contains(Event.current.mousePosition)) { List <String> missionIDs = KMMissionTableOfContentsEditor.GetAllMissions().Where(x => x != null).Select(x => x.ID).ToList(); GenericMenu missionMenu = new GenericMenu(); missionMenu.AddItem(new GUIContent("Delete " + missionID), false, OnDeleteContextMenuClicked, index); for (int i = 0; i < missionIDs.Count; i++) { int j = i; missionMenu.AddItem(new GUIContent("Insert before " + missionID + "/" + missionIDs[i]), false, () => OnInsertBeforeContextMenuClicked(index, missionIDs[j])); } missionMenu.ShowAsContext(); } /*if (!IsValidMission(missionIDProperty.stringValue)) * { * EditorGUI.HelpBox(new Rect(rect.x + 30 + 200, rect.y, 200, EditorGUIUtility.singleLineHeight), "Mission not found!", MessageType.Error); * } * else if (!IsMissionUnique(missionIDProperty.stringValue)) * { * EditorGUI.HelpBox(new Rect(rect.x + 30 + 200, rect.y, 100, EditorGUIUtility.singleLineHeight), "Duplicate!", MessageType.Warning); * } * else if (mission != null) * { * float x = 30 + 200; * * //Display Name * EditorGUI.LabelField(new Rect(rect.x + x, rect.y, 300, EditorGUIUtility.singleLineHeight), * mission.DisplayName); * x += 300; * }*/ }
protected void OnSelect(ReorderableList list) { //Deselect all other section lists, because otherwise each section will have //an active selection int oldIndex = list.index; editor.ClearTableOfContentsSectionSelections(); list.index = oldIndex; SerializedProperty missionIDProperty = list.serializedProperty.GetArrayElementAtIndex(list.index); KMMission mission = KMMissionTableOfContentsEditor.GetMission(missionIDProperty.stringValue); if (mission != null) { EditorGUIUtility.PingObject(mission); } }
protected bool IsValidMission(String id) { return(KMMissionTableOfContentsEditor.GetMission(id) != null); }