private bool PerformBoxSelection (Point pt)
{
if (box_select_mode == BoxSelect.None)
return false;
BoxSelectRectangle = CalculateBoxSelectRectangle (pt);
ArrayList box_items = BoxSelectedItems;
ArrayList items;
switch (box_select_mode) {
case BoxSelect.Normal:
items = box_items;
break;
case BoxSelect.Control:
items = new ArrayList ();
foreach (int index in prev_selection)
if (!box_items.Contains (owner.Items [index]))
items.Add (owner.Items [index]);
foreach (ListViewItem item in box_items)
if (!prev_selection.Contains (item.Index))
items.Add (item);
break;
case BoxSelect.Shift:
items = box_items;
foreach (ListViewItem item in box_items)
prev_selection.Remove (item.Index);
foreach (int index in prev_selection)
items.Add (owner.Items [index]);
break;
default:
throw new Exception ("Unexpected Selection mode: " + box_select_mode);
}
SuspendLayout ();
owner.SelectItems (items);
ResumeLayout ();
return true;
}