Error MultichronicTree::CollapseSimulation(int pId, SimulationMarker* pSimulationMarker)
{
Error lError;
//Get the Simulation and it's childrens then collapse
for(int i = 0 ; i < mEnfants.GetCount() ; i++)
{
if(mEnfants[i]->LireNom() == "Simulation")
{
Simulation* lSimulation = dynamic_cast<Simulation*>(mEnfants[i]);
if (lSimulation->GetId() == pId)
{
if(mEnfants[i]->LireNombreEnfants() != 0)
{
list<int> lSimulationIdList = lSimulation->GetChildSimulationIdList();
if(lSimulationIdList.size() > 0)
{
list<int>::iterator lSimIter;
for(lSimIter = lSimulationIdList.begin(); lSimIter != lSimulationIdList.end(); lSimIter++)
{
CollapseSimulation(*lSimIter, pSimulationMarker);
Simulation* lTempSim = SearchSimulation(*lSimIter);
lTempSim->ModifyMask(0);
}
}
}
lSimulation->Collapse();
pSimulationMarker->mSimulationList.push_back(lSimulation->GetId());
}
}
else if(mEnfants[i]->LireNom() == "SimulationMarker")
{
Simulation* lSimulation = SearchSimulation(pId);
SimulationMarker* lSimulationMarker = dynamic_cast<SimulationMarker*>(mEnfants[i]);
if(lSimulationMarker->GetId() != pSimulationMarker->GetId())
{
//EO: TEST
if(lSimulationMarker->GetId() == lSimulation->GetId())
{
pSimulationMarker->mSimMarkerList.push_back(lSimulationMarker->GetId());
list<int> lSimList = lSimulationMarker->mSimulationList;
list<int>::iterator lSimIter;
for(lSimIter = lSimList.begin(); lSimIter != lSimList.end(); lSimIter++)
{
pSimulationMarker->mSimulationList.remove(*lSimIter);
}
lSimulationMarker->Hide();
if(lSimulation->mSlider)
{
lSimulation->mSlider->SetPosition(lSimulation->mInitialPosition, false);
}
}
}
}
else
lError("Simulation not found, can't collapse the subtree");
}
return lError;
}