Exemple #1
0
    public void InitIfNot(SerializedProperty property)
    {
        if (_container == null)
        {
            _container = fieldInfo.GetValue(property.serializedObject.targetObject) as TrexSerializableObject;

            _reorderList = new ReorderableList(_container.Values, typeof(TrexSerializableItem), true, true, true, true);

            _reorderList.drawHeaderCallback = (Rect rect) =>
            {
                EditorGUI.LabelField(rect, "ContainerTable");
            };

            _reorderList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                try
                {
                    _targetObject = _reorderList.list[index] as TrexSerializableItem;
                }
                catch (Exception)
                {
                    return;
                }

                Rect _origin = new Rect(rect);

                rect.height -= EMPTY_PADDING_HEIGHT;
                rect.y      += EMPTY_MARGIN_HEIGHT;

                // type
                EditorGUI.LabelField(rect, _targetObject.type.ToString());
                rect.x += LABEL_WIDTH_TYPE;

                // key
                EditorGUI.LabelField(rect, _targetObject.Key);
                rect.x     += LABEL_WIDTH_KEY;
                rect.width -= LABEL_WIDTH_TYPE + LABEL_WIDTH_KEY + LABEL_WIDTH_BUTTON;

                // value
                TrexSerializableObjectFieldDrawer.AdaptTable[_targetObject.type](_targetObject, rect);
                rect.x       = _origin.width + 12;
                rect.height -= BUTTON_MARGIN_HEIGHT;
                rect.width   = LABEL_WIDTH_BUTTON;

                // apply
                _container[_targetObject.Key] = _targetObject;

                // button
                if (GUI.Button(rect, "x", EditorStyles.miniButtonMid))
                {
                    if (_container.DataTable.ContainsKey(_targetObject.Key))
                    {
                        _container.DataTable.Remove(_targetObject.Key);
                    }
                }
            };

            _reorderList.drawFooterCallback = (Rect rect) =>
            {
                // key
                rect.height = EditorGUIUtility.singleLineHeight + 2.0f;
                rect.width  = rect.width / 3 - 3.8f;
                _addingKey  = EditorGUI.TextField(rect, _addingKey);

                // type
                rect.x     += rect.width + 4.0f;
                _addingType = (TrexObjectType)EditorGUI.EnumPopup(rect, _addingType, EditorStyles.toolbarPopup);

                // button
                rect.x += rect.width + 4.0f;
                if (GUI.Button(rect, "ADD", EditorStyles.toolbarButton))
                {
                    if (string.IsNullOrEmpty(_addingKey) || _container.DataTable.ContainsKey(_addingKey))
                    {
                        return;
                    }

                    TrexSerializableItem _item = new TrexSerializableItem();
                    _item.InitItem(_addingType, _addingKey);

                    _container.DataTable.Add(_addingKey, _item);
                    _reorderList.list.Add(_item);
                }
            };
            _isDraw = true;
        }
    }
Exemple #2
0
 public void InitItem(TrexObjectType _type, string _key)
 {
     this._type = _type;
     this._key  = _key;
 }