in Assets/MRTK/SDK/Features/UX/Scripts/Buttons/ButtonIconSet.cs [539:778]
public override void OnInspectorGUI()
{
ButtonIconSet bis = (ButtonIconSet)target;
bool showQuadIconFoldout = SessionState.GetBool(ShowQuadIconsFoldoutKey, false);
bool showSpriteIconFoldout = SessionState.GetBool(ShowSpriteIconsFoldoutKey, false);
bool showCharIconFoldout = SessionState.GetBool(ShowCharIconsFoldoutKey, false);
bool showAvailableIcons = SessionState.GetBool(AvailableIconsFoldoutKey, true);
bool showSelectedIcons = SessionState.GetBool(SelectedIconsFoldoutKey, true);
#if UNITY_2019_3_OR_NEWER
showQuadIconFoldout = EditorGUILayout.BeginFoldoutHeaderGroup(showQuadIconFoldout, "Quad Icons");
#else
showQuadIconFoldout = EditorGUILayout.Foldout(showQuadIconFoldout, "Quad Icons");
#endif
if (showQuadIconFoldout)
{
using (new EditorGUI.IndentLevelScope(1))
{
quadIconsProp.isExpanded = true;
EditorGUILayout.PropertyField(quadIconsProp, true);
}
}
#if UNITY_2019_3_OR_NEWER
EditorGUILayout.EndFoldoutHeaderGroup();
#endif
#if UNITY_2019_3_OR_NEWER
showSpriteIconFoldout = EditorGUILayout.BeginFoldoutHeaderGroup(showSpriteIconFoldout, "Sprite Icons");
#else
showSpriteIconFoldout = EditorGUILayout.Foldout(showSpriteIconFoldout, "Sprite Icons");
#endif
if (showSpriteIconFoldout)
{
using (new EditorGUI.IndentLevelScope(1))
{
spriteIconsProp.isExpanded = true;
// Check if the sprite Icons were updated
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(spriteIconsProp, true);
// End the code block and update the label if a change occurred
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
bis.UpdateSpriteIconTextures();
}
}
}
#if UNITY_2019_3_OR_NEWER
EditorGUILayout.EndFoldoutHeaderGroup();
#endif
#if UNITY_2019_3_OR_NEWER
showCharIconFoldout = EditorGUILayout.BeginFoldoutHeaderGroup(showCharIconFoldout, "Font Icons");
#else
showCharIconFoldout = EditorGUILayout.Foldout(showCharIconFoldout, "Font Icons");
#endif
#if UNITY_2019_3_OR_NEWER
EditorGUILayout.EndFoldoutHeaderGroup();
#endif
if (showCharIconFoldout)
{
EditorGUILayout.PropertyField(charIconFontProp);
if (charIconFontProp.objectReferenceValue == null)
{
EditorGUILayout.HelpBox(noIconFontMessage, MessageType.Warning);
if (!CheckIfHololensIconFontExists())
{
EditorGUILayout.HelpBox(downloadIconFontMessage, MessageType.Info);
if (GUILayout.Button("View Button Documentation"))
{
EditorApplication.ExecuteMenuItem(textMeshProMenuItem);
Application.OpenURL(hololensIconFontUrl);
}
}
}
else
{
TMP_FontAsset fontAsset = (TMP_FontAsset)charIconFontProp.objectReferenceValue;
#if UNITY_2019_3_OR_NEWER
showAvailableIcons = EditorGUILayout.BeginFoldoutHeaderGroup(showAvailableIcons, "Available Icons");
#else
showAvailableIcons = EditorGUILayout.Foldout(showAvailableIcons, "Available Icons");
#endif
if (showAvailableIcons)
{
if (fontAsset.characterTable.Count == 0)
{
EditorGUILayout.HelpBox("No icons are available in this font. The font may be configured incorrectly.", MessageType.Warning);
if (GUILayout.Button("Open Font Editor"))
{
Selection.activeObject = bis.CharIconFont;
}
}
else
{
EditorGUILayout.HelpBox("Click an icon to add it to your selected icons.", MessageType.Info);
if (GUILayout.Button("Open Font Editor"))
{
Selection.activeObject = bis.CharIconFont;
}
int removeIndex = -1;
int addIndex = -1;
int column = 0;
column = 0;
EditorGUILayout.BeginHorizontal();
for (int i = 0; i < fontAsset.characterTable.Count; i++)
{
if (column >= maxButtonsPerColumn)
{
column = 0;
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
}
if (GUILayout.Button(" ",
GUILayout.MinHeight(maxButtonSize),
GUILayout.MaxHeight(maxButtonSize),
GUILayout.MaxWidth(maxButtonSize)))
{
addIndex = i;
}
Rect textureRect = GUILayoutUtility.GetLastRect();
EditorDrawTMPGlyph(textureRect, fontAsset, fontAsset.characterTable[i]);
column++;
}
if (column > 0)
{
EditorGUILayout.EndHorizontal();
}
if (removeIndex >= 0)
{
List<CharIcon> charIconsSet = new List<CharIcon>(bis.charIcons);
charIconsSet.RemoveAt(removeIndex);
bis.charIcons = charIconsSet.ToArray();
EditorUtility.SetDirty(target);
}
if (addIndex >= 0)
{
uint unicode = fontAsset.characterTable[addIndex].unicode;
bool alreadyContainsIcon = false;
foreach (CharIcon c in bis.charIcons)
{
if (c.Character == unicode)
{
alreadyContainsIcon = true;
break;
}
}
if (!alreadyContainsIcon)
{
charIconsProp.InsertArrayElementAtIndex(charIconsProp.arraySize);
SerializedProperty newIconProp = charIconsProp.GetArrayElementAtIndex(charIconsProp.arraySize - 1);
SerializedProperty charProp = newIconProp.FindPropertyRelative("Character");
SerializedProperty nameProp = newIconProp.FindPropertyRelative("Name");
charProp.intValue = (int)unicode;
nameProp.stringValue = "Icon " + charIconsProp.arraySize.ToString();
serializedObject.ApplyModifiedProperties();
}
}
}
EditorGUILayout.Space();
}
#if UNITY_2019_3_OR_NEWER
EditorGUILayout.EndFoldoutHeaderGroup();
showSelectedIcons = EditorGUILayout.BeginFoldoutHeaderGroup(showSelectedIcons, "Selected Icons");
#else
showSelectedIcons = EditorGUILayout.Foldout(showSelectedIcons, "Selected Icons");
#endif
if (showSelectedIcons)
{
int removeIndex = -1;
if (charIconsProp.arraySize > 0)
{
EditorGUILayout.HelpBox("These icons will appear in the button config helper inspector. Click an icon to remove it from this list.", MessageType.Info);
using (new EditorGUILayout.VerticalScope())
{
for (int i = 0; i < charIconsProp.arraySize; i++)
{
SerializedProperty charIconNameprop = charIconsProp.GetArrayElementAtIndex(i).FindPropertyRelative("Name");
using (new EditorGUILayout.HorizontalScope())
{
if (GUILayout.Button(" ", GUILayout.MinHeight(maxButtonSize), GUILayout.MaxHeight(maxButtonSize)))
{
removeIndex = i;
}
Rect textureRect = GUILayoutUtility.GetLastRect();
EditorDrawTMPGlyph(textureRect, bis.charIcons[i].Character, fontAsset);
charIconNameprop.stringValue = EditorGUILayout.TextField(charIconNameprop.stringValue);
EditorGUILayout.Space();
}
EditorGUILayout.Space();
}
}
}
else
{
EditorGUILayout.HelpBox("No icons added yet. Click available icons to add.", MessageType.Info);
}
if (removeIndex >= 0)
{
charIconsProp.DeleteArrayElementAtIndex(removeIndex);
}
}
#if UNITY_2019_3_OR_NEWER
EditorGUILayout.EndFoldoutHeaderGroup();
#endif
}
}
SessionState.SetBool(ShowQuadIconsFoldoutKey, showQuadIconFoldout);
SessionState.SetBool(ShowSpriteIconsFoldoutKey, showSpriteIconFoldout);
SessionState.SetBool(ShowCharIconsFoldoutKey, showCharIconFoldout);
SessionState.SetBool(AvailableIconsFoldoutKey, showAvailableIcons);
SessionState.SetBool(SelectedIconsFoldoutKey, showSelectedIcons);
serializedObject.ApplyModifiedProperties();
}