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