@@ -23,6 +23,8 @@ internal class InputActionsEditorView : ViewBase<InputActionsEditorView.ViewStat
23
23
private readonly ToolbarButton m_SaveButton ;
24
24
25
25
private readonly Action m_SaveAction ;
26
+
27
+ private ControlSchemesView m_ControlSchemesView ;
26
28
27
29
public InputActionsEditorView ( VisualElement root , StateContainer stateContainer , bool isProjectSettings ,
28
30
Action saveAction )
@@ -91,7 +93,7 @@ public InputActionsEditorView(VisualElement root, StateContainer stateContainer,
91
93
92
94
// only register the state changed event here in the parent. Changes will be cascaded
93
95
// into child views.
94
- stateContainer . StateChanged += OnStateChanged ;
96
+ stateContainer . StateChanged += StateChanged ( stateContainer ) ;
95
97
96
98
CreateSelector (
97
99
s => s . selectedControlSchemeIndex ,
@@ -106,6 +108,22 @@ public InputActionsEditorView(VisualElement root, StateContainer stateContainer,
106
108
s_OnPasteCutElements . Add ( this ) ;
107
109
}
108
110
111
+ private Action < InputActionsEditorState , UIRebuildMode > StateChanged ( StateContainer stateContainer )
112
+ {
113
+ return ( inputActionsEditorState , uiRebuildMode ) =>
114
+ {
115
+ var state = stateContainer . GetState ( ) ;
116
+ var viewState = ViewStateSelector . GetViewState ( state ) ;
117
+ var elementAtOrDefault = viewState . controlSchemes ? . ElementAtOrDefault ( viewState . selectedControlSchemeIndex ) ;
118
+ if ( viewState . selectedControlSchemeIndex != - 1 && elementAtOrDefault == default ( InputControlScheme ) )
119
+ {
120
+ m_ControlSchemesView ? . Cancel ( ) ;
121
+ }
122
+
123
+ OnStateChanged ( inputActionsEditorState , uiRebuildMode ) ;
124
+ } ;
125
+ }
126
+
109
127
private void OnReset ( )
110
128
{
111
129
Dispatch ( Commands . ReplaceActionMaps ( ProjectWideActionsAsset . GetDefaultAssetJson ( ) ) ) ;
@@ -156,9 +174,8 @@ private void SetUpControlSchemesMenu(ViewState viewState)
156
174
157
175
if ( viewState . controlSchemes . Any ( ) )
158
176
{
159
- m_ControlSchemesToolbar . text = viewState . selectedControlSchemeIndex == - 1
160
- ? "All Control Schemes"
161
- : viewState . controlSchemes . ElementAt ( viewState . selectedControlSchemeIndex ) . name ;
177
+ var elementAtOrDefault = viewState . controlSchemes . ElementAtOrDefault ( viewState . selectedControlSchemeIndex ) ;
178
+ m_ControlSchemesToolbar . text = elementAtOrDefault == default ? "All Control Schemes" : elementAtOrDefault . name ;
162
179
163
180
m_ControlSchemesToolbar . menu . AppendAction ( "All Control Schemes" , _ => SelectControlScheme ( - 1 ) ,
164
181
viewState . selectedControlSchemeIndex == - 1 ? DropdownMenuAction . Status . Checked : DropdownMenuAction . Status . Normal ) ;
@@ -186,7 +203,7 @@ private void SetUpDevicesMenu(ViewState viewState)
186
203
return ;
187
204
}
188
205
m_DevicesToolbar . SetEnabled ( true ) ;
189
- var currentControlScheme = viewState . controlSchemes . ElementAt ( viewState . selectedControlSchemeIndex ) ;
206
+ var currentControlScheme = viewState . controlSchemes . ElementAtOrDefault ( viewState . selectedControlSchemeIndex ) ;
190
207
if ( viewState . selectedDeviceIndex == - 1 )
191
208
m_DevicesToolbar . text = "All Devices" ;
192
209
@@ -228,12 +245,15 @@ private void DeleteControlScheme(DropdownMenuAction obj)
228
245
229
246
private void ShowControlSchemeEditor ( VisualElement parent , bool updateExisting = false )
230
247
{
231
- var controlSchemesView = CreateChildView ( new ControlSchemesView ( parent , stateContainer , updateExisting ) ) ;
232
- controlSchemesView . UpdateView ( stateContainer . GetState ( ) ) ;
233
-
234
- controlSchemesView . OnClosing += _ => DestroyChildView ( controlSchemesView ) ;
248
+ m_ControlSchemesView = CreateChildView ( new ControlSchemesView ( parent , stateContainer , updateExisting ) ) ;
249
+ m_ControlSchemesView . UpdateView ( stateContainer . GetState ( ) ) ;
250
+ m_ControlSchemesView . OnClosing += _ =>
251
+ {
252
+ DestroyChildView ( m_ControlSchemesView ) ;
253
+ m_ControlSchemesView = null ;
254
+ } ;
235
255
}
236
-
256
+
237
257
private void SelectControlScheme ( int controlSchemeIndex )
238
258
{
239
259
Dispatch ( ControlSchemeCommands . SelectControlScheme ( controlSchemeIndex ) ) ;
0 commit comments