示例#1
0
        static private EntityScopedIdentifier DoQueryField(GUIContent inLabel, EntityScopedIdentifier inIdentifier, RSTypeInfo inExpectedType, RSValidationFlags inFlags, RSValidationContext inContext)
        {
            EntityScopeData scope     = inIdentifier.Scope;
            int             queryId   = inIdentifier.Id;
            bool            bNoParams = inFlags.Has(RSValidationFlags.DisallowParameters);

            using (new EditorGUILayout.VerticalScope())
            {
                scope = EntityScopeField(inLabel, scope, inFlags.ForMethodScope(), inContext);
                using (new EditorGUI.IndentLevelScope())
                {
                    switch (scope.Type)
                    {
                    case EntityScopeType.Global:
                        queryId = LibraryGUILayout.QuerySelectorGlobal(Content.QueryIdLabel, queryId, inExpectedType, bNoParams, inContext.Library);
                        break;

                    case EntityScopeType.Null:
                        EditorGUILayout.HelpBox("Cannot perform query on null entity", MessageType.Error);
                        break;

                    case EntityScopeType.Invalid:
                        EditorGUILayout.HelpBox("Cannot perform query on missing entity", MessageType.Error);
                        break;

                    case EntityScopeType.Self:
                    {
                        if (inFlags.Has(RSValidationFlags.FilterSelection) && !scope.HasLinks() && inContext.Entity != null)
                        {
                            queryId = LibraryGUILayout.QuerySelector(Content.QueryIdLabel, queryId, inContext.Entity, inExpectedType, bNoParams, inContext.Library);
                        }
                        else
                        {
                            queryId = LibraryGUILayout.QuerySelectorUnknown(Content.QueryIdLabel, queryId, inExpectedType, bNoParams, inContext.Library);
                        }
                        break;
                    }

                    case EntityScopeType.ObjectById:
                    {
                        RSEntityId entityId = scope.IdArg;
                        IRSEntity  entity   = null;
                        if (inFlags.Has(RSValidationFlags.FilterSelection) && entityId != RSEntityId.Null && !scope.HasLinks() && inContext.Manager != null && (entity = inContext.Manager.Lookup.EntityWithId(entityId)) != null)
                        {
                            queryId = LibraryGUILayout.QuerySelector(Content.QueryIdLabel, queryId, entity, inExpectedType, bNoParams, inContext.Library);
                        }
                        else
                        {
                            queryId = LibraryGUILayout.QuerySelectorUnknown(Content.QueryIdLabel, queryId, inExpectedType, bNoParams, inContext.Library);
                        }
                        break;
                    }

                    default:
                        queryId = LibraryGUILayout.QuerySelectorUnknown(Content.QueryIdLabel, queryId, inExpectedType, bNoParams, inContext.Library);
                        break;
                    }

                    if (queryId == 0)
                    {
                        EditorGUILayout.HelpBox("Cannot perform null query", MessageType.Error);
                    }
                }
            }

            return(new EntityScopedIdentifier(scope, queryId));
        }
示例#2
0
        private void TableParamsGUI()
        {
            {
                TableMode nextMode = (TableMode)EnumGUILayout.EnumField("Search Type", m_Params.TableParams.Mode);
                if (nextMode != m_Params.TableParams.Mode)
                {
                    m_SelfUndoTarget.MarkDirty("Switched entity search mode");
                    m_Params.TableParams.Mode = nextMode;
                    m_Params.TableParams.Clear();
                    m_SearchQueued = true;
                }
            }

            switch (m_Params.TableParams.Mode)
            {
            case TableMode.Action:
            {
                int nextAction = LibraryGUILayout.ActionSelector(s_ActionLabel, m_Params.TableParams.ElementSearchId, m_Library);
                if (nextAction != m_Params.TableParams.ElementSearchId)
                {
                    m_SelfUndoTarget.MarkDirty("Changed action id");
                    m_Params.TableParams.ElementSearchId = nextAction;
                    m_SearchQueued = true;
                }
                break;
            }

            case TableMode.Query:
            {
                int nextQuery = LibraryGUILayout.QuerySelector(s_QueryLabel, m_Params.TableParams.ElementSearchId, false, m_Library);
                if (nextQuery != m_Params.TableParams.ElementSearchId)
                {
                    m_SelfUndoTarget.MarkDirty("Changed query id");
                    m_Params.TableParams.ElementSearchId = nextQuery;
                    m_SearchQueued = true;
                }
                break;
            }

            case TableMode.Trigger:
            {
                int nextTrigger = (int)LibraryGUILayout.TriggerSelector(s_TriggerLabel, new RSTriggerId(m_Params.TableParams.ElementSearchId), m_Library);
                if (nextTrigger != m_Params.TableParams.ElementSearchId)
                {
                    m_SelfUndoTarget.MarkDirty("Changed trigger id");
                    m_Params.TableParams.ElementSearchId = nextTrigger;
                    m_SearchQueued = true;
                }
                break;
            }

            case TableMode.Entity:
            {
                RSEntityId entityId = RSEditorUtility.EditorPlugin.EntityIdGUIField(s_EntityLabel, m_Params.TableParams.EntitySearch, m_EntityMgr);
                if (entityId != m_Params.TableParams.EntitySearch)
                {
                    m_SelfUndoTarget.MarkDirty("Changed entity search");
                    m_Params.TableParams.EntitySearch = entityId;
                    m_SearchQueued = true;
                }
                break;
            }

            case TableMode.String:
            {
                string nextString = EditorGUILayout.TextField("Search", m_Params.TableParams.StringSearch);
                if (nextString != m_Params.TableParams.StringSearch)
                {
                    m_SelfUndoTarget.MarkDirty("Changed string search");
                    m_Params.TableParams.StringSearch = nextString;
                    m_SearchQueued = true;
                }
                break;
            }
            }
        }