internal void SelectedItemFromNavigation (int index)
{
switch (SelectionMode) {
case SelectionMode.None:
// .Net doesn't select the item, only ensures that it's visible
// and fires the selection related events
EnsureVisible (index);
OnSelectedIndexChanged (EventArgs.Empty);
OnSelectedValueChanged (EventArgs.Empty);
break;
case SelectionMode.One: {
SelectedIndex = index;
break;
}
case SelectionMode.MultiSimple: {
if (SelectedIndex == -1) {
SelectedIndex = index;
} else {
if (SelectedIndices.Contains (index))
SelectedIndices.Remove (index);
else {
SelectedIndices.AddCore (index);
OnSelectedIndexChanged (EventArgs.Empty);
OnSelectedValueChanged (EventArgs.Empty);
}
}
break;
}
case SelectionMode.MultiExtended: {
if (SelectedIndex == -1) {
SelectedIndex = index;
} else {
if (ctrl_pressed == false && shift_pressed == false) {
SelectedIndices.Clear ();
}
if (shift_pressed == true) {
ShiftSelection (index);
} else { // ctrl_pressed or single item
SelectedIndices.AddCore (index);
}
OnSelectedIndexChanged (EventArgs.Empty);
OnSelectedValueChanged (EventArgs.Empty);
}
break;
}
default:
break;
}
}