protected override void AddColumnHeaderContextMenuItems(GenericMenu menu) { var activeColumn = currentColumnIndex; var mousePosition = GUIClip.UnclipToWindow(Event.current.mousePosition); if (state.columns.Length > 1) { for (int i = 0; i < state.columns.Length; ++i) { var column = state.columns[i]; var menuContent = new GUIContent("Show Columns/" + GetDisplayLabel(column.headerContent)); if (state.visibleColumns.Length == 1 && state.visibleColumns.Contains(i)) { menu.AddDisabledItem(menuContent, state.visibleColumns.Contains(i)); } else { menu.AddItem(menuContent, state.visibleColumns.Contains(i), index => ToggleColumnVisibility((int)index), i); } } } if (activeColumn != -1) { if (state.columns[activeColumn].userDataObj is SearchColumn sourceColumn) { m_TableView.AddColumnHeaderContextMenuItems(menu, sourceColumn); } } // If the table view is readonly, we can't change the columns if (m_TableView.IsReadOnly()) { return; } menu.AddSeparator(""); menu.AddItem(EditorGUIUtility.TrTextContent("Add Column..."), false, () => m_TableView.AddColumn(mousePosition, activeColumn)); if (activeColumn != -1) { var colName = state.columns[activeColumn].headerContent.text; menu.AddItem(EditorGUIUtility.TrTextContent($"Edit {colName}..."), false, EditColumn, activeColumn); menu.AddItem(EditorGUIUtility.TrTextContent($"Remove {colName}"), false, () => { if (state.columns.Length == 1) { ResetColumnLayout(); } else { m_TableView.RemoveColumn(activeColumn); } }); } menu.AddSeparator(""); menu.AddItem(EditorGUIUtility.TrTextContent("Reset Columns"), false, ResetColumnLayout); }