public void Setup(SerializedProperty property)
    {
        m_property = property;

        modeProperty       = property.FindPropertyRelative("m_mode");
        colorArrayProperty = property.FindPropertyRelative("m_serializedColorKeys");
        alphaArrayProperty = property.FindPropertyRelative("m_serializedAlphaKeys");

        editMode     = EditMode.color;
        selectedItem = 0;

        selectedProperty = colorArrayProperty.GetArrayElementAtIndex(0);

        gradientTexture          = new Texture2D(400, 1);
        gradientTexture.wrapMode = TextureWrapMode.Clamp;

        currentGradient = GradientFieldDrawer.GenerateGradient(property);
        GradientFieldDrawer.SetGradientToTexture(currentGradient, gradientTexture);
        bgTexture = GradientFieldDrawer.GenerateInspectorBackground(30, 2);


        alphaHandle = LoadIconFromRelativePath("/Resources/GradientAlphaKey.png");
        colorHandle = LoadIconFromRelativePath("/Resources/GradientColorKey.png");

        alphaHandleHighlight = LoadIconFromRelativePath("/Resources/GradientAlphaKey.Highlight.png");
        colorHandleHighlight = LoadIconFromRelativePath("/Resources/GradientColorKey.Highlight.png");
    }
    void Save()
    {
        GradientFieldDrawer.ResetGradient();

        m_property.serializedObject.ApplyModifiedProperties();

        int excludeAlpha = -1;
        int excludeColor = -1;

        if (isDraggingToRemove)
        {
            excludeAlpha = editMode == EditMode.alpha ? selectedItem : -1;
            excludeColor = editMode == EditMode.color ? selectedItem : -1;
        }

        currentGradient = GradientFieldDrawer.GenerateGradient(m_property, excludeColor, excludeAlpha);
        GradientFieldDrawer.SetGradientToTexture(currentGradient, gradientTexture);

        Repaint();
    }