To get this adaptive view in my Editor window, I use the following code:
/// <summary>
/// Header render method.
/// </summary>
/// <param name="position"><see cref="Rect"/></param>
/// <param name="localization"><see cref="Localization"/></param>
private void DrawHeader(Rect position, Localization localization, bool isDefault = false)
{
GUILayout.BeginHorizontal(EditorStyles.inspectorFullWidthMargins);
GUIContent content = new GUIContent(EditorGUIUtility.IconContent("tab_prev").image, "Back");
if (GUILayout.Button(content, EditorStyles.label, GUILayout.Width(20f), GUILayout.Height(20f)))
{
GoBack();
}
GUILayout.FlexibleSpace();
EditorGUI.BeginChangeCheck();
string name = GUILayout.TextField(localization.Name);
if (!string.IsNullOrWhiteSpace(name)) { localization.Name = name; }
if (EditorGUI.EndChangeCheck())
{
Debug.Log("EndChangeCheck");
Undo.RecordObject((Object)Storage, $"Changed data for {localization.Name} in {Storage} v{Storage.Version}");
Storage?.SaveChanges();
}
GUILayout.FlexibleSpace();
content = new GUIContent(EditorGUIUtility.IconContent("CreateAddNew").image, "Add");
if (GUILayout.Button(content, EditorStyles.label, GUILayout.Width(20), GUILayout.Height(20)))
{
Storage.AddLocalization(localization);
noticeView.Show(position, new GUIContent($"{localization.Name} has been added"));
GoBack();
}
GUILayout.EndHorizontal();
EditorExtends.DrawLine(Color.black);
}
But if GUILayout.TextField
has focus, Undo doesn’t work at all.
I know that you can use EditorGUILayout.TextField
, and Undo will work, but GUILayout.FlexibleSpace()
does not work on EditorGUILayout.TextField
and the field does not look cool.
Tell me how I can make Undo work with GUILayout.TextField
or make EditorGUILayout.TextField
as pretty as GUILayout.TextField
?