using UnityEditor;
using UnityEditor.IMGUI.Controls;
using UnityEngine;
using Unity.PlasticSCM.Editor.UI;
namespace Unity.PlasticSCM.Editor.CloudDrive.CreateWorkspace
{
internal class CollaboratorsMultiColumnHeader : MultiColumnHeader
{
internal CollaboratorsMultiColumnHeader(
CollaboratorsListView listView,
MultiColumnHeaderState headerState)
: base(headerState)
{
mCollaboratorsListView = listView;
}
protected override void ColumnHeaderGUI(MultiColumnHeaderState.Column column, Rect headerRect, int columnIndex)
{
if (columnIndex == 0)
{
bool isAnyItemChecked = mCollaboratorsListView.IsAnyItemChecked();
bool areAllItemsChecked = mCollaboratorsListView.AreAllItemsChecked();
var checkRect = new Rect(
headerRect.x + UnityConstants.TREEVIEW_BASE_INDENT,
headerRect.y + 3 + UnityConstants.TREEVIEW_HEADER_CHECKBOX_Y_OFFSET, // Custom offset because header labels are not centered
UnityConstants.TREEVIEW_CHECKBOX_SIZE,
headerRect.height);
EditorGUI.showMixedValue = !areAllItemsChecked && isAnyItemChecked;
bool toggleValue = EditorGUI.Toggle(
checkRect,
areAllItemsChecked);
EditorGUI.showMixedValue = false;
if (toggleValue != areAllItemsChecked)
UpdateCheckedState(toggleValue);
headerRect.x = checkRect.xMax;
headerRect.xMax = column.width;
}
base.ColumnHeaderGUI(column, headerRect, columnIndex);
}
void UpdateCheckedState(bool isChecked)
{
if (isChecked)
mCollaboratorsListView.CheckAllItems();
else
mCollaboratorsListView.UnCheckAllItems();
}
readonly CollaboratorsListView mCollaboratorsListView;
}
}