Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
65b908b
Fix: focus & focusOut events for inputFields
ritamerkl Apr 27, 2023
9c4df03
Change: only rename actions & composites
ritamerkl Apr 28, 2023
cef77d9
Fix: fixed NullReference if TreeViewItem out of screen
ritamerkl Apr 28, 2023
46e579d
Fix: rename wrong action or actionMap
ritamerkl May 4, 2023
394a5c2
added edit on return and improved with use itemsChosen event
ritamerkl May 8, 2023
d8a87ef
fixed renaming with F2
ritamerkl May 9, 2023
dac9a1c
rename composites properly
ritamerkl May 9, 2023
5cc1f6a
fixed rename canceled on click away
ritamerkl May 10, 2023
b34cd20
avoid NullReferenceError at MapListView if item out of screen
ritamerkl May 10, 2023
7734d03
fixed renaming actionMap -> excluding own name
ritamerkl May 10, 2023
11a0d3f
fixed action maps not renamed bug + removed redundant line
ritamerkl May 10, 2023
b5f43bd
add context menu with rename functionality
ritamerkl May 11, 2023
673f103
added: functionality to delete bindings
ritamerkl May 12, 2023
33677fb
added: functionality for deleting actions
ritamerkl May 12, 2023
c85e4d5
added: deleting action maps
ritamerkl May 12, 2023
bd6344e
fixed errors on delete bindings
ritamerkl May 16, 2023
ace7fa2
fixed errors for deleting actions
ritamerkl May 16, 2023
343a7cb
fixed action not focused after adding a new one
ritamerkl May 17, 2023
e6b5669
Merge branch 'ISX-1039-rename-maps-actions-bindings' into ISX-1373-de…
ritamerkl May 17, 2023
01670a2
fixed delete actionMaps & unsubscribe handlers correctly
ritamerkl May 22, 2023
b1964f9
shortcut selector method
ritamerkl May 22, 2023
06e57f4
fixed selection not updated in ActionsTreeView
ritamerkl May 22, 2023
627dd54
some refactoring
ritamerkl May 22, 2023
1d22ec5
added delete with DEL key functionality
ritamerkl May 23, 2023
3b5bfb4
formatting fix
ritamerkl May 23, 2023
1f9c775
formatting
ritamerkl May 23, 2023
8c20d3f
Merge remote-tracking branch 'origin/develop' into ISX-1373-delete-ac…
ritamerkl May 25, 2023
a83aafa
fixed small no binding name issue
ritamerkl May 25, 2023
89d2430
added add buttons for interactions and processors
ritamerkl May 26, 2023
f99dc07
WIP added context menu for add interactions+processor buttons
ritamerkl May 26, 2023
e48d664
added context menu and add interactions & add processors functionality
ritamerkl Jun 1, 2023
374f923
fixed context menu overload for adding processors & interactions
ritamerkl Jun 5, 2023
2f38102
Merge remote-tracking branch 'origin/develop' into ISX-1374-Edit-acti…
ritamerkl Jun 12, 2023
2f1f631
fixed adding processors & interactions to bindings
ritamerkl Jun 13, 2023
fa41f7f
fixed menu not updated bug
ritamerkl Jun 14, 2023
0a6dada
don't show interactions for bindings that are part of a composite
ritamerkl Jun 14, 2023
2429575
added swapping and deleting interactions & processors
ritamerkl Jun 15, 2023
27fe4e7
added saving of parameters for processors and interactions
ritamerkl Jun 15, 2023
5bfcef6
fixed saving for fields with default toggle
ritamerkl Jun 21, 2023
6d81cba
fixed lose focus directly after change issue
ritamerkl Jun 21, 2023
ab0281f
fixed showing up of default text and open in player settings
ritamerkl Jun 21, 2023
80cff71
fixed content for default values not resizing bug
ritamerkl Jun 21, 2023
8c9eaf4
fixed greyed out swap and delete buttons for interactions & processors
ritamerkl Jun 22, 2023
3b15b62
fixed initalStateToggle ignoring clicks
ritamerkl Jun 22, 2023
3394c0b
fixed exception on Action Type changed to not Button
ritamerkl Jun 22, 2023
0700a47
Merge branch 'develop' into ISX-1374-Edit-actions-and-bindings
ritamerkl Jun 22, 2023
bf939fc
refactoring
ritamerkl Jun 23, 2023
34c587c
fix for editor theme and enabling on icons on interactions & processors
ritamerkl Jun 23, 2023
b3466ee
smallNameRefactoring
ritamerkl Jul 5, 2023
91f963f
ISX-1489 fix context menu does not open on left click on windows
ritamerkl Jul 5, 2023
2f48b0d
ISX-1489 fix context menu does not open on left click on windows for mac
ritamerkl Jul 5, 2023
7c1cbb3
refactoring for merge
ritamerkl Jul 5, 2023
36709a2
Merge branch 'develop' into ISX-1374-Edit-actions-and-bindings
ritamerkl Jul 6, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,10 @@ void OnValueChanged(ref EditableParameterValue parameter, object result, int i)
{
parameter.value.value = PrimitiveValue.FromObject(result).ConvertTo(parameter.value.type);
m_Parameters[i] = parameter;
}

