internal void TransitionChanged(FoldoutTransitionField field, TransitionChangeType changeType)
 {
     using (var pooled = TransitionChangedEvent.GetPooled())
     {
         pooled.target     = this;
         pooled.field      = field;
         pooled.transition = field.GetTransitionData();
         pooled.changeType = changeType;
         pooled.index      = field.index;
         SendEvent(pooled);
     }
 }
 public static bool IsSet(this TransitionChangeType value, TransitionChangeType flag)
 {
     return((value & flag) == flag);
 }
 public static bool Any(this TransitionChangeType value)
 {
     return((value & TransitionChangeType.All) != TransitionChangeType.None);
 }
        public void Refresh(TransitionChangeType overrides, TransitionChangeType keywords)
        {
            var durationAllZeroes = true;

            using (ListPool <FoldoutTransitionField> .Get(out var list))
            {
                this.Query <FoldoutTransitionField>().ToList(list);

                if (list.Count == 1)
                {
                    list[0].RemoveTransitionButton.SetEnabled(overrides.Any());
                }
                else if (list.Count > 0)
                {
                    list[0].RemoveTransitionButton.SetEnabled(true);
                }

                for (var i = 0; i < list.Count; ++i)
                {
                    var foldout = list[i];

                    if (keywords.IsSet(TransitionChangeType.Property))
                    {
                        foldout.propertyField.SetEnabled(i == 0);
                    }
                    else
                    {
                        foldout.propertyField.SetEnabled(true);
                    }

                    if (!foldout.durationField.isKeyword && foldout.durationField.length != 0)
                    {
                        durationAllZeroes = false;
                    }

                    if (keywords.IsSet(TransitionChangeType.Duration))
                    {
                        foldout.durationField.SetEnabled(i == 0);
                    }
                    else
                    {
                        foldout.durationField.SetEnabled(true);
                    }

                    if (keywords.IsSet(TransitionChangeType.TimingFunction))
                    {
                        foldout.timingFunctionField.SetEnabled(i == 0);
                    }
                    else
                    {
                        foldout.timingFunctionField.SetEnabled(true);
                    }

                    if (keywords.IsSet(TransitionChangeType.Delay))
                    {
                        foldout.delayField.SetEnabled(i == 0);
                    }
                    else
                    {
                        foldout.delayField.SetEnabled(true);
                    }
                    foldout.overrides = overrides;

                    foldout.EnableInClassList(k_FirstItemClass, i == 0);
                    foldout.EnableInClassList(k_LastItemClass, i == contentContainer.childCount - 1);
                    foldout.EnableInClassList(k_EvenItemClass, i % 2 == 0);
                    foldout.EnableInClassList(k_OddItemClass, i % 2 != 0);
                }
            }

            var mustEditToAddTransition = overrides == keywords && overrides.Any();

            m_AddTransitionButton.SetEnabled(!mustEditToAddTransition);
            m_EditPropertyToAddNewTransitionWarning.EnableInClassList(k_DisplayWarningClass, mustEditToAddTransition);

            var transitionWillBeInstant = durationAllZeroes && overrides.IsSet(TransitionChangeType.Duration);

            m_TransitionNotVisibleWarning.EnableInClassList(k_DisplayWarningClass, transitionWillBeInstant);
        }