void DrawEdit(Rect rect)
        {
            var exposedProperty = ExposedData.First() as ExposedProperty;

            if (exposedProperty != null)
            {
                if (!exposedProperty.IsValid)
                {
                    EditorGUI.DrawRect(rect, new Color(1, 0, 0, 0.3f));
                }
            }

            UpdateDrag(rect);
            var guiEnabled = GUI.enabled;

            if (this.Inherited)
            {
                GUI.enabled = false;
            }

            var label     = ExposedData.First().Label;
            var labelRect = new Rect(rect)
            {
                x = rect.x - 1, width = rect.width - 48
            };

            EditorGUI.BeginChangeCheck();
            label = EditorGUI.TextField(labelRect, label);
            if (EditorGUI.EndChangeCheck())
            {
                this.Label.text = label;
                this.ExposedData.Foreach(d => d.Label = label);
            }

            labelRect.x    += labelRect.width;
            labelRect.width = 16;
            GUI.tooltip     = "Remove";

            if (GUI.Button(labelRect, PEResources.removeIcon, PEUtils.emptyStyle))
            {
                PEExposedPropertiesEditor.OnRemove(PEExposedPropertiesEditor.current, this.Id);
            }

            labelRect.x += labelRect.width;

            if (!IsGroup)
            {
                GUI.tooltip = "Edit";
                if (GUI.Button(labelRect, PEResources.editIcon, PEUtils.emptyStyle))
                {
                    PEExposedPropertiesEditor.OnEdit(PEExposedPropertiesEditor.current, this);
                }
            }

            GUI.enabled = guiEnabled;

            if (IsGroup)
            {
                GUI.tooltip = "Add";
                if (GUI.Button(labelRect, PEResources.addIcon, PEUtils.emptyStyle))
                {
                    PEExposedPropertiesEditor.OnAdd(PEExposedPropertiesEditor.current, this.Id);
                }
            }

            labelRect.x += labelRect.width + 4;

            if (this.Inherited)
            {
                var lw = EditorGUIUtility.labelWidth;
                EditorGUIUtility.labelWidth = 0;

                labelRect.y -= 1;
                GUI.tooltip  = "Visible";

                var result = !GUI.Toggle(labelRect, !this.ExposedData.First().Hidden, "Show");

                if (result != this.ExposedData.First().Hidden)
                {
                    this.ExposedData.First().Hidden = result;
                    EditorApplication.delayCall    += PEExposedPropertiesEditor.current.Build;
                }

                EditorGUIUtility.labelWidth = lw;
            }

            DrawHighlight(rect);
        }