using UnityEngine; 
 | 
using UnityEngine.PostProcessing; 
 | 
using System; 
 | 
using System.Linq.Expressions; 
 | 
  
 | 
namespace UnityEditor.PostProcessing 
 | 
{ 
 | 
    public class PostProcessingModelEditor 
 | 
    { 
 | 
        public PostProcessingModel target { get; internal set; } 
 | 
        public SerializedProperty serializedProperty { get; internal set; } 
 | 
  
 | 
        protected SerializedProperty m_SettingsProperty; 
 | 
        protected SerializedProperty m_EnabledProperty; 
 | 
  
 | 
        internal bool alwaysEnabled = false; 
 | 
        internal PostProcessingProfile profile; 
 | 
        internal PostProcessingInspector inspector; 
 | 
  
 | 
        internal void OnPreEnable() 
 | 
        { 
 | 
            m_SettingsProperty = serializedProperty.FindPropertyRelative("m_Settings"); 
 | 
            m_EnabledProperty = serializedProperty.FindPropertyRelative("m_Enabled"); 
 | 
  
 | 
            OnEnable(); 
 | 
        } 
 | 
  
 | 
        public virtual void OnEnable() 
 | 
        {} 
 | 
  
 | 
        public virtual void OnDisable() 
 | 
        {} 
 | 
  
 | 
        internal void OnGUI() 
 | 
        { 
 | 
            GUILayout.Space(5); 
 | 
  
 | 
            var display = alwaysEnabled 
 | 
                ? EditorGUIHelper.Header(serializedProperty.displayName, m_SettingsProperty, Reset) 
 | 
                : EditorGUIHelper.Header(serializedProperty.displayName, m_SettingsProperty, m_EnabledProperty, Reset); 
 | 
  
 | 
            if (display) 
 | 
            { 
 | 
                EditorGUI.indentLevel++; 
 | 
                using (new EditorGUI.DisabledGroupScope(!m_EnabledProperty.boolValue)) 
 | 
                { 
 | 
                    OnInspectorGUI(); 
 | 
                } 
 | 
                EditorGUI.indentLevel--; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        void Reset() 
 | 
        { 
 | 
            var obj = serializedProperty.serializedObject; 
 | 
            Undo.RecordObject(obj.targetObject, "Reset"); 
 | 
            target.Reset(); 
 | 
            EditorUtility.SetDirty(obj.targetObject); 
 | 
        } 
 | 
  
 | 
        public virtual void OnInspectorGUI() 
 | 
        {} 
 | 
  
 | 
        public void Repaint() 
 | 
        { 
 | 
            inspector.Repaint(); 
 | 
        } 
 | 
  
 | 
        protected SerializedProperty FindSetting<T, TValue>(Expression<Func<T, TValue>> expr) 
 | 
        { 
 | 
            return m_SettingsProperty.FindPropertyRelative(ReflectionUtils.GetFieldPath(expr)); 
 | 
        } 
 | 
  
 | 
        protected SerializedProperty FindSetting<T, TValue>(SerializedProperty prop, Expression<Func<T, TValue>> expr) 
 | 
        { 
 | 
            return prop.FindPropertyRelative(ReflectionUtils.GetFieldPath(expr)); 
 | 
        } 
 | 
    } 
 | 
} 
 |