void OnEditEnd()
{
onChange?.Invoke();
}

Expand All @@ -277,41 +281,47 @@ void OnValueChanged(ref EditableParameterValue parameter, object result, int i)
var intValue = parameter.value.value.ToInt32();
var field = new DropdownField(label.text, parameter.enumNames.Select(x => x.text).ToList(), intValue);
field.RegisterValueChangedCallback(evt => OnValueChanged(ref parameter, evt.newValue, closedIndex));
field.RegisterCallback<BlurEvent>(_ => OnEditEnd());
root.Add(field);
}
else if (parameter.value.type == TypeCode.Int64 || parameter.value.type == TypeCode.UInt64)
{
var longValue = parameter.value.value.ToInt64();
var field = new LongField(label.text) { value = longValue };
field.RegisterValueChangedCallback(evt => OnValueChanged(ref parameter, evt.newValue, closedIndex));
field.RegisterCallback<BlurEvent>(_ => OnEditEnd());
root.Add(field);
}
else if (parameter.value.type.IsInt())
{
var intValue = parameter.value.value.ToInt32();
var field = new IntegerField(label.text) { value = intValue };
field.RegisterValueChangedCallback(evt => OnValueChanged(ref parameter, evt.newValue, closedIndex));
field.RegisterCallback<BlurEvent>(_ => OnEditEnd());
root.Add(field);
}
else if (parameter.value.type == TypeCode.Single)
{
var floatValue = parameter.value.value.ToSingle();
var field = new FloatField(label.text) { value = floatValue };
field.RegisterValueChangedCallback(evt => OnValueChanged(ref parameter, evt.newValue, closedIndex));
field.RegisterCallback<BlurEvent>(_ => OnEditEnd());
root.Add(field);
}
else if (parameter.value.type == TypeCode.Double)
{
var floatValue = parameter.value.value.ToDouble();
var field = new DoubleField(label.text) { value = floatValue };
field.RegisterValueChangedCallback(evt => OnValueChanged(ref parameter, evt.newValue, closedIndex));
field.RegisterCallback<BlurEvent>(_ => OnEditEnd());
root.Add(field);
}
else if (parameter.value.type == TypeCode.Boolean)
{
var boolValue = parameter.value.value.ToBoolean();
var field = new Toggle(label.text) { value = boolValue };
field.RegisterValueChangedCallback(evt => OnValueChanged(ref parameter, evt.newValue, closedIndex));
field.RegisterCallback<BlurEvent>(_ => OnEditEnd());
root.Add(field);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,12 +232,13 @@ public void OnDrawVisualElements(VisualElement root, Action onChangedCallback)

m_FloatField = new FloatField(m_ValueLabel.text) { value = value };
m_FloatField.RegisterValueChangedCallback(ChangeSettingValue);
m_FloatField.RegisterCallback<BlurEvent>(_ => OnEditEnd(onChangedCallback));
m_FloatField.SetEnabled(!m_UseDefaultValue);

m_HelpBox = new HelpBox(m_HelpBoxText.text, HelpBoxMessageType.None);

m_DefaultToggle = new Toggle("Default") { value = m_UseDefaultValue };
m_DefaultToggle.RegisterValueChangedCallback(ToggleUseDefaultValue);
m_DefaultToggle.RegisterValueChangedCallback(evt => ToggleUseDefaultValue(evt, onChangedCallback));


var buttonContainer = new VisualElement
Expand All @@ -249,12 +250,17 @@ public void OnDrawVisualElements(VisualElement root, Action onChangedCallback)
};
m_OpenInputSettingsButton = new Button(InputSettingsProvider.Open){text = m_OpenInputSettingsLabel.text};
m_OpenInputSettingsButton.AddToClassList("open-settings-button");
buttonContainer.Add(m_OpenInputSettingsButton);

