private void HandleCopyEvent() { if (!CanCopySelection()) { EditorGUIUtility.systemCopyBuffer = null; EditorApplication.Beep(); return; } var selectedRows = GetSelectedRows(); var rowTypes = selectedRows.Select(r => r.GetType()).Distinct().ToList(); // Don't allow to copy different type. It will hard to handle pasting if (rowTypes.Count() > 1) { EditorGUIUtility.systemCopyBuffer = null; EditorApplication.Beep(); return; } var copyList = new StringBuilder(k_InputAssetMarker); foreach (var row in selectedRows) { copyList.Append(row.GetType().Name + "\n"); copyList.Append(row.SerializeToString()); copyList.Append(k_InputAssetMarker); if (m_ActionMapsTree != null && m_ActionMapsTree.HasFocus()) { CopyChildrenItems(m_ActionsTree.GetRootElement(), copyList); } if (row.hasChildren) { CopyChildrenItems(row, copyList); } } EditorGUIUtility.systemCopyBuffer = copyList.ToString(); }
private void OnGUI() { if (Event.current.type == EventType.KeyDown) { if (m_ActionMapsTree.HasFocus() && Event.current.keyCode == KeyCode.RightArrow) { if (!m_ActionsTree.HasSelection()) { m_ActionsTree.SelectFirstRow(); } m_ActionsTree.SetFocus(); } } EditorGUILayout.BeginVertical(); // Toolbar. EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); m_InputActionWindowToolbar.OnGUI(); GUILayout.Space(5); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); //Draw columns EditorGUILayout.BeginHorizontal(); var columnOneRect = GUILayoutUtility.GetRect(0, 0, 0, 0, Styles.actionTreeBackground, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); var columnTwoRect = GUILayoutUtility.GetRect(0, 0, 0, 0, Styles.actionTreeBackground, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); DrawActionMapsColumn(columnOneRect); DrawActionsColumn(columnTwoRect); DrawPropertiesColumn(); EditorGUILayout.EndHorizontal(); // Bottom margin GUILayout.Space(3); EditorGUILayout.EndVertical(); if (Event.current.type == EventType.ValidateCommand) { if (CopyPasteUtility.IsValidCommand(Event.current.commandName)) { Event.current.Use(); } } if (Event.current.type == EventType.ExecuteCommand) { m_CopyPasteUtility.HandleCommandEvent(Event.current.commandName); } }
private void OnGUI() { if (Event.current.type == EventType.KeyDown) { if (m_ActionMapsTree.HasFocus() && Event.current.keyCode == KeyCode.RightArrow) { if (!m_ActionsTree.HasSelection()) { m_ActionsTree.SelectFirstRow(); } m_ActionsTree.SetFocus(); } } EditorGUILayout.BeginVertical(); // Toolbar. EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); m_InputActionWindowToolbar.OnGUI(); GUILayout.Space(5); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); var isPickingInteractively = m_BindingPropertyView != null && m_BindingPropertyView.isInteractivelyPicking; EditorGUI.BeginDisabledGroup(isPickingInteractively); // Draw columns. var columnsRect = EditorGUILayout.BeginHorizontal(); var columnOneRect = GUILayoutUtility.GetRect(0, 0, 0, 0, Styles.actionTreeBackground, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); var columnTwoRect = GUILayoutUtility.GetRect(0, 0, 0, 0, Styles.actionTreeBackground, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); DrawActionMapsColumn(columnOneRect); DrawActionsColumn(columnTwoRect); DrawPropertiesColumn(); EditorGUILayout.EndHorizontal(); // If we're currently interactively picking a binding, aside from disabling and dimming the normal UI, display a large text over // the window that says we're waiting for input. // NOTE: We're not using EditorWindow.ShowNotification() as, aside from having trouble displaying our dynamically generated text // properly without clipping, notifications will automatically disappear after a brief moment. We want the input requester // to stay visible for as long as we're still looking for input. EditorGUI.EndDisabledGroup(); if (isPickingInteractively) { DrawInteractivePickingOverlay(columnsRect); } // Bottom margin. GUILayout.Space(3); EditorGUILayout.EndVertical(); if (Event.current.type == EventType.ValidateCommand) { if (CopyPasteUtility.IsValidCommand(Event.current.commandName)) { Event.current.Use(); } } if (Event.current.type == EventType.ExecuteCommand) { m_CopyPasteUtility.HandleCommandEvent(Event.current.commandName); } }