public DataControlList() : base(new List <DataControl>(), typeof(DataControl), true, true) { // ---------------- // List config // ---------------- onSelectCallback += OnSelect; onReorderCallback += OnReorder; // ---------------- // Add button // ---------------- var buttonAdd = new ButtonList.Button(); var addTex = Resources.Load <Texture2D>("EAdventureData/img/icons/addNode"); buttonAdd.content = new GUIContent(addTex); // Can add buttonAdd.onButtonEnabledCallback = (list) => dataControl != null && dataControl.canAddElements() && dataControl.getAddableElements().ToList().Any(e => dataControl.canAddElement(e)); // Do add buttonAdd.onButtonPressedCallback = (rect, list) => { var addable = dataControl.getAddableElements().ToList().FindAll(e => dataControl.canAddElement(e)); if (addable.Count == 1) { OnAdd(addable[0]); } else { var menu = new GenericMenu(); addable.ForEach(a => menu.AddItem(new GUIContent(TC.get("TreeNode.AddElement" + a)), false, OnAdd, a)); menu.ShowAsContext(); } }; buttons.Add(buttonAdd); // ---------------- // Remove button // ---------------- var buttonDel = new ButtonList.Button(); var delTex = Resources.Load <Texture2D>("EAdventureData/img/icons/deleteContent"); buttonDel.content = new GUIContent(delTex); // Can remove buttonDel.onButtonEnabledCallback = (list) => dataControl != null && list.index >= 0 && childs[list.index].canBeDeleted(); // DoRemove buttonDel.onButtonPressedCallback = (rect, list) => OnRemove(); buttons.Add(buttonDel); // ---------------- // Duplicate button // ---------------- var buttonDup = new ButtonList.Button(); var dupTex = Resources.Load <Texture2D>("EAdventureData/img/icons/duplicateNode"); buttonDup.content = new GUIContent(dupTex); // Can duplicate buttonDup.onButtonEnabledCallback = (list) => dataControl != null && list.index >= 0 && childs[list.index].canBeDuplicated(); // Do Duplicate buttonDup.onButtonPressedCallback = (rect, list) => OnDuplicate(); buttons.Add(buttonDup); }