void SetSelectionOnEvent(GObject item, InputEvent evt)
{
if (!(item is GButton) || selectionMode == ListSelectionMode.None)
return;
_selectionHandled = true;
bool dontChangeLastIndex = false;
GButton button = (GButton)item;
int index = GetChildIndex(item);
if (selectionMode == ListSelectionMode.Single)
{
if (!button.selected)
{
ClearSelectionExcept(button);
button.selected = true;
}
}
else
{
if (evt.shift)
{
if (!button.selected)
{
if (_lastSelectedIndex != -1)
{
int min = Math.Min(_lastSelectedIndex, index);
int max = Math.Max(_lastSelectedIndex, index);
max = Math.Min(max, _children.Count - 1);
for (int i = min; i <= max; i++)
{
GButton obj = GetChildAt(i).asButton;
if (obj != null && !obj.selected)
obj.selected = true;
}
dontChangeLastIndex = true;
}
else
{
button.selected = true;
}
}
}
else if (evt.ctrl || selectionMode == ListSelectionMode.Multiple_SingleClick)
{
button.selected = !button.selected;
}
else
{
if (!button.selected)
{
ClearSelectionExcept(button);
button.selected = true;
}
else
ClearSelectionExcept(button);
}
}
if (!dontChangeLastIndex)
_lastSelectedIndex = index;
}