How to store a boolean for each variable in a class

Here's a link to an example of what I'm asking about http://www.anbsoft.com/middleware/ezs/overview/

At around 2:50 it shows a list of variables each with a toggle button. I am wanting to know how you would create the boolean for each of those variables and save them. What I'm trying to do is recreate what EZ Game Saver does since I don't have $99 to just throw on it and I'd want it to be my own anyways.

SaveMe.cs

Make a GameObject and put this script on it

 using UnityEngine; 
 using System.Collections; 
 using System.Collections.Generic;

 public class SaveMe : MonoBehaviour {
  public Component[] components;
 }

SaveMeEditor.cs

Make a folder in the main Assets folder named Editor and put this script in it

using UnityEngine;
using UnityEditor;
using System;
using System.Reflection;

[CustomEditor(typeof(SaveMe))]
public class SaveMeEditor : Editor {

    public SaveMe saveMe;

    void Awake() {
        saveMe = target as SaveMe;
    }

    public override void OnInspectorGUI() {
        saveMe.components = saveMe.GetComponents(typeof(Component));

        int i = 0;

        foreach(Component a in saveMe.components) {
            Type type = a.GetType();

            if(saveMe.components.Length > 0) {
                GUI.color = Color.Lerp(new Color(.2f, 1, .2f), Color.white, (float)i / saveMe.components.Length);
            }

            GUILayout.Button(type.Name);
            GUI.color = Color.white;

            if(!(a == saveMe)) {
                foreach(PropertyInfo p in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)) {
                    if(IsSaveable(p.PropertyType)) {
                        GUILayout.BeginHorizontal();

                        GUILayout.BeginHorizontal();
                        EditorGUILayout.Toggle(false, GUILayout.ExpandWidth(false), GUILayout.MaxWidth(20));
                        GUILayout.Label("." + p.Name, GUILayout.ExpandWidth(false));
                        GUILayout.EndHorizontal();

                        GUILayout.Label(p.PropertyType.Name, GUILayout.ExpandWidth(false));
                        GUILayout.EndHorizontal();
                    }
                }
            }

            i++;
        }
    }

    bool IsSaveable(object variable) {
        object a = variable;

        return
            a == typeof(bool)
            |
            a == typeof(int)
            |
            a == typeof(float)
            |
            a == typeof(double)
            |
            a == typeof(string)
            |
            a == typeof(Vector3)
            |
            a == typeof(Quaternion)
            ;
    }
}

What you will see when you go back to the GameObject with the SaveMe script on it, you should see at least one button named Transform and a few variables listed. On the left side is a toggle button. The toggle button is what I need the booleans for. If the boolean is True then I want to be able to save that variable. If someone can give me some ideas of how I could do that I'd appreciate it.

I got it working.. mostly. It doesn't seem to notice variables that I add into my own scripts but oh well I'll worry about that later.

SaveMe.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class SaveMe : MonoBehaviour {
  public Component[] components;
  public List<Foldout> foldout = new List<Foldout>();

  public bool cFoldout = false;

  public bool Contains(Component item) {
      foreach(Foldout a in foldout) {
          if(a.component.Equals(item)) { return true; }
      }

      return false;
  }

  [System.Serializable]
  public class Foldout {
      public Component component;
      public bool componentEnabled = false;
      public bool[] variableSavable = new bool[0];

      public Foldout() { }
      public Foldout(Component component) {
          this.component = component;
      }
  }
}

SaveMeEditor.cs

using UnityEngine;
using UnityEditor;
using System;
using System.Reflection;
using System.Collections.Generic;

[CustomEditor(typeof(SaveMe))]
public class SaveMeEditor : Editor {
    public SaveMe saveMe;

    void Awake() {
        saveMe = target as SaveMe;
    }

