private void DrawBuildConfigSettings(BuildConfig.BuildConfig buildConfig, BuildConfigSettings settings, SerializedProperty settingsSerializedProperty, bool isInherited, float currentViewWidth, out bool didDeleteSettings)
        {
            didDeleteSettings = false;

            bool foldoutVisible = true;
            Rect boxRect        = new Rect();

            var verticleHelper = settings.IsInline ?
                                 (IDisposable) new EditorGUILayout.HorizontalScope("box") :
                                 (IDisposable) new FoldoutScope(settings.DisplayName.GetHashCode(), settings.DisplayName, out foldoutVisible, out boxRect, false);

            using (verticleHelper)
            {
                float y = settings.IsInline ? (verticleHelper as EditorGUILayout.HorizontalScope).rect.y : boxRect.y;

                // Drawing the button
                float buttonSize   = 14;
                float rightPadding = 25;
                float topPadding   = 2;

                Rect buttonRect = new Rect(new Vector2(currentViewWidth - rightPadding, y + topPadding), new Vector2(buttonSize, buttonSize));

                if (isInherited)
                {
                    if (ButtonUtil.DrawAddButton(buttonRect))
                    {
                        buildConfig.Settings.Add(Activator.CreateInstance(settings.GetType()) as BuildConfigSettings);
                    }
                }
                else
                {
                    if (ButtonUtil.DrawDeleteButton(buttonRect))
                    {
                        buildConfig.Settings.Remove(settings);
                        didDeleteSettings = true;
                        return;
                    }
                }

                // Breaking out if we're not suppose to show the foldout
                if (foldoutVisible == false)
                {
                    return;
                }

                // Iterating and displaying all properties
                using (new EditorGUI.DisabledGroupScope(isInherited))
                {
                    float width = currentViewWidth - (settings.IsInline ? 60 : 15);
                    settings.DrawSettings(settings, settingsSerializedProperty, width);
                }
            }
        }
        private void DrawBuildConfigSettings(BuildConfig.BuildConfig buildConfig, SerializedProperty settingsSerializedProperty, float currentViewWidth)
        {
            List <Type> settingsToAdd = new List <Type>();

            foreach (var settingsType in BuildSettingsTypes)
            {
                BuildConfigSettings settings = buildConfig.GetSettings(settingsType, out bool isInherited);

                if (settings == null)
                {
                    settingsToAdd.Add(settingsType);
                }
                else
                {
                    // Checking if we should skip this
                    if (isInherited && buildConfig.ShowInherited == false)
                    {
                        continue;
                    }

                    SerializedProperty currentSettings = null;

                    for (int i = 0; i < settingsSerializedProperty.arraySize; i++)
                    {
                        var s = settingsSerializedProperty.GetArrayElementAtIndex(i);

                        if (s.managedReferenceFullTypename.EndsWith(settingsType.FullName))
                        {
                            currentSettings = s;
                        }
                    }

                    this.DrawBuildConfigSettings(buildConfig, settings, currentSettings, isInherited, currentViewWidth, out bool didDeleteSettings);

                    if (didDeleteSettings)
                    {
                        break;
                    }
                }
            }

            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.Space();

            EditorGUILayout.LabelField("Settings");
            this.DrawSettingsButtons(buildConfig, currentViewWidth, settingsToAdd);
        }
 public override void DrawSettings(BuildConfigSettings settings, SerializedProperty settingsSerializedProperty, float width)
 {
     base.DrawSettings(settings, settingsSerializedProperty, width);
 }