private bool TryEdit(UnityEngine.Object inObject)
        {
            IRSRuleTableSource ruleTableSource;
            bool bFoundTable = RSEditorUtility.EditorPlugin.TryGetRuleTable(inObject, out ruleTableSource);

            if (!bFoundTable || ruleTableSource.TableData == null)
            {
                return(false);
            }

            m_TargetState.Select(inObject);

            m_SelectionState.ClearAll();
            m_SelectionState.Source = ruleTableSource;
            m_SelectionState.Table  = ruleTableSource.TableData;

            if (m_SelectionState.Table.Rules == null)
            {
                m_TargetState.UndoTarget.MarkDirty("Initialized Rules");
                m_SelectionState.Table.Rules = new RSRuleData[0];
            }

            bool bCleanUpChanged = TableUtils.CleanUp(m_SelectionState.Table);

            if (bCleanUpChanged)
            {
                m_TargetState.UndoTarget.MarkDirtyWithoutUndo("Cleaned up Rule Table data");
            }

            ConfigureRuleList(m_SelectionState.Table, ref m_RuleList);

            m_Context = new RSValidationContext(RSEditorUtility.EditorPlugin.Library);
            RegenContext(true);
            ScanForIssues();

            UnityEditor.Selection.activeObject = inObject;
            return(true);
        }
        private void RegenContext(bool inbForce = false)
        {
            if (!inbForce && Event.current.type != EventType.Layout)
            {
                return;
            }

            m_SelfUndoTarget = new UndoTarget(this, "RuleTableEditor");
            m_TargetState.Refresh();

            if (m_TargetState.SelectedObject == null)
            {
                m_TargetState.Clear();
                m_SelectionState.ClearAll();
                return;
            }

            if (m_TargetState.SelectedObject != null && m_SelectionState.Source == null)
            {
                IRSRuleTableSource tableSource;
                if (!RSEditorUtility.EditorPlugin.TryGetRuleTable(m_TargetState.SelectedObject, out tableSource))
                {
                    m_TargetState.Clear();
                    m_SelectionState.ClearAll();
                    return;
                }

                if (tableSource.TableData == null)
                {
                    m_TargetState.Clear();
                    m_SelectionState.ClearAll();
                    return;
                }

                m_SelectionState.Source = tableSource;
                m_SelectionState.Table  = tableSource.TableData;

                bool bCleanUpChanged = TableUtils.CleanUp(tableSource.TableData);
                if (bCleanUpChanged)
                {
                    m_TargetState.UndoTarget.MarkDirtyWithoutUndo("Cleaned up Rule Table data");
                }
            }

            m_SelectionState.Refresh();

            m_Context = m_Context.WithLibrary(RSEditorUtility.EditorPlugin.Library);

            IRSEntity entity = null;

            if (m_TargetState.SelectedObject)
            {
                RSEditorUtility.EditorPlugin.TryGetEntity(m_TargetState.SelectedObject, out entity);
            }

            m_Context = m_Context.WithEntity(entity);

            IRSEntityMgr manager = null;

            if (manager == null || m_TargetState.SelectedObject)
            {
                RSEditorUtility.EditorPlugin.TryGetEntityManager(m_TargetState.SelectedObject, out manager);
            }

            m_Context = m_Context.WithManager(manager);
        }