settingsContainer.Add(m_FloatField);
settingsContainer.Add(m_DefaultToggle);
container.Add(settingsContainer);
container.Add(m_HelpBox);

if (m_UseDefaultValue)
{
buttonContainer.Add(m_OpenInputSettingsButton);
container.Add(m_HelpBox);
}

container.Add(buttonContainer);

root.Add(container);
Expand All @@ -278,18 +284,21 @@ private void ChangeSettingValue(ChangeEvent<float> evt)
}
}

private void ToggleUseDefaultValue(ChangeEvent<bool> evt)
private void OnEditEnd(Action onChangedCallback)
{
onChangedCallback.Invoke();
}

private void ToggleUseDefaultValue(ChangeEvent<bool> evt, Action onChangedCallback)
{
if (evt.newValue != m_UseDefaultValue)
{
m_SetValue(!evt.newValue ? m_GetDefaultValue() : m_DefaultInitializedValue);
onChangedCallback.Invoke();
}

m_UseDefaultValue = evt.newValue;

m_FloatField?.SetEnabled(!m_UseDefaultValue);
m_HelpBox.visible = m_UseDefaultValue;
Comment thread
ritamerkl marked this conversation as resolved.
m_OpenInputSettingsButton.visible = m_UseDefaultValue;
}

#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
border-width: 0;
}

#add-new-action-button {
#add-new-action-button {
background-color: transparent;
border-width: 0;
}
Expand All @@ -40,6 +40,14 @@
margin-left: 0;
}

.add-interaction-processor-button {
padding-top: 0;
font-size: 12;
border-width: 0;
background-color: transparent;
margin-right: 5;
}

.header-label {
font-size: 19px;
margin-left: 7px;
Expand Down Expand Up @@ -136,13 +144,24 @@
background-image: resource('Packages/com.unity.inputsystem/InputSystem/Editor/Icons/ChevronUp.png');
}

.name-and-parameters-list-view .upDarkTheme {
background-image: resource('Packages/com.unity.inputsystem/InputSystem/Editor/Icons/d_ChevronUp.png');
Comment thread
ritamerkl marked this conversation as resolved.
}

.name-and-parameters-list-view .down {
background-image: resource('Packages/com.unity.inputsystem/InputSystem/Editor/Icons/ChevronDown.png');
}

.name-and-parameters-list-view .downDarkTheme {
background-image: resource('Packages/com.unity.inputsystem/InputSystem/Editor/Icons/d_ChevronDown.png');
}

.name-and-parameters-list-view .delete {
background-image: resource('Toolbar Minus.png');
}
.name-and-parameters-list-view .deleteDarkTheme {
background-image: resource('d_Toolbar Minus.png');
}

