public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            bool ro = property.FindPropertyRelative("m_readOnly").boolValue;

            if (ro)
            {
                EditorGUI.BeginDisabledGroup(true);
            }

            EditorGUI.BeginProperty(position, label, property);
            position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);

            var indent = EditorGUI.indentLevel;

            EditorGUI.indentLevel = 0;

            float buttonWidth = 22;
            float rootWidth   = 70;
            float leafWidth   = position.width - rootWidth - 5 - buttonWidth;
            var   rootRect    = new Rect(position.x, position.y, rootWidth, position.height);
            var   leafRect    = new Rect(position.x + rootWidth + 5, position.y, leafWidth, position.height);
            var   buttonRect  = new Rect(position.x + rootWidth + 5 + leafWidth, position.y, buttonWidth, position.height);

            var pRoot = property.FindPropertyRelative("m_root");
            var pLeaf = property.FindPropertyRelative("m_leaf");

            EditorGUI.PropertyField(rootRect, pRoot, GUIContent.none);
            EditorGUI.PropertyField(leafRect, pLeaf, GUIContent.none);
            if (GUI.Button(buttonRect, "..."))
            {
                var tmp  = new DataPath((DataPath.Root)pRoot.intValue, pLeaf.stringValue);
                var path = EditorUtility.OpenFolderPanel("Select Directory", tmp.GetFullPath(), "");
                if (path.Length > 0)
                {
                    var newPath = new DataPath(path);
                    pRoot.intValue    = (int)newPath.root;
                    pLeaf.stringValue = newPath.leaf;
                }
            }

            EditorGUI.indentLevel = indent;
            EditorGUI.EndProperty();

            if (ro)
            {
                EditorGUI.EndDisabledGroup();
            }
        }