public void UpdateVisibleMembers()
        {
            GUI.changed = true;

            int count = lastVisibleIndex - firstVisibleIndex + 1;

            DrawerArrayPool.Resize(ref visibleMembers, count);
            for (int n = count - 1; n >= 0; n--)
            {
                var member = members[firstVisibleIndex + n];
                visibleMembers[n] = member;

                visibleMembersHaveConflicts[n] = AddComponentUtility.HasConflictingMembers(member.Type, target);
            }
        }
Esempio n. 2
0
        /// <inheritdoc />
        protected override void BuildContextMenu(ref Menu menu, bool extendedMenu)
        {
            var addHistory = AddComponentHistoryTracker.LastAddedComponents;

            Type typeFromClipboard = null;

            if (Clipboard.CanPasteAs(Types.Type))
            {
                                #if DEV_MODE
                Debug.Log("Clipboard.CanPasteAs(Type): " + StringUtils.True);
                                #endif

                typeFromClipboard = Clipboard.Paste <Type>();

                                #if DEV_MODE
                Debug.Log(Msg("typeFromClipboard: ", typeFromClipboard));
                                #endif
            }

            if (typeFromClipboard == null)
            {
                                #if DEV_MODE
                Debug.Log("Clipboard.CanPasteAs(Type): " + StringUtils.False);
                                #endif
                var objectReference = Clipboard.ObjectReference;

                                #if DEV_MODE
                Debug.Log(Msg("objectReference: ", objectReference));
                                #endif

                if (objectReference != null)
                {
                                        #if UNITY_EDITOR
                    var script = objectReference as UnityEditor.MonoScript;
                    if (script != null)
                    {
                        typeFromClipboard = script.GetClass();
                    }
                    else
                                        #endif
                    {
                        typeFromClipboard = objectReference.GetType();
                    }

                                        #if DEV_MODE
                    Debug.Log(Msg("typeFromClipboard: ", typeFromClipboard));
                                        #endif
                }
            }

            var gameObjectDrawer = parent as GameObjectDrawer;

            if (typeFromClipboard != null && typeFromClipboard.IsComponent())
            {
                addHistory.Remove(typeFromClipboard);

                if (!AddComponentUtility.HasConflictingMembers(typeFromClipboard, gameObjectDrawer))
                {
                    menu.Add(typeFromClipboard.Name, () => QuickAddComponent(typeFromClipboard));
                }
                else
                {
                    menu.AddDisabled(typeFromClipboard.Name);
                }

                if (addHistory.Count > 0)
                {
                    menu.AddSeparator();
                }
            }

            for (int n = 0, count = addHistory.Count; n < count; n++)
            {
                var type = addHistory[n];
                if (!AddComponentUtility.HasConflictingMembers(type, gameObjectDrawer))
                {
                    menu.Add(type.Name, () => QuickAddComponent(type));
                }
                else
                {
                    menu.AddDisabled(type.Name);
                }
            }
        }