예제 #1
0
        private void LoescheSortierung(DataView View)
        {
            BindingListCollectionView BindingView;

            View.Sort   = "";
            BindingView = (BindingListCollectionView)(CollectionViewSource.GetDefaultView(View));
            BindingView.SortDescriptions.Clear();
            BindingView.Refresh();
        }
예제 #2
0
    public virtual void AddChild(BindingView view)
    {
        _children.Add(view);
        view.Parent = this;
        var viewTransform = view.transform;

        viewTransform.SetParent(Container);
        viewTransform.localScale    = Vector3.one;
        viewTransform.localPosition = Vector3.zero;
    }
예제 #3
0
        private void AddNewBinding(List <TypeBinding> bindings)
        {
            var binding = new TypeBinding();
            var view    = new BindingView()
            {
                Binding = binding
            };

            bindings.Add(binding);
            _editorViews.Add(view);
        }
예제 #4
0
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            ViewRegistry registry = (ViewRegistry)target;

            Setup(registry);

            if (_types.Count < 1)
            {
                EditorGUILayout.LabelField(
                    "No IView interfaces found."
                    );
                return;
            }

            foreach (BindingView view in _editorViews)
            {
                DrawBinding(view);
            }

            List <TypeBinding> bindings = registry.Bindings;

            if (GUILayout.Button("+"))
            {
                AddNewBinding(bindings);
            }

            if (_bindingToRemove != null)
            {
                int         bindingIndex = _editorViews.IndexOf(_bindingToRemove);
                BindingView view         = _editorViews[bindingIndex];
                bindings.Remove(view.Binding);
                _editorViews.RemoveAt(bindingIndex);
                _bindingToRemove = null;
            }

            serializedObject.ApplyModifiedProperties();

            // TODO: Only set dirty when data is changed.
            EditorUtility.SetDirty(registry);
        }
예제 #5
0
        private void Setup(ViewRegistry view)
        {
            if (_view == view)
            {
                return;
            }

            foreach (TypeBinding binding in view.Bindings)
            {
                int  typeIndex   = GetIndexFromQualifiedTypeName(binding.TypeName);
                Type bindingType = GetTypeFromIndex(typeIndex);
                var  bindingView = new BindingView()
                {
                    Binding   = binding,
                    TypeIndex = typeIndex
                };

                TagTypeData tagData = null;
                if (bindingType != null)
                {
                    _tagTypes.TryGetValue(bindingType, out tagData);
                }

                foreach (BindingTarget target in binding.Targets)
                {
                    int tagIndex = 0;
                    if (tagData != null)
                    {
                        tagIndex = tagData.Values.IndexOf(target.Tag);
                    }
                    var targetView = new TargetView()
                    {
                        Target   = target,
                        TagIndex = tagIndex
                    };
                    bindingView.TargetViews.Add(targetView);
                }
                _editorViews.Add(bindingView);
            }
            _view = view;
        }
예제 #6
0
 public virtual void RemoveChild(BindingView view)
 {
     _children.Remove(view);
     view.Parent = null;
     Destroy(view.gameObject);
 }
예제 #7
0
        private void DrawBinding(BindingView view)
        {
            TypeBinding binding = view.Binding;

            // Fold
            EditorGUILayout.BeginHorizontal();
            bool   isFoldOpen = view.IsFoldOpen;
            string foldName   = _typeDisplayNamesArray[view.TypeIndex];

            isFoldOpen      = EditorGUILayout.Foldout(isFoldOpen, foldName);
            view.IsFoldOpen = isFoldOpen;

            // Add button
            if (isFoldOpen)
            {
                if (GUILayout.Button("Add Target"))
                {
                    var target = new BindingTarget();
                    binding.Targets.Add(target);
                    view.TargetViews.Add(new TargetView()
                    {
                        Target = target
                    });
                }
            }

            if (GUILayout.Button("-", GUILayout.MaxWidth(32)))
            {
                _bindingToRemove = view;
            }

            EditorGUILayout.EndHorizontal();

            // Fold Contents
            if (isFoldOpen)
            {
                // Type selector
                int oldSelectedIndex = view.TypeIndex;
                int selectedIndex    = EditorGUILayout.Popup(
                    oldSelectedIndex,
                    _typeDisplayNamesArray
                    );
                Type bindingType = GetTypeFromIndex(selectedIndex);
                if (selectedIndex != oldSelectedIndex)
                {
                    if (bindingType != null)
                    {
                        binding.TypeName = bindingType.AssemblyQualifiedName;
                    }
                    view.TypeIndex = selectedIndex;
                }

                ++EditorGUI.indentLevel;
                if (bindingType != null)
                {
                    foreach (TargetView targetView in view.TargetViews)
                    {
                        DrawTarget(targetView, bindingType);
                    }
                }

                if (_targetToRemove != null)
                {
                    binding.Targets.Remove(_targetToRemove.Target);
                    view.TargetViews.Remove(_targetToRemove);
                    _targetToRemove = null;
                }
                --EditorGUI.indentLevel;
                EditorGUILayout.Space();
            }
        }