@@ -215,14 +215,65 @@ public void Initialize(string label, string tooltip, string defaultName, Func<fl
215215 ? $ "If enabled, the default { label . ToLowerInvariant ( ) } configured globally in the input settings is used. See Edit >> Project Settings... >> Input (NEW)."
216216 : "If enabled, the default value is used." ) ;
217217 m_ValueLabel = EditorGUIUtility . TrTextContent ( label , tooltip ) ;
218- if ( defaultComesFromInputSettings )
219- m_OpenInputSettingsLabel = EditorGUIUtility . TrTextContent ( "Open Input Settings" ) ;
220218 m_DefaultInitializedValue = defaultInitializedValue ;
221219 m_UseDefaultValue = Mathf . Approximately ( getValue ( ) , defaultInitializedValue ) ;
222220 m_DefaultComesFromInputSettings = defaultComesFromInputSettings ;
223- m_HelpBoxText =
224- EditorGUIUtility . TrTextContent (
225- $ "Uses \" { defaultName } \" set in project-wide input settings.") ;
221+ m_DefaultName = defaultName ;
222+ }
223+
224+ /// <summary>
225+ /// Raised when the "use default" toggle changes. Allows multiple subscribers to react
226+ /// (e.g. refreshing shared footers) without overwriting each other.
227+ /// </summary>
228+ internal event Action onUseDefaultChanged ;
229+
230+ internal static void AddSharedDefaultSettingsFooter ( VisualElement root ,
231+ IReadOnlyList < CustomOrDefaultSetting > settings )
232+ {
233+ if ( settings == null || settings . Count == 0 )
234+ return ;
235+
236+ var footerContainer = new VisualElement ( ) ;
237+ var helpBox = new HelpBox ( "" , HelpBoxMessageType . None ) ;
238+ var buttonContainer = new VisualElement { style = { flexDirection = FlexDirection . RowReverse } } ;
239+ var openInputSettingsButton = new Button ( InputSettingsProvider . Open )
240+ {
241+ text = EditorGUIUtility . TrTextContent ( "Open Input Settings" ) . text
242+ } ;
243+ openInputSettingsButton . AddToClassList ( "open-settings-button" ) ;
244+ buttonContainer . Add ( openInputSettingsButton ) ;
245+ footerContainer . Add ( helpBox ) ;
246+ footerContainer . Add ( buttonContainer ) ;
247+
248+ void RefreshFooter ( )
249+ {
250+ var namesInUse = new List < string > ( settings . Count ) ;
251+ foreach ( var s in settings )
252+ {
253+ if ( s . m_UseDefaultValue && s . m_DefaultComesFromInputSettings )
254+ namesInUse . Add ( s . m_DefaultName ) ;
255+ }
256+ if ( namesInUse . Count > 0 )
257+ {
258+ var quotedNames = new List < string > ( namesInUse . Count ) ;
259+ foreach ( var n in namesInUse )
260+ quotedNames . Add ( $ "\" { n } \" ") ;
261+ var combinedNames = string . Join ( ", " , quotedNames ) ;
262+ helpBox . text = EditorGUIUtility . TrTextContent (
263+ $ "Uses { combinedNames } set in Input System Package Settings.") . text ;
264+ footerContainer . style . display = DisplayStyle . Flex ;
265+ }
266+ else
267+ {
268+ footerContainer . style . display = DisplayStyle . None ;
269+ }
270+ }
271+
272+ foreach ( var s in settings )
273+ s . onUseDefaultChanged += RefreshFooter ;
274+
275+ RefreshFooter ( ) ;
276+ root . Add ( footerContainer ) ;
226277 }
227278
228279 public void OnDrawVisualElements ( VisualElement root , Action onChangedCallback )
@@ -250,8 +301,6 @@ public void OnDrawVisualElements(VisualElement root, Action onChangedCallback)
250301 m_FloatField . RegisterCallback < BlurEvent > ( _ => OnEditEnd ( onChangedCallback ) ) ;
251302 m_FloatField . SetEnabled ( ! m_UseDefaultValue ) ;
252303
253- m_HelpBox = new HelpBox ( m_HelpBoxText . text , HelpBoxMessageType . None ) ;
254-
255304 m_DefaultToggle = new Toggle ( "Default" )
256305 {
257306 value = m_UseDefaultValue ,
@@ -263,28 +312,9 @@ public void OnDrawVisualElements(VisualElement root, Action onChangedCallback)
263312 m_DefaultToggle . RegisterValueChangedCallback ( evt => ToggleUseDefaultValue ( evt , onChangedCallback ) ) ;
264313 m_DefaultToggle . Q < Label > ( ) . style . minWidth = new StyleLength ( StyleKeyword . Auto ) ;
265314
266- var buttonContainer = new VisualElement
267- {
268- style =
269- {
270- flexDirection = FlexDirection . RowReverse
271- }
272- } ;
273- m_OpenInputSettingsButton = new Button ( InputSettingsProvider . Open ) { text = m_OpenInputSettingsLabel . text } ;
274- m_OpenInputSettingsButton . AddToClassList ( "open-settings-button" ) ;
275-
276315 settingsContainer . Add ( m_FloatField ) ;
277316 settingsContainer . Add ( m_DefaultToggle ) ;
278317 container . Add ( settingsContainer ) ;
279-
280- if ( m_UseDefaultValue )
281- {
282- buttonContainer . Add ( m_OpenInputSettingsButton ) ;
283- container . Add ( m_HelpBox ) ;
284- }
285-
286- container . Add ( buttonContainer ) ;
287-
288318 root . Add ( container ) ;
289319 }
290320
@@ -314,7 +344,7 @@ private void ChangeSettingValue(ChangeEvent<float> evt)
314344
315345 private void OnEditEnd ( Action onChangedCallback )
316346 {
317- onChangedCallback . Invoke ( ) ;
347+ onChangedCallback ? . Invoke ( ) ;
318348 }
319349
320350 private void ToggleUseDefaultValue ( ChangeEvent < bool > evt , Action onChangedCallback )
@@ -327,6 +357,7 @@ private void ToggleUseDefaultValue(ChangeEvent<bool> evt, Action onChangedCallba
327357
328358 m_UseDefaultValue = evt . newValue ;
329359 m_FloatField ? . SetEnabled ( ! m_UseDefaultValue ) ;
360+ onUseDefaultChanged ? . Invoke ( ) ;
330361 }
331362
332363 private void SetValue ( float newValue )
@@ -361,15 +392,15 @@ public void OnGUI()
361392 if ( ( value - float . Epsilon ) == m_DefaultInitializedValue )
362393 value = m_DefaultInitializedValue ;
363394
364- ////TODO: use slider rather than float field
365395 var newValue = EditorGUILayout . FloatField ( m_ValueLabel , value , GUILayout . ExpandWidth ( false ) ) ;
366396 if ( ! m_UseDefaultValue )
367397 SetValue ( newValue ) ;
368398
369399 EditorGUI . EndDisabledGroup ( ) ;
370400
371401 var newUseDefault = GUILayout . Toggle ( m_UseDefaultValue , m_ToggleLabel , GUILayout . ExpandWidth ( false ) ) ;
372- if ( newUseDefault != m_UseDefaultValue )
402+ var useDefaultChanged = newUseDefault != m_UseDefaultValue ;
403+ if ( useDefaultChanged )
373404 {
374405 if ( ! newUseDefault )
375406 m_SetValue ( m_GetDefaultValue ( ) ) ;
@@ -378,19 +409,9 @@ public void OnGUI()
378409 }
379410
380411 m_UseDefaultValue = newUseDefault ;
412+ if ( useDefaultChanged )
413+ onUseDefaultChanged ? . Invoke ( ) ;
381414 EditorGUILayout . EndHorizontal ( ) ;
382-
383- // If we're using a default from global InputSettings, show info text for that and provide
384- // button to open input settings.
385- if ( m_UseDefaultValue && m_DefaultComesFromInputSettings )
386- {
387- EditorGUILayout . HelpBox ( m_HelpBoxText ) ;
388- EditorGUILayout . BeginHorizontal ( ) ;
389- GUILayout . FlexibleSpace ( ) ;
390- if ( GUILayout . Button ( m_OpenInputSettingsLabel , EditorStyles . miniButton ) )
391- InputSettingsProvider . Open ( ) ;
392- EditorGUILayout . EndHorizontal ( ) ;
393- }
394415 }
395416
396417 private Func < float > m_GetValue ;
@@ -399,14 +420,11 @@ public void OnGUI()
399420 private bool m_UseDefaultValue ;
400421 private bool m_DefaultComesFromInputSettings ;
401422 private float m_DefaultInitializedValue ;
423+ private string m_DefaultName ;
402424 private GUIContent m_ToggleLabel ;
403425 private GUIContent m_ValueLabel ;
404- private GUIContent m_OpenInputSettingsLabel ;
405- private GUIContent m_HelpBoxText ;
406426 private FloatField m_FloatField ;
407- private Button m_OpenInputSettingsButton ;
408427 private Toggle m_DefaultToggle ;
409- private HelpBox m_HelpBox ;
410428 }
411429 }
412430}
0 commit comments