private void filterLib()
{
if (filterListAllowed)
{
List<Creature> selectedCreatures = new List<Creature>();
foreach (ListViewItem i in listViewLibrary.SelectedItems)
selectedCreatures.Add((Creature)i.Tag);
var filteredList = from creature in creatureCollection.creatures
select creature;
// if only one species should be shown
if (listBoxSpeciesLib.SelectedItem != null && listBoxSpeciesLib.SelectedItem.ToString() != "All")
filteredList = filteredList.Where(c => c.species == listBoxSpeciesLib.SelectedItem.ToString());
// if only certain owner's creatures should be shown
bool hideWOOwner = (creatureCollection.hiddenOwners.IndexOf("n/a") >= 0);
filteredList = filteredList.Where(c => !creatureCollection.hiddenOwners.Contains(c.owner) && (!hideWOOwner || c.owner != ""));
// show also dead creatures?
if (!checkBoxShowDead.Checked)
filteredList = filteredList.Where(c => c.status != CreatureStatus.Dead);
// show also unavailable creatures?
if (!checkBoxShowUnavailableCreatures.Checked)
filteredList = filteredList.Where(c => c.status != CreatureStatus.Unavailable);
// show also neutered creatures?
if (!checkBoxShowNeuteredCreatures.Checked)
filteredList = filteredList.Where(c => !c.neutered);
// display new results
showCreaturesInListView(filteredList.OrderBy(c => c.name).ToList());
// update creaturebox
creatureBoxListView.updateLabel();
// select previous selecteded again
int selectedCount = selectedCreatures.Count;
if (selectedCount > 0)
{
for (int i = 0; i < listViewLibrary.Items.Count; i++)
{
if (selectedCreatures.Contains((Creature)listViewLibrary.Items[i].Tag))
{
listViewLibrary.Items[i].Focused = true;
listViewLibrary.Items[i].Selected = true;
if (--selectedCount == 0)
{
listViewLibrary.EnsureVisible(i);
break;
}
}
}
}
}
}