private void RuleInfoGUI()
        {
            if (m_SelectionState.Rule == null)
            {
                return;
            }

            if (m_SelectionState.Rule.Conditions == null)
            {
                m_TargetState.UndoTarget.MarkDirty("Initialized Conditions");
                m_SelectionState.Rule.Conditions = new RSConditionData[0];
            }

            if (m_SelectionState.Rule.Actions == null)
            {
                m_TargetState.UndoTarget.MarkDirty("Initialized Actions");
                m_SelectionState.Rule.Actions = new RSActionData[0];
            }

            RuleGUILayout.RuleData(m_TargetState.UndoTarget, m_SelectionState.Rule, m_SelectionState.Table, GetBaseFlags(), m_Context);

            EditorGUILayout.Separator();

            m_ScrollState.RuleScroll = GUILayout.BeginScrollView(m_ScrollState.RuleScroll, false, false);
            {
                EditorGUILayout.LabelField(Content.RuleConditionListLabel, RSGUIStyles.SubHeaderStyle);

                if (m_ConditionList == null)
                {
                    ConfigureConditionList(m_SelectionState.Rule, ref m_ConditionList);
                }

                m_ConditionList.array = m_SelectionState.Rule.Conditions;
                m_ConditionList.DoLayout();
                using (new EditorGUI.DisabledScope(m_SelectionState.Rule.Conditions.Length == 0))
                {
                    Subset currentSubset = m_SelectionState.Rule.ConditionSubset;
                    Subset nextSubset    = (Subset)EditorGUILayout.EnumPopup(Content.RuleConditionSubsetLabel, currentSubset);
                    if (currentSubset != nextSubset)
                    {
                        m_TargetState.UndoTarget.MarkDirty("Changed Rule Conditions Subset");
                        m_SelectionState.Rule.ConditionSubset = nextSubset;
                    }
                }

                EditorGUILayout.Separator();

                EditorGUILayout.LabelField(Content.RuleActionListLabel, EditorStyles.boldLabel);

                if (m_ActionList == null)
                {
                    ConfigureActionList(m_SelectionState.Rule, ref m_ActionList);
                }

                m_ActionList.array = m_SelectionState.Rule.Actions;
                m_ActionList.DoLayout();
            }
            GUILayout.EndScrollView();
        }
        private void RuleTableGUI()
        {
            if (m_SelectionState.Table == null)
            {
                EditorGUILayout.HelpBox("No table selected for editing", MessageType.Info);
                return;
            }

            if (!m_TargetState.UndoTarget.IsValid())
            {
                EditorGUILayout.HelpBox("Target is no longer valid (possibly destroyed?)", MessageType.Error);
                return;
            }

            string currentName = m_SelectionState.Table.Name;
            string nextName    = EditorGUILayout.TextField(Content.TableNameLabel, currentName);

            if (currentName != nextName)
            {
                m_TargetState.UndoTarget.MarkDirty("Changed Rule Table Name");
                m_SelectionState.Table.Name = nextName;
            }

            EditorGUILayout.Separator();

            EditorGUILayout.LabelField(Content.TableRuleListLabel, RSGUIStyles.SubHeaderStyle);

            m_ScrollState.TableScroll = GUILayout.BeginScrollView(m_ScrollState.TableScroll, false, false);
            {
                if (m_RuleList == null)
                {
                    ConfigureRuleList(m_SelectionState.Table, ref m_RuleList);
                }

                m_RuleList.array = m_SelectionState.Table.Rules;
                m_RuleList.DoLayout();
            }
            GUILayout.EndScrollView();
        }