.search-field {
width: 190px;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#if UNITY_EDITOR && UNITY_INPUT_SYSTEM_UI_TK_ASSET_EDITOR
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
Expand Down Expand Up @@ -51,6 +52,8 @@ public override void RedrawUI((SerializedInputAction ? , List<string>) viewState
controlType.choices.Clear();
controlType.choices.AddRange(controlTypes.Select(ObjectNames.NicifyVariableName).ToList());
var controlTypeIndex = controlTypes.FindIndex(s => s == inputAction.expectedControlType);
//if type changed and index is -1 clamp to 0, prevent overflowing indices
controlTypeIndex = Math.Clamp(controlTypeIndex, 0, controlTypes.Count - 1);
Comment thread
ritamerkl marked this conversation as resolved.
controlType.SetValueWithoutNotify(controlType.choices[controlTypeIndex]);
controlType.tooltip = inputAction.expectedControlTypeTooltip;

Expand All @@ -67,6 +70,7 @@ public override void RedrawUI((SerializedInputAction ? , List<string>) viewState
{
tooltip = InputActionsEditorConstants.InitialStateCheckTooltip
};
initialStateCheck.SetValueWithoutNotify(inputAction.initialStateCheck);
initialStateCheck.RegisterValueChangedCallback(evt =>
{
Dispatch(Commands.ChangeInitialStateCheck(inputAction, evt.newValue));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ public CompositePartBindingPropertiesView(VisualElement root, StateContainer sta
m_CompositePartField = container.Q<DropdownField>("composite-part-dropdown");

CreateSelector(Selectors.GetSelectedBinding,
(b, s) => !b.HasValue ? null : Selectors.GetCompositePartBindingViewState(b.Value, s));
(b, s) => b.HasValue && b.Value.isPartOfComposite ? Selectors.GetCompositePartBindingViewState(b.Value, s) : null);
}

public override void RedrawUI(ViewState viewState)
{
if (viewState == null)
return;
// TODO: Persist control picker state
var controlPathEditor = new InputControlPathEditor(viewState.selectedBindingPath, new InputControlPickerState(),
() => { Dispatch(Commands.ApplyModifiedProperties()); });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Linq;
using UnityEditor;
using UnityEngine.InputSystem.Editor.Lists;
using UnityEngine.InputSystem.Utilities;
using UnityEngine.UIElements;

namespace UnityEngine.InputSystem.Editor
Expand All @@ -14,16 +15,81 @@ internal class NameAndParametersListView : ViewBase<InputActionsEditorState>
private readonly Func<InputActionsEditorState, IEnumerable<ParameterListView>> m_ParameterListViewSelector;
private VisualElement m_ContentContainer;

public NameAndParametersListView(VisualElement root, StateContainer stateContainer,
private SerializedProperty m_ListProperty;

public NameAndParametersListView(VisualElement root, StateContainer stateContainer, SerializedProperty listProperty,
Func<InputActionsEditorState, IEnumerable<ParameterListView>> parameterListViewSelector)
: base(stateContainer)
{
m_Root = root;
m_ListProperty = listProperty;
m_ParameterListViewSelector = parameterListViewSelector;

CreateSelector(state => state);
}

public void OnAddElement(string name)
{
if (m_ListProperty == null)
return;

var interactionsOrProcessorsList = NameAndParameters.ParseMultiple(m_ListProperty.stringValue).ToList();
var newElement = new NameAndParameters() { name = name};
Comment thread
ritamerkl marked this conversation as resolved.
interactionsOrProcessorsList.Add(newElement);

m_ListProperty.stringValue = ToSerializableString(interactionsOrProcessorsList);
m_ListProperty.serializedObject.ApplyModifiedProperties();
}

private void MoveElementUp(int index)
{
var newIndex = index - 1;
SwapElement(index, newIndex);
}

private void MoveElementDown(int index)
{
var newIndex = index + 1;
SwapElement(index, newIndex);
}

private void SwapElement(int oldIndex, int newIndex)
{
var interactionsOrProcessors = NameAndParameters.ParseMultiple(m_ListProperty.stringValue).ToArray();
var oldIndexIsValid = oldIndex >= 0 && oldIndex < interactionsOrProcessors.Length;
var newIndexIsValid = newIndex >= 0 && newIndex < interactionsOrProcessors.Length;
if (interactionsOrProcessors.Length == 0 || !newIndexIsValid || !oldIndexIsValid)
return;
MemoryHelpers.Swap(ref interactionsOrProcessors[oldIndex], ref interactionsOrProcessors[newIndex]);
m_ListProperty.stringValue = ToSerializableString(interactionsOrProcessors);
m_ListProperty.serializedObject.ApplyModifiedProperties();
}

private void DeleteElement(int index)
{
var interactionsOrProcessorsList = NameAndParameters.ParseMultiple(m_ListProperty.stringValue).ToList();
interactionsOrProcessorsList.RemoveAt(index);
m_ListProperty.stringValue = ToSerializableString(interactionsOrProcessorsList);
m_ListProperty.serializedObject.ApplyModifiedProperties();
}

private void OnParametersChanged(ParameterListView listView, int index)
{
var interactionsOrProcessorsList = NameAndParameters.ParseMultiple(m_ListProperty.stringValue).ToList();
interactionsOrProcessorsList[index] = new NameAndParameters { name = interactionsOrProcessorsList[index].name, parameters = listView.GetParameters() };
m_ListProperty.stringValue = ToSerializableString(interactionsOrProcessorsList);
m_ListProperty.serializedObject.ApplyModifiedProperties();
}

private static string ToSerializableString(IEnumerable<NameAndParameters> parametersForEachListItem)
{
if (parametersForEachListItem == null)
return string.Empty;

return string.Join(NamedValue.Separator,
parametersForEachListItem.Select(x => x.ToString()).ToArray());
}

public override void RedrawUI(InputActionsEditorState state)
{
if (m_ContentContainer != null)
Expand All @@ -41,9 +107,19 @@ public override void RedrawUI(InputActionsEditorState state)

m_Root.Q<Label>("no-parameters-added-label").style.display = new StyleEnum<DisplayStyle>(DisplayStyle.None);
m_ContentContainer.Clear();
foreach (var parameterListView in parameterListViews)
for (int i = 0; i < parameterListViews.Count; i++)
{
new NameAndParametersListViewItem(m_ContentContainer, parameterListView);
var index = i;
Comment thread
ritamerkl marked this conversation as resolved.
var buttonProperties = new ButtonProperties()
{
onClickDown = () => MoveElementDown(index),
onClickUp = () => MoveElementUp(index),
onDelete = () => DeleteElement(index),
isDownButtonActive = index < parameterListViews.Count - 1,
isUpButtonActive = index > 0
};
new NameAndParametersListViewItem(m_ContentContainer, parameterListViews[i], buttonProperties);
parameterListViews[i].onChange += () => OnParametersChanged(parameterListViews[index], index);
}
}

Expand All @@ -57,9 +133,18 @@ public override void DestroyView()
}
}

internal struct ButtonProperties
{
public Action onClickUp;
public Action onClickDown;
public Action onDelete;
public bool isUpButtonActive;
public bool isDownButtonActive;
}

internal class NameAndParametersListViewItem
{
public NameAndParametersListViewItem(VisualElement root, ParameterListView parameterListView)
public NameAndParametersListViewItem(VisualElement root, ParameterListView parameterListView, ButtonProperties buttonProperties)
{
var itemTemplate = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
InputActionsEditorConstants.PackagePath +
Expand All @@ -72,16 +157,21 @@ public NameAndParametersListViewItem(VisualElement root, ParameterListView param
var header = container.Q<Toggle>();

var moveItemUpButton = new Button();
moveItemUpButton.AddToClassList("up");
moveItemUpButton.AddToClassList(EditorGUIUtility.isProSkin ? "upDarkTheme" : "up");
moveItemUpButton.AddToClassList("name-and-parameters-list-foldout-button");
moveItemUpButton.SetEnabled(buttonProperties.isUpButtonActive);
moveItemUpButton.clicked += buttonProperties.onClickUp;

var moveItemDownButton = new Button();
moveItemDownButton.AddToClassList("down");
moveItemDownButton.AddToClassList(EditorGUIUtility.isProSkin ? "downDarkTheme" : "down");
moveItemDownButton.AddToClassList("name-and-parameters-list-foldout-button");
moveItemDownButton.SetEnabled(buttonProperties.isDownButtonActive);
moveItemDownButton.clicked += buttonProperties.onClickDown;

var deleteItemButton = new Button();
deleteItemButton.AddToClassList("delete");
deleteItemButton.AddToClassList(EditorGUIUtility.isProSkin ? "deleteDarkTheme" : "delete");
deleteItemButton.AddToClassList("name-and-parameters-list-foldout-button");
deleteItemButton.clicked += buttonProperties.onDelete;

header.Add(moveItemUpButton);
header.Add(moveItemDownButton);
Expand Down
Loading