std::vector<int> IntersectionNodesInAirport::ReflectRemoveOf( ALTObjectList objList )
{
	std::vector<int> vChangeNodeIndexs;
	//IntersectionNodeList vNodes = m_vNodeList;
	IntersectionNodeList newNodeList;	
	ALTObjectUIDList objIDList = GetObjectUIDList(objList);
	for(int i=0;i <(int)m_vNodeList.size();i++)
	{
		IntersectionNode& theNode = m_vNodeList[i];

		bool bChanged = theNode.HasObjectIn(objIDList);
		
		for(int j=0;j< (int)objIDList.size();j++)
		{
			int nObjID = objIDList.at(j);
			theNode.RemoveObjectItem(nObjID);
		}
		if(theNode.IsValid())
		{
			newNodeList.push_back(theNode);
			if(bChanged)
				vChangeNodeIndexs.push_back((int)newNodeList.size()-1);
		}
	}
	m_vNodeList = newNodeList;
	UpdateNodesIdx(*this, vChangeNodeIndexs);
	UpdateNodesName(*this, vChangeNodeIndexs);

	UpdateDataToDB(m_nAirportID, vChangeNodeIndexs);

	return vChangeNodeIndexs;
}
void CImageTreeCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
	TVITEM & item = pTVDispInfo->item;
	*pResult = 1;

	if(item.pszText && CanSetLabelText(item)) {
		if (UpdateDataToDB())
		{
		// item.pszText=m_name_new.GetBuffer();
		} 
		else
		{
		item.pszText=m_name_old.GetBuffer();
		}
		SetItem(&item);
		*pResult = 0;
	}
}
std::vector<int> IntersectionNodesInAirport::ReflectChangeOf( ALTObjectList changObjs,ALTObjectList objList )
{	
	
	IntersectionNodeList vOldNodes = m_vNodeList;

	std::vector<int> vChangeNodeIndexs;
	IntersectionNodeList newNodeList;		
	ALTObjectUIDList changeObjIDs = GetObjectUIDList(changObjs);

	for(int i=0;i <(int)m_vNodeList.size();i++)
	{
		IntersectionNode& theNode = m_vNodeList[i];

		bool bChanged = theNode.HasObjectIn(changeObjIDs);

		for(int j=0;j< (int)changeObjIDs.size();j++)
		{
			int changeOjbID = changeObjIDs.at(j);
			theNode.RemoveObjectItem(changeOjbID);
		}
		if(theNode.IsValid())
		{
			newNodeList.push_back(theNode);
			if(bChanged)
				vChangeNodeIndexs.push_back((int)newNodeList.size()-1);
		}
	}
	m_vNodeList = newNodeList;

	//calculate intersection nodes
	for(int i=0;i< (int) changObjs.size();i++)
	{
		ALTObject * pChangObj = changObjs[i].get();
		for(int j=0;j< (int)objList.size();j++)
		{
			ALTObject* OtherObj = objList[j].get();
			if( OtherObj->getID() != pChangObj->getID() )
			{
				std::vector<IntersectionNode> reslts;
				GetIntersectionNodes(pChangObj,OtherObj,reslts);
				AddNodes(reslts);
			}
		}

	}
	
	for(int i=0;i< (int)m_vNodeList.size();i++)
	{
		IntersectionNode& theNode = m_vNodeList[i];
		if(theNode.HasObjectIn(changeObjIDs))
		{
			if( vChangeNodeIndexs.end()== std::find(vChangeNodeIndexs.begin(), vChangeNodeIndexs.end(), i) )
			{
				vChangeNodeIndexs.push_back(i);
			}
		}
	}
	
	UpdateNodesIdx(*this, vChangeNodeIndexs);
	UpdateNodesName(*this, vChangeNodeIndexs);
	//
	for(int i=0;i< (int)m_vNodeList.size();i++)
	{
		IntersectionNode& theNewNode = m_vNodeList[i];
		for(int j=0;j<(int)vOldNodes.size();j++)
		{
			IntersectionNode& theOldNode = vOldNodes[j];
			if( theNewNode.GetID() == theOldNode.GetID()|| theNewNode.IsIdentical(theOldNode) )
			{
				theNewNode.SetID(theOldNode.GetID());
				vOldNodes.erase( vOldNodes.begin() + j);
				break;
			}
		}
	}
	for(int i=0;i< (int)vOldNodes.size();i++)
	{		
		IntersectionNode& theOldNode = vOldNodes[i];
		theOldNode.DeleteData();
	}
	UpdateDataToDB(m_nAirportID, vChangeNodeIndexs);

	return vChangeNodeIndexs;
}