public static ReorderableList CreateTileViewReorderableList(Tileset tileset) { ReorderableList tileViewRList = new ReorderableList(tileset.TileViews, typeof(TileView), true, true, true, true); tileViewRList.onAddDropdownCallback = (Rect buttonRect, ReorderableList l) => { GenericMenu menu = new GenericMenu(); GenericMenu.MenuFunction addTileSelectionFunc = () => { TileSelection tileSelection = tileset.TileSelection.Clone(); tileSelection.FlipVertical(); // flip vertical to fit the tileset coordinate system ( from top to bottom ) tileset.AddTileView("new TileView", tileSelection); EditorUtility.SetDirty(tileset); }; GenericMenu.MenuFunction addBrushSelectionFunc = () => { TileSelection tileSelection = BrushBehaviour.CreateTileSelection(); tileset.AddTileView("new TileView", tileSelection); EditorUtility.SetDirty(tileset); }; GenericMenu.MenuFunction removeAllTileViewsFunc = () => { if (EditorUtility.DisplayDialog("Warning!", "Are you sure you want to delete all the TileViews?", "Yes", "No")) { tileset.RemoveAllTileViews(); EditorUtility.SetDirty(tileset); } }; if (tileset.TileSelection != null) { menu.AddItem(new GUIContent("Add Tile Selection"), false, addTileSelectionFunc); } else { menu.AddDisabledItem(new GUIContent("Add Tile Selection to TileView")); } if (BrushBehaviour.GetBrushTileset() == tileset && BrushBehaviour.CreateTileSelection() != null) { menu.AddItem(new GUIContent("Add Brush Selection"), false, addBrushSelectionFunc); } menu.AddSeparator(""); menu.AddItem(new GUIContent("Remove All TileViews"), false, removeAllTileViewsFunc); menu.AddSeparator(""); menu.AddItem(new GUIContent("Sort By Name"), false, tileset.SortTileViewsByName); menu.ShowAsContext(); }; tileViewRList.onRemoveCallback = (ReorderableList list) => { if (EditorUtility.DisplayDialog("Warning!", "Are you sure you want to delete the TileView?", "Yes", "No")) { ReorderableList.defaultBehaviours.DoRemoveButton(list); EditorUtility.SetDirty(tileset); } }; tileViewRList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "TileViews", EditorStyles.boldLabel); Texture2D btnTexture = tileViewRList.elementHeight == 0f ? EditorGUIUtility.FindTexture("winbtn_win_max_h") : EditorGUIUtility.FindTexture("winbtn_win_min_h"); if (GUI.Button(new Rect(rect.width - rect.height, rect.y, rect.height, rect.height), btnTexture, EditorStyles.label)) { tileViewRList.elementHeight = tileViewRList.elementHeight == 0f ? EditorGUIUtility.singleLineHeight : 0f; tileViewRList.draggable = tileViewRList.elementHeight > 0f; } }; tileViewRList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (tileViewRList.elementHeight == 0f) { return; } Rect rLabel = new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight); TileView tileView = tileViewRList.list[index] as TileView; if (index == tileViewRList.index) { string newName = EditorGUI.TextField(rLabel, tileView.name); if (newName != tileView.name) { tileset.RenameTileView(tileView.name, newName); } } else { EditorGUI.LabelField(rLabel, tileView.name); } }; return(tileViewRList); }