private void SkeletonTab_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
//Remove any kinects that aren't in use anymore (doesn't check the first tab since that is always the merged skeletons
for (int i = SkeletonsTabControl.Items.Count - 1; i > 0; i--)
{
bool kinectFound = false;
string tabHeader = ((TabItem)SkeletonsTabControl.Items[i]).Header.ToString();
string tabUniqueID = ((IKinectSkeletonControl)((TabItem)SkeletonsTabControl.Items[i]).Content).uniqueKinectID;
for (int j = 0; j < server.kinects.Count; j++)
{
if (tabHeader == "Kinect " + server.kinects[j].kinectID.ToString())
{
if (server.kinects[j].version == KinectVersion.KinectV1 && server.kinects[j].uniqueKinectID == tabUniqueID)
{
if (((KinectV1Wrapper.Settings)server.serverMasterOptions.kinectOptionsList[j]).sendRawSkeletons)
{
kinectFound = true;
break;
}
}
else if (server.kinects[j].version == KinectVersion.KinectV2 && server.kinects[j].uniqueKinectID == tabUniqueID)
{
if (((KinectV2Wrapper.Settings)server.serverMasterOptions.kinectOptionsList[j]).sendRawSkeletons)
{
kinectFound = true;
break;
}
}
//Note: Send raw skeletons shouldn't be an option on networked Kinects. If you want the raw skeletons, connect to the original server instead!
}
}
if (!kinectFound)
{
SkeletonsTabControl.Items.RemoveAt(i);
}
}
//Add the controls for Kinects that aren't on the list but need to be
for (int i = 0; i < server.kinects.Count; i++)
{
if (server.kinects[i].version == KinectVersion.KinectV1)
{
if (((KinectV1Wrapper.Settings)server.serverMasterOptions.kinectOptionsList[i]).sendRawSkeletons)
{
bool controlFound = false;
for (int j = 0; j < SkeletonsTabControl.Items.Count; j++)
{
if (((TabItem)SkeletonsTabControl.Items[j]).Header.ToString() == "Kinect " + server.kinects[i].kinectID.ToString())
{
controlFound = true;
}
}
if (!controlFound)
{
TabItem newTabItem = new TabItem();
newTabItem.Header = "Kinect " + server.kinects[i].kinectID.ToString();
newTabItem.Content = ((KinectV1Wrapper.SettingsControl)kinectOptionGUIPages[i]).skeletonUserControl;
AddSkeletonTabItem(newTabItem, server.kinects[i].kinectID);
}
}
}
else if (server.kinects[i].version == KinectVersion.KinectV2)
{
if (((KinectV2Wrapper.Settings)server.serverMasterOptions.kinectOptionsList[i]).sendRawSkeletons)
{
bool controlFound = false;
for (int j = 0; j < SkeletonsTabControl.Items.Count; j++)
{
if (((TabItem)SkeletonsTabControl.Items[j]).Header.ToString() == "Kinect " + server.kinects[i].kinectID.ToString())
{
controlFound = true;
}
}
if (!controlFound)
{
TabItem newTabItem = new TabItem();
newTabItem.Header = "Kinect " + server.kinects[i].kinectID.ToString();
newTabItem.Content = ((KinectV2Wrapper.SettingsControl)kinectOptionGUIPages[i]).skeletonUserControl;
AddSkeletonTabItem(newTabItem, server.kinects[i].kinectID);
}
}
}
//NOTE: The networked kinects shouldn't need a control for raw skeletons, since the user will connect to the original VRPN server to get those instead of retransmitting the data again
}
}