    public override void OnInspectorGUI() {
        saveMe.components = saveMe.GetComponents(typeof(Component));

        #region Add Components To List
        string added = "Added - ";
        foreach(Component a in saveMe.components) {
            if(a != saveMe) {
                if(!saveMe.Contains(a)){
                    added += "
" + a.GetType().Name + " ID - " +  a.GetInstanceID();
                    saveMe.foldout.Insert(saveMe.foldout.Count, new SaveMe.Foldout(a));
                }
            }
        }
        if(added != "Added - ") {
            Debug.Log(added);
        }
        #endregion

        #region Remove Null Components From List
        List<int> remove = new List<int>(saveMe.foldout.Count);
        for(int n = 0; n < saveMe.foldout.Count; n++){
            if(saveMe.foldout[n].component == null) {
                remove.Add(n);
            }
        }

        foreach(int r in remove) {
            saveMe.foldout.RemoveAt(r);
        }
        #endregion

        #region Draw Foldout Buttons
        for(int i = 0; i < saveMe.foldout.Count; i++){
            if(saveMe.foldout.Count > 1) {
                GUI.color = Color.Lerp(new Color(.2f, 1, .2f), Color.white, (float)i / (float)(saveMe.foldout.Count - 1));
            }
            SaveMeGUI(saveMe.foldout*);*
 *}*
 *GUI.color = Color.white;*
 *#endregion*
 *#region Component Foldout*
 *saveMe.cFoldout = EditorGUILayout.Foldout(saveMe.cFoldout, "Foldout");*
 *if(saveMe.cFoldout) {*
 *for(int f = 0; f < saveMe.foldout.Count; f++) {*
 *EditorGUILayout.BeginHorizontal();*
 *EditorGUILayout.PrefixLabel(saveMe.foldout[f].component.GetType().Name);*
 *saveMe.foldout[f].componentEnabled = EditorGUILayout.Toggle(saveMe.foldout[f].componentEnabled);*
 *EditorGUILayout.EndHorizontal();*
 *}*
 *}*
 *#endregion*
 *}*
 *void SaveMeGUI(SaveMe.Foldout foldout) {*
 *Type type = foldout.component.GetType();*
 *if(GUILayout.Button(type.Name)) {*
 *foldout.componentEnabled = !foldout.componentEnabled;*
 *}*
 *if(foldout.componentEnabled) {*
 *GUI.color = Color.white;*
 *//Get all variables*
 *PropertyInfo[] propertyInfo = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);*
 *int fields = 0;*
 *foreach(PropertyInfo b in propertyInfo) {*
 *if(IsSaveable(b.PropertyType)) {*
 *fields++;*
 *}*
 *}*
 *if(foldout.variableSavable.Length != fields) {*
 *Array.Resize<bool>(ref foldout.variableSavable, fields);*
 *}*
 *for(int i = 0; i < fields; i++) {*
 _if(IsSaveable(propertyInfo*.PropertyType)) {*_
 _*GUILayout.BeginHorizontal();*_
 _*GUILayout.BeginHorizontal();*_
 <em><em>foldout.variableSavable _= EditorGUILayout.Toggle(foldout.variableSavable*, GUILayout.ExpandWidth(false), GUILayout.MaxWidth(20));*_</em></em>
 <em><em><em>_GUILayout.Label("." + propertyInfo*.Name, GUILayout.ExpandWidth(false));*_</em></em></em>
 <em><em><em>_*GUILayout.EndHorizontal();*_</em></em></em>
 <em><em><em><em>_GUILayout.Label(propertyInfo*.PropertyType.Name, GUILayout.ExpandWidth(false));*_</em></em></em></em>
 <em><em><em><em>_*GUILayout.EndHorizontal();*_</em></em></em></em>
 <em><em><em><em>_*}*_</em></em></em></em>
 <em><em><em><em>_*}*_</em></em></em></em>
 <em><em><em><em>_*}*_</em></em></em></em>
 <em><em><em><em>_*}*_</em></em></em></em>
 <em><em><em><em>_*bool IsSaveable(object variable) {*_</em></em></em></em>
 <em><em><em><em>_*object a = variable;*_</em></em></em></em>
 <em><em><em><em>_*return*_</em></em></em></em>
 <em><em><em><em>_*a == typeof(bool)*_</em></em></em></em>
 <em><em><em><em>_*|*_</em></em></em></em>
 <em><em><em><em>_*a == typeof(int)*_</em></em></em></em>
 <em><em><em><em>_*|*_</em></em></em></em>
 <em><em><em><em>_*a == typeof(float)*_</em></em></em></em>
 <em><em><em><em>_*|*_</em></em></em></em>
 <em><em><em><em>_*a == typeof(string)*_</em></em></em></em>
 <em><em><em><em>_*|*_</em></em></em></em>
 <em><em><em><em>_*a == typeof(System.Enum)*_</em></em></em></em>
 <em><em><em><em>_*|*_</em></em></em></em>
 <em><em><em><em>_*a == typeof(Color)*_</em></em></em></em>
 <em><em><em><em>_*|*_</em></em></em></em>
 <em><em><em><em>_*a == typeof(Vector2)*_</em></em></em></em>
 <em><em><em><em>_*|*_</em></em></em></em>
 <em><em><em><em>_*a == typeof(Vector3)*_</em></em></em></em>
 <em><em><em><em>_*|*_</em></em></em></em>
 <em><em><em><em>_*a == typeof(Quaternion)*_</em></em></em></em>
 <em><em><em><em>_*//|*_</em></em></em></em>
 <em><em><em><em>_*//a == typeof(GameObject)*_</em></em></em></em>
 <em><em><em><em>_*//|*_</em></em></em></em>
 <em><em><em><em>_*//a == typeof(Component)*_</em></em></em></em>
 <em><em><em><em>_*;*_</em></em></em></em>
 <em><em><em><em>_*}*_</em></em></em></em>
<em><em><em><em>_*}*_</em></em></em></em>
<em><em><em><em>_*```*_</em></em></em></em>