private void tvFrames_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
#region If Known Action
//(Un)check all nodes
if (e.Node.Name == _parentNodeLabel)
{
foreach (TreeNode node in e.Node.Nodes)
node.Checked = e.Node.Checked;
}
else
{
//TODO: Make to unselect as well.
if (tvFrames.Shift && tvFrames.First != -1) // last != -1 &&
{
#region If Shift-clicking and first frame selected
if (tvFrames.Last == -1)
{
tvFrames.Last = e.Node.Index;
}
//Remove the AfterCheck to prevent conflict
tvFrames.AfterCheck -= tvFrames_AfterCheck;
#region Check all
if (tvFrames.First < tvFrames.Last)
{
for (int i = tvFrames.First; i < tvFrames.Last; i++)
{
tvFrames.Nodes[0].Nodes[i].Checked = true;
}
}
else
{
for (int i = tvFrames.First; i > tvFrames.Last; i--)
{
tvFrames.Nodes[0].Nodes[i].Checked = true;
}
}
#endregion
tvFrames.First = e.Node.Index;
tvFrames.Last = -1;
tvFrames.Shift = false;
tvFrames.AfterCheck += tvFrames_AfterCheck;
#endregion
}
else if (!tvFrames.Shift)
{
tvFrames.First = e.Node.Index;
tvFrames.Last = -1;
}
//Or display the (un)checked frame
SelectFrame(e.Node.Index);
}
//Select current node
tvFrames.SelectedNode = e.Node;
#endregion
}
}