mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2024-12-29 18:55:06 +08:00
Merge pull request #1008 from hai-vr/menu-richtext
feat: menu name may use string field
This commit is contained in:
commit
9ce8a209d8
@ -59,6 +59,8 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
|
|
||||||
internal class MenuItemCoreGUI
|
internal class MenuItemCoreGUI
|
||||||
{
|
{
|
||||||
|
private const string ImpliesRichText = "<";
|
||||||
|
|
||||||
private static readonly ObjectIDGenerator IdGenerator = new ObjectIDGenerator();
|
private static readonly ObjectIDGenerator IdGenerator = new ObjectIDGenerator();
|
||||||
private readonly GameObject _parameterReference;
|
private readonly GameObject _parameterReference;
|
||||||
private readonly Action _redraw;
|
private readonly Action _redraw;
|
||||||
@ -92,11 +94,14 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
private readonly SerializedProperty _prop_isDefault;
|
private readonly SerializedProperty _prop_isDefault;
|
||||||
private readonly SerializedProperty _prop_automaticValue;
|
private readonly SerializedProperty _prop_automaticValue;
|
||||||
|
|
||||||
|
private readonly SerializedProperty _prop_label;
|
||||||
|
|
||||||
public bool AlwaysExpandContents = false;
|
public bool AlwaysExpandContents = false;
|
||||||
public bool ExpandContents = false;
|
public bool ExpandContents = false;
|
||||||
|
|
||||||
private readonly Dictionary<string, ProvidedParameter> _knownParameters = new();
|
private readonly Dictionary<string, ProvidedParameter> _knownParameters = new();
|
||||||
private bool _parameterSourceNotDetermined;
|
private bool _parameterSourceNotDetermined;
|
||||||
|
private bool _useLabel;
|
||||||
|
|
||||||
public MenuItemCoreGUI(SerializedObject obj, Action redraw)
|
public MenuItemCoreGUI(SerializedObject obj, Action redraw)
|
||||||
{
|
{
|
||||||
@ -144,6 +149,8 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
_prop_isDefault = obj.FindProperty(nameof(ModularAvatarMenuItem.isDefault));
|
_prop_isDefault = obj.FindProperty(nameof(ModularAvatarMenuItem.isDefault));
|
||||||
_prop_automaticValue = obj.FindProperty(nameof(ModularAvatarMenuItem.automaticValue));
|
_prop_automaticValue = obj.FindProperty(nameof(ModularAvatarMenuItem.automaticValue));
|
||||||
|
|
||||||
|
_prop_label = obj.FindProperty(nameof(ModularAvatarMenuItem.label));
|
||||||
|
|
||||||
_previewGUI = new MenuPreviewGUI(redraw);
|
_previewGUI = new MenuPreviewGUI(redraw);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,12 +267,70 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
EditorGUILayout.BeginHorizontal();
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
|
||||||
EditorGUILayout.BeginVertical();
|
EditorGUILayout.BeginVertical();
|
||||||
|
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
|
||||||
|
if (_parameterReference == null)
|
||||||
|
{
|
||||||
EditorGUI.BeginChangeCheck();
|
EditorGUI.BeginChangeCheck();
|
||||||
|
if (_obj != null && _obj.isEditingMultipleObjects)
|
||||||
|
{
|
||||||
|
EditorGUILayout.PropertyField(_prop_label, G("menuitem.prop.name"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
EditorGUILayout.PropertyField(_name, G("menuitem.prop.name"));
|
EditorGUILayout.PropertyField(_name, G("menuitem.prop.name"));
|
||||||
|
}
|
||||||
if (EditorGUI.EndChangeCheck())
|
if (EditorGUI.EndChangeCheck())
|
||||||
{
|
{
|
||||||
_name.serializedObject.ApplyModifiedProperties();
|
_name.serializedObject.ApplyModifiedProperties();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_useLabel |= !string.IsNullOrEmpty(_prop_label.stringValue);
|
||||||
|
|
||||||
|
if (!_useLabel)
|
||||||
|
{
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
var previousName = _name.stringValue;
|
||||||
|
EditorGUILayout.PropertyField(_name, G("menuitem.prop.name"));
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
if (!previousName.Contains(ImpliesRichText) && _name.stringValue.Contains(ImpliesRichText))
|
||||||
|
{
|
||||||
|
_prop_label.stringValue = _name.stringValue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_name.serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EditorGUILayout.PropertyField(_prop_label, G("menuitem.prop.name"));
|
||||||
|
}
|
||||||
|
|
||||||
|
var linkIcon = EditorGUIUtility.IconContent(_useLabel ? "UnLinked" : "Linked").image;
|
||||||
|
var guiIcon = new GUIContent(linkIcon, S(_useLabel ? "menuitem.label.gameobject_name.tooltip" : "menuitem.label.long_name.tooltip"));
|
||||||
|
if (GUILayout.Button(guiIcon, GUILayout.Height(EditorGUIUtility.singleLineHeight), GUILayout.Width(25)))
|
||||||
|
{
|
||||||
|
_prop_label.stringValue = !_useLabel ? _name.stringValue : "";
|
||||||
|
_useLabel = !_useLabel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
|
||||||
|
if (_useLabel && _prop_label.stringValue.Contains(ImpliesRichText))
|
||||||
|
{
|
||||||
|
var style = new GUIStyle(EditorStyles.textField);
|
||||||
|
style.richText = true;
|
||||||
|
style.alignment = TextAnchor.MiddleCenter;
|
||||||
|
|
||||||
|
EditorGUILayout.LabelField(" ", _prop_label.stringValue, style, GUILayout.Height(EditorGUIUtility.singleLineHeight * 3));
|
||||||
|
}
|
||||||
|
|
||||||
EditorGUILayout.PropertyField(_texture, G("menuitem.prop.icon"));
|
EditorGUILayout.PropertyField(_texture, G("menuitem.prop.icon"));
|
||||||
EditorGUILayout.PropertyField(_type, G("menuitem.prop.type"));
|
EditorGUILayout.PropertyField(_type, G("menuitem.prop.type"));
|
||||||
|
@ -286,6 +286,10 @@
|
|||||||
"ro_sim.effect_group.rule_inverted": "This rule is inverted",
|
"ro_sim.effect_group.rule_inverted": "This rule is inverted",
|
||||||
"ro_sim.effect_group.rule_inverted.tooltip": "This rule will be applied when one of its conditions is NOT met",
|
"ro_sim.effect_group.rule_inverted.tooltip": "This rule will be applied when one of its conditions is NOT met",
|
||||||
"ro_sim.effect_group.conditions": "Conditions",
|
"ro_sim.effect_group.conditions": "Conditions",
|
||||||
|
|
||||||
|
"menuitem.label.long_name.tooltip": "Use a long name which may contain rich text and line breaks.",
|
||||||
|
"menuitem.label.gameobject_name.tooltip": "Use the GameObject name.",
|
||||||
|
|
||||||
"remove-vertex-color.mode": "Mode",
|
"remove-vertex-color.mode": "Mode",
|
||||||
"remove-vertex-color.mode.Remove": "Remove Vertex Colors",
|
"remove-vertex-color.mode.Remove": "Remove Vertex Colors",
|
||||||
"remove-vertex-color.mode.DontRemove": "Keep Vertex Colors",
|
"remove-vertex-color.mode.DontRemove": "Keep Vertex Colors",
|
||||||
@ -296,4 +300,5 @@
|
|||||||
"sync-param-sequence.parameters.tooltip": "The asset to store common parameters in. Do not use the same Expression Parameters that you have set in your avatar descriptor.",
|
"sync-param-sequence.parameters.tooltip": "The asset to store common parameters in. Do not use the same Expression Parameters that you have set in your avatar descriptor.",
|
||||||
"sync-param-sequence.create-asset": "New",
|
"sync-param-sequence.create-asset": "New",
|
||||||
"sync-param-sequence.create-asset.tooltip": "Creates a new expression parameters asset"
|
"sync-param-sequence.create-asset.tooltip": "Creates a new expression parameters asset"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,14 @@ namespace nadena.dev.modular_avatar.core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool automaticValue;
|
public bool automaticValue;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Although unspecified, the label of a menu may contain rich text and line breaks.
|
||||||
|
/// If label is not an empty string, this MenuItem will use that as its name.
|
||||||
|
/// Otherwise, it will use the name of the containing game object as the label.
|
||||||
|
/// </summary>
|
||||||
|
[Multiline]
|
||||||
|
public string label = "";
|
||||||
|
|
||||||
private void Reset()
|
private void Reset()
|
||||||
{
|
{
|
||||||
// Init settings only when added or reset manually from the Inspector.
|
// Init settings only when added or reset manually from the Inspector.
|
||||||
@ -98,7 +106,7 @@ namespace nadena.dev.modular_avatar.core
|
|||||||
|
|
||||||
var cloned = new VirtualControl(Control);
|
var cloned = new VirtualControl(Control);
|
||||||
cloned.subMenu = null;
|
cloned.subMenu = null;
|
||||||
cloned.name = gameObject.name;
|
cloned.name = string.IsNullOrEmpty(label) ? gameObject.name : label;
|
||||||
|
|
||||||
FilterSubParameters(cloned);
|
FilterSubParameters(cloned);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user